pwnable.kr mistake

分析源码,发现下面这段代码有点可疑。

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

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,