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
ciscn_2019_s_3的更多相关文章
- [BUUCTF]PWN21——ciscn_2019_s_3
[BUUCTF]PWN21--ciscn_2019_s_3 附件 步骤 例行检查,64位,开启了NX保护 试运行的时候回显是一些乱码,直接用ida打开,从main函数开始看 main函数调用了vuln ...
- ciscn_2019_s_3 一道收获很多的题(进步大只能说明基础差)
32位与64位 系统调用的区别: 1. 传参方式不同 2. 系统调用号 不同 3. 调用方式 不同 32位: 传参方式:首先将系统调用号 传入 eax,然后将参数 从左到右 依次存入 ebx,ecx, ...
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
- 记两道最近做的pwn题(ciscn_2019)
这两题为什么要记录呢,一个是我发现网上很多教程没写清楚(也可能是我太菜了),二是细节点很多,不同的大佬方式不太一样,有很多细节需要注意 ciscn_2019_es_2 这题是栈迁移的题,先上exp 1 ...
- SROP
先放个例题吧,原理后面有时间再更:BUUCTF ciscn_2019_s_3 保护只开了nx 1 signed __int64 vuln() 2 { 3 signed __int64 v0; // r ...
- BUUCTF-PWN-第一页writep(32题)
温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 ex ...
随机推荐
- [atARC126F]Affine Sort
记$g(k)$为$c$恰为$k$的合法三元组数,显然$f(k)=\sum_{i=1}^{k}g(i)$ 结论:若$\lim_{k\rightarrow \infty}\frac{g(k)}{k^{2} ...
- [noi32]sort
先解释一下checker.cpp,它的判定标准是2e7,即答案超过2e7就认为代价过大了. 首先,很容易想到的办法是直接对其快排,从外到内交换区间即可,然而这样会被邪恶的出题人给卡掉(当然其实随便一组 ...
- C#动态创建接口的实现实例对象
本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函数是否有参数? 准备工作 首先新建一 ...
- myeclipse maven web打包
1.在当前的项目pom.xml的文件上,如下图所示:鼠标右键->run As->Maven Build...
- nothing to commit, working tree clean
本地git提交代码,没有发现有什么啥情况. 本地代码提交不上去
- springboot和mybatis集成
springboot和mybatis集成 pom <?xml version="1.0" encoding="UTF-8"?> <proje ...
- HTML四种定位-固定定位
固定定位 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q ...
- round函数和获取当前时间函数
round函数:对一个浮点类型的数据进行四舍五入:round(3.14) 运行结果就是3 获取当前时间: time.time() ,time函数需要导入才能使用,import time
- Codeforces 590E - Birthday(AC 自动机+Dilworth 定理+二分图匹配)
题面传送门 AC 自动机有时只是辅助建图的工具,真的 首先看到多串问题,果断建出 AC 自动机.设 \(m=\sum|s_i|\). 不难发现子串的包含关系构成了一个偏序集,于是我们考虑转化为图论,若 ...
- sigma网格中水平压力梯度误差及其修正
1.水平梯度误差产生 sigma坐标系下,笛卡尔坐标内水平梯度项对应形式为 \[\begin{equation} \left. \frac{\partial }{\partial x} \right| ...