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...