拿到题目例行检查

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. python实现调用摄像头或打开视频文件

    目录: (一)调用摄像头或打开视频文件代码实现 (二)说明和补充 (一)调用摄像头或打开视频文件代码实现 1 # -*- coding=GBK -*- 2 import cv2 as cv 3 4 5 ...

  2. OpenCV常用操作函数大全

    https://blog.csdn.net/Vici__/article/details/100714822 目录 cv2常用类: 1.图片加载.显示和保存 2.图像显示窗口创建与销毁 3.图片的常用 ...

  3. Jenkins教程(八)实现 GitLab 触发 Jenkins 自动按模块发布前端

    楔子 上篇文章解决了提交/合并请求自动触发的需求,但所有前端模块都在同一个代码仓库里,如何获取变更文件路径确定要发布哪个模块呢?本文将带你解决这个问题. 思路 分别解决 3 个问题: 获取变更的文件列 ...

  4. [atARC105F]Lights Out on Connected Graph

    记$G[S]$表示图$G$在点集$S$上的导出子图,即$G[S]=(S,{(x,y)|x,y\in S且(x,y)\in E})$ 定义$g(S)$为所有$E'$(满足$E'\subseteq G[S ...

  5. [cf516E]Drazil and His Happy Friends

    令$d=\gcd(n,m)$,存在$x$和$y$使得$xn+i=ym+j$的充要条件是$i\equiv j(mod \ d)$,因此将$xd+i$(其中$0\le i<d$)作为一组,共有$d$ ...

  6. [loj3179]视觉程序

    暴力做法:1.对每一行/列求$or$:2.枚举行的差值$i$,并对任意相差为$i$的行和相差为$k-i$的列求$and$,对行/列的$and$结果求$or$,对行和列的$or$求$and$,对所有$i ...

  7. 【Tool】JDK8 安装

    JDK8 2019-07-26  14:05:21  by冲冲 1. 下载 通常前往官网 https://www.oracle.com/technetwork/java/javase/download ...

  8. CF187D BRT Contract

    考虑如果哪次经过了红灯则显然已经和出发的时间没关系了. 然后我们需要做的是怎么样找到最近的一个是红灯的点. 然后实际下是我们做一个前缀和:\(L_i = \sum d_i\) 然后求\(\min (L ...

  9. CF1559D2 Mocha and Diana (Hard Version)

    考虑到加树边每次最多只导致一对联通块之间的状态. 所以我们以任意顺序加入当前的合法边. 我们考虑先加入所有可加的\((1,a)\) 然后统计只在\(A\)中与1连的点,\(B\)中与2连的点. 则他们 ...

  10. Codeforces Round #717 (Div.2) 题解

    我 AK 的第二场(?)的 Div.2,还捡了个 rk4(虽然我 div2 only 的最高记录是 rk2)祭之( A 这题我竟然 WA 了两发,丢人( 直接贪心,对于 \(i=1,2,\cdots, ...