首页
社区
课程
招聘
[原创]简单分析南邮实训平台pwn方向第二题 - Stack Overflow
发表于: 2019-3-1 13:38 6958

[原创]简单分析南邮实训平台pwn方向第二题 - Stack Overflow

2019-3-1 13:38
6958

系统 : Windows xp / ubuntu 32bit
程序 : cgpwna
要求 : 缓冲区溢出执行cat命令
使用工具 :IDA

在linux系统中,使用file命令查看文件的信息:

发现是32位的可执行程序,我们可以先运行一下,了解其输出:

直接用ida载入该程序,按下Shift+F12查看字符串列表:

双击字符串bye查看具体信息,这里通过交叉参考功能定位到main函数,按下F5查看其伪c代码:

其中的两个函数内容如下:

这里,接收用户输入的函数的fgets函数:

该函数指定了buf的大小,看上去没有什么问题,我们再检查下缓冲区:
Alt text
这里,缓冲区只有40字节的大小,却指定可以接受60个字节大小的数据呢。我们双击'A'查看详细信息:

我们可以给予缓冲区A超过40字节的数据来替换掉n的值,这样就能溢出缓冲区s的值了:

双击n查看函数栈视图:

此处我们知道,要溢出覆盖n的值,需要40+4个字节的数据填充;而要溢出覆盖函数返回地址,则需要30h+8h=38h(56)个字节的数据。

在ida的函数列表视图中,很轻松的找到了pwnme函数:

我们需要修改函数的参数,然后调用system函数执行cat命令查看flag文件。

再来仔细看看函数的汇编代码:

函数将command字符串的地址放入esp寄存器指向的栈空间,然后调用了system函数。
我们要做的事,就是将要执行的命令放入缓冲区A中(地址固定),然后将缓冲区A的地址,放入esp寄存器指向的栈空间中,最后直接跳转到地址0804852A调用system函数。

也就是说,我们想要利用漏洞执行cat命令,有两个条件:

我们知道,执行ret时会弹栈,esp会指向函数返回地址的下一格栈单元:
Alt text

所以不妨填充函数返回地址下方的栈单元为offest A,当ret 指令跳转执行call system命令时,esp也指向了缓冲区A的地址。

按照以上推理,用python编写shellcode如下:

连接服务器,用生成的文件作为输入:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-3-1 13:55 被顾言庭编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 42947
活跃值: (65767)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
 楼主又出新作
2019-3-1 17:04
0
雪    币: 30
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
楼主能给个EXP不
2019-7-10 14:49
0
雪    币: 206
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不是明摆着给了exp么?那个netcat不会用?
2019-7-26 14:18
0
游客
登录 | 注册 方可回帖
返回