首页
社区
课程
招聘
[原创] Layer7 CTF Pwn题部分Writeup
发表于: 2019-10-8 11:25 14976

[原创] Layer7 CTF Pwn题部分Writeup

2019-10-8 11:25
14976

此比赛是韩国的一个CTF比赛,题目质量还可以。题目构思精细,比较有意思。

此题是此次Pwn中较为简单的一道题目,主要是一道考察栈溢出和secomp的题目。 图片描述有栈溢出漏洞但是限制了部分syscall。 图片描述不能调用system("/bin/sh"),open被限制了但是没有限制openat , 那么这里可以使用openat syscall来打开flag文件,然后读取并write。exp如下:

图片描述

这题还是挺有意思的,漏洞点不是那么显而易见。比较有隐藏性。
程序的主要逻辑:
1.打开/dev/urandom并生成随机数种子
2.两个功能,第一个生成随机sha1,第二个是和特定hex对比。
3.整个程序我们可控制的范围很小。没有明显的栈溢出漏洞。
刚开始没啥思路,就checksec了一下 图片描述发现没有开启栈保护,于是乎猜测和栈溢出有关?
写上脚本盲跑一番,果然程序崩溃了。我们读取index选择功能的时候,输入一串'a'居然覆盖了eip。当时就比较懵。没有分析其具体原因,找了一下偏移,偏移是8,总共能输入32个字节,
图片描述构造ROP链只有24个字节,也就是只能执行一个函数的函数,然后执行完了连ret的地址也控制不了,当时就陷入了僵局。翻了翻函数表,发现一个函数没有被程序用到,可能是作者留下的暗门函数。 图片描述这个可以控制读取的地方,你通过多次输入发现size其实是和我们输入的eip的前8个字节的最后一个字节有关。后面的技术是栈迁移技术。
我们这里谈一下,如何造成了(栈溢出漏洞):
看此图
图片描述
图片描述
这里函数传入一个buf变量给gensha1。此变量的大小是24。sprintf函数用于拼接index和sha1。当index大于100就会导致破坏ebp,最后一个字节被覆盖为0x00。 图片描述这样直接我们返会到main再返回到__libc_start_main,两个leave会导致esp发生变化。通过不断调试,可以使esp的位置指向我们输入chooice的位置。这样我们就可以写eip了。这里是本漏洞的成因。下面是利用exp:

图片描述


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-1-31 14:56 被kanxue编辑 ,原因:
上传的附件:
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 26245
活跃值: (63297)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2019-10-8 11:37
0
雪    币: 270
活跃值: (1662)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
3
感谢分享~
最后于 2019-10-14 21:03 被Vinadiak编辑 ,原因:
2019-10-14 20:31
0
雪    币: 44
活跃值: (56)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
seccomp-tools这个工具dump出来的不是允许执行的调用吗
2019-10-24 17:11
0
雪    币: 188
活跃值: (621)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
请问,第一题how old are you中,你怎么确定flag的位置是/home/seccomp/flag啊?
如果openat用相对路径的话,第一个参数fd有办法得到嘛?
2020-4-23 17:51
0
游客
登录 | 注册 方可回帖
返回
//