ciscn_2019_s_3
拿到题目例行检查
64位程序开启了nx保护,将程序放入ida
看到没有system函数第一时间想到的就是泄露libc来做,后来才知道是我学识尚浅,需要用execve函数来做
进入main发现跳转到vuln,于是在进入vuln查看
定义了0x10可以写入0x400读取0x30,有明显的栈溢出
进入gadgets查看
经过网上的查询 mov rax,3bh是sys_execve系统调用,所以我们可以用execve(/bin/sh,0,0)获取shell
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
要使用execve函数,我们需要让rdi=/bin/sh rdx=0 rsi=0
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先我们先获得/bin/sh的地址:
程序中没有/bin/sh,我们可以通过read写入到栈中,然后获得/bin/sh的地址
在vuln设置断点,输入aaaaaaaabbbbbbbb
通过stack 30查看
可以看到第三行显示了地址距离我们决定在栈中写入/bin/sh的偏移位 0xe0e8-0xdfd0=280
也就是说当获取0x20的数据然后减去280就是栈中我们写入的/bin/sh的地址
然后我们让rdx=0,当我们用ROPgadget搜索时发现没有pop rdx,所以我们需要使用别的方法
我们在ida中找到这里
可以看到mov rdx,r13, 当r13=0的时候rdx也就为0所以我们可以借用这个地址和下面的pop地址
注意:call【r12+rbx*8】当rbx=0的时候就会 跳转到r12的位置,可以跳转到后面的rop继续执行
现在让rdi=/bin/sh
所需要的都已经获得,构造exp
成功获取到flag
结束
参考博客!
[BUUCTF]PWN21——ciscn_2019_s_3 - Angel-Yan - 博客园 (cnblogs.com)
(4条消息) 【pwn】ciscn_2019_s_3_Nothing-CSDN博客_ciscn_2019_s_3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现