WINDOWS的SHELLCODE編寫高階技巧

2021-04-01 00:49:49 字數 1692 閱讀 3927

windows的shellcode編寫高階技巧

unix等系統因為有使用者概念,所以往往溢位是使用先得到普通帳號,然後登陸後用溢位

再載入乙個shell的辦法得到root許可權,其系統呼叫又方便,所以shellcode編寫一般都比

較簡單。但windows系統往往不提供登陸服務,所以溢位攻擊的shellcode往往要提供socket

連線,要引導程式得到shell等,而windows的系統呼叫int2e介面又不如unix系統呼叫int80

規範,所以一般都使用api,而api函式位址又因為系統版本的不同而不一樣,所以要編寫

windows下面比較實用、通用點的shellcode比較麻煩。

經過一段時間的思考,得到了windows下編寫shellcode的比教好的辦法。

點大致範圍就可以了。

2、shellcode定位。使用esp暫存器定位,只要前面那覆蓋的ret位址後面放乙個jmp

esp功能的指令位址就可以定位了。

3、ret指令位址、jmp esp功能指令位址採用**頁裡面的位址,54  c3,或者ff e4

、c3這個乙個語言的windows位址固定,也很好找這個位址。

4、shellcode直接使用c語言編寫,方便編寫、修改、除錯。

5、shellcode統一編碼,滿足應用條件對shellcode字元的限制,用一段小彙編**解

碼,這樣編寫shellcode就可以不用考慮特殊字元了。

6、通訊加密,對付防火牆,實現ftp功能,實現記憶體直接接管web服務等的高階應用。

下面主要介紹介紹編寫通用shellcode的辦法。主要shellcode裡面使用的api自己用

getprocaddress定位,要使用庫用loadlibrarya載入。那這樣shellcode就只依靠這兩個

api了。那這兩個api的位址又怎麼解決呢,loadlibrarya這個api在系統庫kernel32.dll裡

面,也可以使用getprocaddress得到。那關鍵就是要找到系統庫kernel32.dll和

getprocaddress的位址了。因為一般應用程式都會載入kernel32.dll,所以解決辦法就是在

記憶體裡面找到這個系統庫和api位址,所幸知道了windows的模組資料結構也就不難了,主要

是增加異常結構處理 。下面是vc6.0程式**:

void shellcodefn()

except[0]=0xffffffff;

except[1]=stradd-0x07;

/* 儲存異常結構鏈和修改異常結構鏈,shellcode接管異常 */

imgbase=0x77e00000;

/* 搜尋kernel32.dll 的起始其實位址 */

call getexceptretadd

}/* 得到異常後的返回位址 */

for(;imgbase<0xbffa0000,procgetadd==0;)}}

}}

// 搜尋kernel32。dll模組位址和api函式 getprocaddress位址

// 注意這兒處理了搜尋頁面不在情況。

_a**

/* 恢復異常結構鏈 */

if(procgetadd==0) goto  die ;

/* 如果沒找到getprocaddress位址死迴圈 */

die: goto die  ;

_a**

}

Windows7 過渡 Windows10 的修改

對於新手和不大熟悉系統的朋友,可以使用it之家的 軟媒魔方 設定windows10,大部分設定問題都可以解決 以下介紹的都是在win10中令人頭疼的修改處理方法 不同點 一 win e 個人經驗 在win10的改動中,對win e快捷鍵改為了快速訪問 個人作為使用頻度最高,更傾向於開啟我的電腦 不同...

Windows下的Apache Tomcat連線

win32 apache2.0.49.zip,在壓縮包中的modules可找到mod jk2.so 將mod jk2.so拷到以下兩個目錄 tomcat home conf apache home modules 將apache home conf 下的httpd.conf作以下修改和新增 修改 一...

windows的快取管理

1 什麼時候windows 會快取檔案資料 當檔案沒有使用file flag no buffering標誌並且不是做為對映檔案開啟的時候,windows會對檔案資料進行快取。自然那些直接訪問磁碟的方法是無法快取資料 2 快取的大小和位置 可以看出快取位於系統位址空間的兩個位置,c1000000 e0...