第二次简单的栈溢出

同样首先使用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啦

猜你喜欢

转载自blog.csdn.net/z671514087/article/details/124506218