拿到程序后,我们首先checksec
一下
可以看到是64位程序,好的是这次只开了NX(堆栈不可执行),ok,我们跑一下程序看看
可以看到它是一个输入,然后就啥都没有了emmmm....好吧,咱们继续放到IDA里面看看
通过观察我们可以发现当dword_60106C这个变量的值为1853186401时,程序会进入一个函数中,而这个函数的作用则是抓取flag。
好了,很明显了,接下来的问题时我们如何去改变这个变量的值。通过双击查看我们可以知道dword60106C和unk601068这俩变量都在.bss段,并且dword60106C就在离unk601068四个位置的地方,而凑巧的时unk601068时可以被控制的,它是由我们输入的,而输入点给了我们10个长度的输入权限,那正好,我们可以借此覆盖掉dword60106C使它变成我们需要的数值
ok了,分析结束,上exp
```python from pwn import *
context.log_level = 'debug'
r = remote('111.198.29.45', 42136)
payload = 'A' * 4 + p64(1853186401)
r.recvuntil("lets get helloworld for bofn") r.sendline(payload) print r.recv() ``` 我们瞅一下运行结果
最后放一下我的博客(http://www.sailingplace.cn),有兴趣的可以来看看(萌新的小天地,轻点喷)
ok,nice!我们下次见。