ctf wiki rop基础 ret2syscall

1.通过ida查看需要写入多少字节才能到返回地址

使用ida进行反汇编查看

 发现存在gets函数 存在溢出漏洞

记录gets函数断点值

使用gdb进行动态调试:

打入断点

r开始执行

查看到 eax 和 esp 的值 如下 通过ebp-eax的值

 

需要填充0X6C+4个字节才会到返回地址

 

int x80作用

操作系统提供了中断指令int 0x80来主动进入内核,这是用户程序发起的调用访问内核代码的唯一方式

  • 用户程序中包含一段包含int指令的代码,通常是由库函数通过内联汇编插入
  • 操作系统写中断处理,获取想调程序的编号
  • 操作系统根据编号执行相应的代码


调用系统函数时会通过内联汇编代码插入int 0x80的中断指令,(不仅会插入中断指令,还会将系统调用编号设置给 %eax 寄存器)

内核接收到int 0x80中断后,需要查询IDT表来取出中断处理函数地址,这个地方比较细节的地方是,int 0x80的idt表中的DPL被设置成了3,所以才能从用户态能直接访问int 0x80的中断指令的。

个人理解:当出现int 0x80 时候 ,进入内核,可以使用eax ebx,。。。从而执行对应的系统调用。

其中,该程序是 32 位,所以我们需要使得

  • 系统调用号,即 eax 应该为 0xb
  • 第一个参数,即 ebx 应该指向 /bin/sh 的地址,其实执行 sh 的地址也可以。
  • 第二个参数,即 ecx 应该为 0
  • 第三个参数,即 edx 应该为 0

利用工具去匹配pop eax ret

选择第一个:

0x080bb196

匹配ebx

0x0806eb90

匹配“/bin/sb”

080be408

构造playload

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值