lotto
IDA看一下程序的流程
看一下流程,这里是进行了两个循环,Buf是从/dev/urandom中读入的6个字节,submit是我们输入的字符串。循环的意思就是让我们输入的6个字符恰好和系统生成的6个随机字符相等(顺序可以不同),可是,题目中也说了,这太难了。后面看到,这里只要让v4=6就可以了。这就是这道题的脆弱点,那么,例如这样:
buf中是abcdef
而我们输入的时ffffff
同样可以让v4=6
根据题目给的意思,是从/dev/urandom中读取6个字节,这个文件是Linux下根据系统熵产生的随机数,我输出了一部分看了一下,很少看到有控制字符。
而ascii中0-31(127)是控制字符,其余都是可见字符,再结合题目中说,给出6个小于46的数字,因此把范围缩小到:
没什么好办法,就只能一个一个试一试了。
从45开始
然而两次就出来了~~,在本机测试测了好几个出来….
flag:sorry mom… I FORGOT to check duplicatenumbers… :(