首页 > 安全 > 网络安全 >

存在已久的路径劫持技术分析

2016-04-01

今天,我所要给大家讲解的技术实际上已经存在已久了,但是据我所知,目前并没有多少文章对这一技术进行过非常详细和完整的讲解。当然了,如果没有Nick的提醒,我可能已经把这件事情完全地忘记了。谢谢Nick!路径

http://www.2cto.com/uploadfile/Collfiles/20160401/2016040109202484.jpg

今天,我所要给大家讲解的技术实际上已经存在已久了,但是据我所知,目前并没有多少文章对这一技术进行过非常详细和完整的讲解。当然了,如果没有Nick的提醒,我可能已经把这件事情完全地忘记了。谢谢Nick!

路径劫持(path interception)实际上可以算是一种漏洞,恶意软件以及渗透测试人员都可以利用这项技术来对目标设备进行渗透和入侵。这一漏洞的最常见形式如下:在Windows操作系统平台中,系统会等待例如“c:\program.exe”形式的路径地址,并根据这一地址来提供服务,否则其他的应用程序将会使用没有加引号的路径地址来启动和运行。如果没有使用引号来将路径地址括起来,那么系统会对给定的路径地址进行遍历,当给定的地址中存在空字符或者空格符的话,操作系统将会执行遍历路径下任何一个子字符串与给定路径匹配的应用程序。这一切听起来可能会有些复杂,没关系,等你阅读完这篇文章之后,你就会知道了。

换句话来说:

-“C:\program Files\foo bar\file.exe”

上面这一形式的路径地址与下面这条路径其实并不等价

-C:\program Files\foo bar\file.exe

在第一种形式的路径地址中,路径地址以非常标准的形式给出了,这样就避免了发生任何错误的可能性。操作系统只会根据这条路径地址来启动一个唯一的应用程序。

在第二种给定路径的情况下,操作系统首先会尝试运行下面这个应用程序:

-C:\program.exe

接下来,系统会运行下面这个应用程序:

-C:\program Files\foo.exe

最后才会运行我们最终需要运行的这个应用程序:

-C:\program Files\foo bar\file.exe

现在,操作系统已经不允许用户随意地编写这一类路径地址了,如果我们想要利用这个漏洞,那么我们就需要利用目标系统中所有已存在的自启动程序的路径地址,然后寻找一个没有被引号扩起来的路径地址和一个可写的目录,再寻找到这样的一种路径组合之后,我们就可以利用这个漏洞来对目标系统进行入侵了。

这实际上非常的简单,这项技术不仅可以帮助你获取到目标主机的永久访问权限,而且在某些情况下,还可以帮助你实现目标系统中的权限提升。

现在,还存在有针对这一漏洞的恶意DLL变种,攻击者需要在目标主机中添加一个新的启动项(或者利用现有的启动项),并且将这一启动项的路径地址指向一个“干净”的对象(例如,一个干净的rundll32.exe会加载一个系统中现存的,干净的DLL文件)。

接下来,我给大家提供一个例子。我们可以将类似下面的这些路径地址添加至系统的注册表中,然后运行:

-rundll32.exe c:\Program Files\Internet Explorer\ieproxy.dll

然后,向目标系统中注入:

-c:\Program.dll

或者是

-c:\Program Files\Internet.dll

实际上,rundll32.exe都可以帮我们完成文件的加载操作。

在此,我需要给大家一些忠告。rundll32.exe会对路径中第二个参数(所谓的第二个参数,指的是我们用空格符来对路径地址中的命令参数进行分隔,在我们的例子中,第二个参数即为‘Files\Internet.dll’)进行检查,检测其是否包含一个路径分隔符(”\”或者”/”)。如果包含,那么rundll32会将其视为一个包含错误的命令,然后自动退出。所以,上述的例子将会无法正常工作。

如果遇到了这样的情况,我们将有可能会需要使用一个root路径再配合多个空格符来绕过这一问题。在之前的系统中,名为‘C:\Document and Settings’的文件是能够正常使用的,但是在新的系统中却不能正常使用。对于新的操作系统而言,我们可以使用‘c:\Program Files (x86)’(其中,第一个参数为:‘c:\Program’,第二个参数为: ‘Files’)来代替。

如果你在注册表的HKCU\…\RUN中看到了下列的字符串地址:

-“C:\Windows\System32\rundll32.exe” c:\Program Files\Internet Explorer\ieproxy.dll

那么对于你来说,这条地址也许不会立刻引起你的怀疑。在一个真实的攻击场景中,攻击者将有可能使用更加具有欺骗性的路径地址来进行更加深入地的操作。比如说,攻击者可以使用一个指向显卡或者声卡的地址来进行操作。

如果在命令行中输入并执行上述命令,那么你将会看到下图所示的警告信息:

http://www.2cto.com/uploadfile/Collfiles/20160401/2016040109202585.png

这是因为rundll32.exe会尝试加载C:\program.dll。

http://www.2cto.com/uploadfile/Collfiles/20160401/2016040109202586.png

这一攻击技术已经存在了将近十年的时间了,但是现在一切将变得有所不同。

相关文章
最新文章
热点推荐