美文网首页
pwnable.kr [Toddler's Bottle

pwnable.kr [Toddler's Bottle

作者: Umiade | 来源:发表于2017-06-14 23:14 被阅读36次

    We all make mistakes, let's move on.
    (don't take this too seriously, no fancy hacking skill is required at all)

    This task is based on real event
    Thanks to dhmonkey

    hint : operator priority

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

    考查C语言基本功和细心程度
    先放源码:

    #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\n", fd);
            return 0;
        }
    
        printf("do not bruteforce...\n");
        sleep(time(0)%20);
    
        char pw_buf[PW_LEN+1];
        int len;
        if(!(len=read(fd,pw_buf,PW_LEN) > 0)){
            printf("read error\n");
            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\n");
            system("/bin/cat flag\n");
        }
        else{
            printf("Wrong Password\n");
        }
    
        close(fd);
        return 0;
    }
    
    
    

    问题就出在 if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0) 这里,由于fd=open()外没有括号,而 < 的优先级高于 = ,于是先执行 open() 函数,再比较和0的大小,最后赋值给fd。

    当 open 成功时返回一个正数,这里的判断逻辑就变成了正数 < 0,返回false,也就是0。所以最后赋给 fd 的值为0,也就变成了stdin。

    连续输入两个10byte的密码就行了,一个每一位和 1 亦或,比如可以输入00000000001111111111....(惭愧,笔者一开始还以为是栈溢出,没有看到少了括号,也没看到 "%10s" ,阴差阳错地输入了这条字串还给我跑出了flag。直到去琢磨了一下“operator priority”和“do not bruteforce”,仔细看了好久才发现 - - )
    结果如下:

    mistake@ubuntu:~$ ./mistake
    do not bruteforce...
    00000000001111111111
    input password : Password OK
    Mommy, the operator priority always confuses me :(
    
    

    相关文章

      网友评论

          本文标题:pwnable.kr [Toddler's Bottle

          本文链接:https://www.haomeiwen.com/subject/nqaeqxtx.html