[Pwn]
Pwnable.kr mistake
· 1 分钟阅读 · @admin


分析源码,发现下面这段代码有点可疑。
fd=open(“/home/mistake/password”,O_RDONLY,0400) < 0
熟悉Linux的童鞋都知道文件描述符是不可能小于0的。计算得fd等于0,因为“<“比”=“优先级高,先计算等式右边,打开的文件描述符不可能小于0,因此右边等式等于0,最后fd=0; 文件描述符为0是标准输入,也就是说这个程序实际上并没有读取password文件,而是从标准输入中读取数据。
继续往下看,有个比较,两个buff相等则输出flag。
if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
printf("Password OK\n");
system("/bin/cat flag\n");
}
这样,我们只要构造一个满足条件的buffer通过管道传给mistake。buffer满足下面这个条件就能成功拿到key。
pw_buf = pw_buf2^0x1111111111
执行如下命令。
(python -c "print '\x12'*10 + '\x13'*10 ") | ./mistake


