PWN基础10:Ret2Shellcode 32位实例

Ret2Text的局限:上节课,学习了Ret2Text,在编写Exp时依赖程序本身中存在system("/bin/sh")函数,那如果我们要分析的程序中没有调用这个函数呢?

针对这个问题,我们可以使用ret2shellcode、ret2libc、ret2csu、ret2syscall、stack pivot、ret2dl_resolve这些方法

今天我们来学习Ret2Shellcode

基础知识

1、Ret2Shellcode利用条件

  • 程序本身没有执行shell的函数
  • 需要程序没有开启NX保护

2、Linux系统调用

  • 所有的操作系统在其内核里都有一些内建的函数,这些函数可以用来完成一些系统级别的功能。
  • Linux系统使用的这样的函数叫做“系统调用”,英文是systemcall
  • 这些函数代表了从用户空间到内核空间的一种转换,例如在用户空间调用open函数,则会在内核空间调用sys_open。
  • 每个系统调用都有一个定义好的数字,这些数字是用来构造这些系统调用的
  • 内核通过0x80中断来管理这些系统调用,这些系统调用的对应的数字和一些参数都在调用的时候送到某些寄存器里面
  • 系统调用的数字实际上是一个序列号,表示其在系统的一个数组sys_call_table[]中的位置
  • 系统调用可以在此文件中看到:/usr/include/x86_64-linux-gnu/asm/unistd_32.h

3、如下图,是编写Shellcode会用到的一个模板。将要用到的系统调用号传入eax中,将要用到的参数按如下图传入到对应的寄存器中,随后,通过int 0x80来陷入核心,参数也将通过寄存器传往核心

对int 0x80的详细理解请参考文章:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值