同样首先使用checksec命令查看文件类型和权限
可以看到是32位的,所以我们去windows下在对应的IDA下打开文件
发现其使用了gets函数,并且把获得到的内容赋值给了buf2数组,而buf2数组并没有在main函数内定义,所以是一个未初始化的全局变量,存放在.bss段。所以我们可以通过shellcraft.sh()函数,创造一个shell,并将其写入buf2,然后通过栈溢出,将函数的返回地址覆写为我们构造的shell的地址,这样就可以达到获取shell的目的了。
先找到buf2的首地址0x804A080,然后我们就可以去ubuntu下操作了。
通过pwndbg动态调试,找到要ebp的地址,通过计算:0x88-0x1c+4=112,所以我们要覆写112个字节的数据 。接下来我们去编写攻击脚本。
扫描二维码关注公众号,回复:
15248963 查看本文章
asm(shellcraft.sh())//默认产生一个32位的shell
asm(shellcraft.amd64.sh())//可以产生一个64位的shell
目标位64位机器时,需要先设置目标机的参数
context(os=’linux’, arch=’amd64’, log_level=’debug’)//主要设置arch=amd64
//os设置系统为linux系统,大多数pwn题目的系统都是linux
//arch设置为amd64,可以简单的认为设置为64位的模式,对应的32位模式是’i386’
//log_level设置日志输出的等级为debug,这句话在调试的时候一般会设置,这样pwntools会将完整的io过程都打印下来,使得调试更加方便
这样我们执行脚本之后就可以成功拿到shell啦