[第五空间2019 决赛]PWN51解题

本文讲述了如何通过分析32位ELF文件中的格式化字符串漏洞,利用IDA工具进行逆向工程,找到控制系统的路径。通过计算偏移量,作者指导如何构造payload,最终使用pwn库的recvuntil函数获取控制权并获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.打开靶机,下载文件,检查文件类型,32位ELF,NX机制打开,栈区Canary保护开启,栈溢出无法执行,用ida编译,发现printf函数,考虑格式化字符串漏洞。2.主要信息在19到29行,用AI分析代码,大体意思是从文件中读取4个字节的数据到unk_804C044变量中,作为用户名name,之后输出提示信息"your passwd:",再输入密码,并与unk_804C044进行比较,如果两者相等,执行system("/bin/sh")命令,进入system函数,达到我们控制目的。

3.利用格式化字符串漏洞,我们在终端上运行该函数,输入./pwn,回车,为确定格式化字符串与实际运行的函数的距离(即偏移量)再输入AAAA.%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,显示如下图,因为A为字符数据,%x为格式化输出十六进制的数据,转化为A的ASCⅡ代码是65,十六进制下为0x41,四个A即为0x41414141,数一下离我们输入的AAAA有十个数据,则说明偏移量是10。

4.这样编写脚本的时候就注意,在对应存入的地址栈前10个位置(unk_804C044的真实运行地址)填入数据,在ida里看是存入长度为4个字节的数据作为用户名,再后来输入密码passwd,也用相同的方式填入长度为4个字节数的数据,进入system,得到控制权。

5.io.recvuntil()在pwn库中含义为从字节流中读取数据直到遇到后面括号里的数据停止,(第一个:即为name:后要输入的4字节长度,第二个:即为passwd:后输入的密码)在脚本相应的位置写入它们,停止读取后紧跟我们写入sendline的payload进行编译。最后交互数据,得到flag。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值