XYCTF pwn部分题解 (部分题目详解) [复制链接]
发表于 2024-5-18 19:59:55 | 显示全部楼层 |阅读模式
hello_world(签到)

思绪:✅
这道题就是使用printf函数泄漏libc的基地点,然后再次举行栈溢出通过system,/bin/sh来获取shell
wp:

invisible_flag

思绪:✅
题目提示orw,那我们先看看是否开了沙盒

那么是开了沙盒的,试试orw读取flag

虽然保护全开但是程序会实行我们写的shellcdoe那么就可以orw读取flag了
wp:

static_link

思绪:✅
那么这题提示我们是静态编译,对于静态编译的,哪些ret2libc什么的都没法使用了,但是我们可以使用程序现有的函数,比如read,write,mprotect....等等。那么这道题目就可以使用mprotect函数来获取shell,对于这个函数详细的表明可以看看这篇博客 mprotect静态编译
wp:

guestbook1

思绪:✅通过修改index和name来完成雷同于栈迁移的过程,先修改最后一个字节到backdoor,由于我们不知道栈的地点,但是可以通过爆破最后一个字节来完成迁移(有1/16的概率

wp:

baby_gift

思绪:✅题目给了我们gift函数,但是我发现没有什么实际的作用,但是他提醒了我们要看看rdi(hahaha)

程序是有溢出的,但是没有pop_rdi那一类的gadget

那我们看看反汇编的GetInfo函数,发现了一个不得了的东西

那么就是我们输入栈上的数据被赋值给了rax,rax赋值给了rdi,也就是我们可以,通过输入的数据来控制rdi,那么我输入一个%p后面\x00截断一下,然后返回地点调用printf是不是就可以泄漏rsi的地点,我们还要看一下rsi的地点是不是跟libc的地点有关

发现是有关的,那么我们就可以计算出read函数的地点,进而得到libc版本和libc_base
那么接下来就再来一次溢出通过输入/bin/sh控制rdi,然后system就好了
但是值得注意的是我们要把eax清零之后再举行我们的打印和system函数,否则就会出现一系列的问题。

wp:

fmt

思绪:✅题目是格式化字符串类型的题目,而且给了后门函数,还有libc的地点,但是这次没有给我们printf而是scanf,但是本质上是一样的,都可以举行漏洞的使用,由于程序使用exit来退出的,我们可以使用sacnf的%s来举行修改exit_hook为后门函数,关于这个函数具体可以看这个博客 https://www.cnblogs.com/bhxdn/p/14222558.html
wp:

❗这里踩个坑,我发现直接gdb调试和使用脚本来动态调试,exit_hook的偏移不一样,可能是我输入的东西的区别?.......所有还是以脚本调试的为主吧haha
simple_srop

思绪1:✅本题开了沙盒,所以不能直接sh来举行getshell,可以举行orw读取flag,注意一下偏移即可


思绪2:✅通过mprotect函数实行orw shellcode,当然这个shellcode可以手写也可以使用工具,其实两种思绪都是差不多的都要注意偏移
wp:

Intermittent

思绪:✅这个题目限制了我们的shellcode,但是别怕,由于程序会跳到,可实行段上去实行,然后我们输入的数据在栈上,它会四个字节一组赋值给可实行段上,但是不一连,我们可以通过我们输入栈上的数据和它共同来syscall
由于rax要为一个合法地点,所以我们要给rax赋值(它实际上是把rax最低的一个字节加到它自己)

wp:
 

那先到这里吧(后续我再补上haha)

总结:这次收获很大,比赛不是目的,而是总结提高的一次机会,师傅们都很厉害,各人一起交换,有什么具体的问题可以评论留言,第一时间解答!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表