基本ROP技巧总结

ROP攻击前提:

  • 存在栈溢出并且可以控制返回地址
  • 存在满足条件的gadget,如果开启了PIE保护则要想办法泄露gadget的地址


ret2text

程序本身存在类似于system('/bin/sh')或者execv('/bin/sh')的片段,我们可以直接将返回地址覆盖为其地址跳转到已有代码上。

例子:

TODO


ret2shellcode

这种方法要求我们自己构造shellcode并控制程序跳转到我们构造的shellcode处运行。一般情况下我们都是向栈中缓冲区写入shellcode,这种情况需要程序关闭NX,

例子 :ret2shellcode

检查程序发现没有开启任何保护

qts@qts-PC:~/奇幻世界/杂题/ret2shellcode$ ./checksec.sh --file ret2shellcode 
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
Partial RELRO   No canary found   NX disabled   Not an ELF file   No RPATH   No RUNPATH   ret2shellcode
可以看到这里将内容复制到位于bss段的buf2中。
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v4; // [sp+1Ch] [bp-64h]@1

  setvbuf(stdout, 0, 2, 0);
  setvbuf(stdin, 0, 1, 0);
  puts("No system for you this time !!!");
  gets((char *)&v4);
  strncpy(buf2, (const char *)&v4, 0x64u);
  printf("bye bye ~");
  return 0;
}

查看一下bss段是否可执行

readelf -S ret2shellcode查看bss段位于0x804a040

[24] .data             PROGBITS        0804a028 001028 000008 00  WA  0   0  4
[25] .bss              NOBITS          0804a040 001030 0000a4 00  WA  0   0 4 

gdb调试vmmap命令查看,发现bss段可读可写可执行。

gef➤  vmmap
Start      End        Offset     Perm Path
0x08048000 0x08049000 0x00000000 r-x /home/qts/奇幻世界/杂题/ret2shellcode/ret2shellcode
0x08049000 0x0804a000 0x00000000 r-x /home/qts/奇幻世界/杂题/ret2shellcode/ret2shellcode
0x0804a000 0x0804b000 0x00001000 rwx /home/qts/奇幻世界/杂题/ret2shellcode/ret2shellcode
0xf7dfd000 0xf7fae000 0x00000000 r-x /lib/i386-linux-gnu/libc-2.24.so
0xf7fae000 0xf7fb0000 0x001b0000 r-x /lib/i386-linux-gnu/libc-2.24.so
0xf7fb0000 0xf7fb1000 0x001b2000 rwx /lib/i386-linux-gnu/libc-2.24.so
我们可以将shellcode写入bss段,并控制程序跳转到shellcode处

exp如下:

##!/usr/bin/env python
from pwn import 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值