[攻防世界]进阶区dice_game
还是先看文件属性及保护措施
除了canary基本都开了,应该是要栈溢出来做题
看字符串窗口发现没有system也没有bash,一开始还以为给的libc是让我调用system的,后来发现在sub_B28这个函数里,有读取flag的操作,所以只要进入sub_B28,即可拿到flag
运行一下这个程序发现是个猜数游戏,看main函数中的while部分
可以发现猜对50次即可进入函数sub_B28,从而拿到flag
而其中的sub_A20就是判断猜数正不正确的函数
而判断的标准就是输入的数是否等于v2,而 v2 = rand() % 6 + 1 ,v2是有rand函数产生的1~6的伪随机数,如果能得到seed值或修改成已知值,那么就可以用循环通过50轮判断
而main函数里,存在一个read溢出,buf只有50位,但read了80位
看main的栈可知,buf正好在seed上方,所以可以用buf溢出来更改seed值
已知seed后,调用libc中的srand和rand即可得到每次的伪随机值,循环输入通过50轮即可拿到flag
思路:
1 | from pwn import * |
payload解释:
- ‘a’*0x40:填充buf和seed之间,让buf溢出至seed
- p64(1):覆盖seed值为 1