拿到题目例行检查

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的更多相关文章

  1. [BUUCTF]PWN21——ciscn_2019_s_3

    [BUUCTF]PWN21--ciscn_2019_s_3 附件 步骤 例行检查,64位,开启了NX保护 试运行的时候回显是一些乱码,直接用ida打开,从main函数开始看 main函数调用了vuln ...

  2. ciscn_2019_s_3 一道收获很多的题(进步大只能说明基础差)

    32位与64位 系统调用的区别: 1. 传参方式不同 2. 系统调用号 不同 3. 调用方式 不同 32位: 传参方式:首先将系统调用号 传入 eax,然后将参数 从左到右 依次存入 ebx,ecx, ...

  3. Buuctf刷题:部分

    get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...

  4. [BUUCTF-Pwn]刷题记录1

    [BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...

  5. 记两道最近做的pwn题(ciscn_2019)

    这两题为什么要记录呢,一个是我发现网上很多教程没写清楚(也可能是我太菜了),二是细节点很多,不同的大佬方式不太一样,有很多细节需要注意 ciscn_2019_es_2 这题是栈迁移的题,先上exp 1 ...

  6. SROP

    先放个例题吧,原理后面有时间再更:BUUCTF ciscn_2019_s_3 保护只开了nx 1 signed __int64 vuln() 2 { 3 signed __int64 v0; // r ...

  7. BUUCTF-PWN-第一页writep(32题)

    温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 ex ...

随机推荐

  1. [atARC126F]Affine Sort

    记$g(k)$为$c$恰为$k$的合法三元组数,显然$f(k)=\sum_{i=1}^{k}g(i)$ 结论:若$\lim_{k\rightarrow \infty}\frac{g(k)}{k^{2} ...

  2. [noi32]sort

    先解释一下checker.cpp,它的判定标准是2e7,即答案超过2e7就认为代价过大了. 首先,很容易想到的办法是直接对其快排,从外到内交换区间即可,然而这样会被邪恶的出题人给卡掉(当然其实随便一组 ...

  3. C#动态创建接口的实现实例对象

    本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函数是否有参数? 准备工作 首先新建一 ...

  4. myeclipse maven web打包

    1.在当前的项目pom.xml的文件上,如下图所示:鼠标右键->run As->Maven Build...

  5. nothing to commit, working tree clean

    本地git提交代码,没有发现有什么啥情况. 本地代码提交不上去

  6. springboot和mybatis集成

    springboot和mybatis集成 pom  <?xml version="1.0" encoding="UTF-8"?> <proje ...

  7. HTML四种定位-固定定位

    固定定位 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q ...

  8. round函数和获取当前时间函数

    round函数:对一个浮点类型的数据进行四舍五入:round(3.14)   运行结果就是3 获取当前时间: time.time()    ,time函数需要导入才能使用,import time  

  9. Codeforces 590E - Birthday(AC 自动机+Dilworth 定理+二分图匹配)

    题面传送门 AC 自动机有时只是辅助建图的工具,真的 首先看到多串问题,果断建出 AC 自动机.设 \(m=\sum|s_i|\). 不难发现子串的包含关系构成了一个偏序集,于是我们考虑转化为图论,若 ...

  10. sigma网格中水平压力梯度误差及其修正

    1.水平梯度误差产生 sigma坐标系下,笛卡尔坐标内水平梯度项对应形式为 \[\begin{equation} \left. \frac{\partial }{\partial x} \right| ...