对某PHP手机网站的渗透
今天安全检测的目标是一个手机网站,网站界面清新,内容全面,好像已经做了很久,一直没出什么问题,安全性应该是不错的,有了艰巨任务,小伙子们自然情绪高涨。
打开网站,是一个网上商城,当然首先是环境探测,也就是我们通常所说的踩点了,极可能详细的了解网站的相关信息。
随便点一些连接,看到程序是用PHP写的,无疑问应该是MYSQL数据库,从界面上看应该是一套整站系统(现在自己开发程序成本太大了),在网址后面加上admin(通常手段猜测),出现了后台管理界面(如图1),出现这个,不是非常安全就是非常不安全。


原来如此,是ECSHOP系统,也及是DISCUZ开发的一个网店系统,还算有点收获。
回到前台页面,看看有没有注入漏洞,因为比较关心这个,好利用危害还比较大,在带有参数的页面上加了一个 “’”来检测下,出现如下提示。(如图3)

是MYSQL的数据库,这里告诉大家,不要武断的认为只要是PHP就一定是MYSQL数据库,他们只不过是常见搭配而已,应该小心求证。
有的朋友看到这里,可能会说,有了注入点入侵还不容易啊,其实不然,我开始也认为应该是不会太困难,可往下走的时候才发现,有很多问题要一一的去解决。
到目前位置,所得到的基本信息是
开发语言:PHP
数据库环境:MYSQL
网站后台:ADMIN
存在注入点:ad.php?adid=22
整站系统:ECSHOP(这里如果能找到详细版本尽量要详细的版本)
(n0不过这里在下了ECSHOP系统,本地搭建之后,发现本地和网站程序有所差别,网站应该是一套整合过了的程序。没关系,既然他漏了马脚,我们就继续跟踪。
一般大家都会选择不同的工具去进行检测,因为方便,我也不例外,打开PHP注入漏洞检测工具,不太有效,最近新出个工具pangolin挺火的,自己感受了下也确实不错,尤其是他的命令行功能强。(如图4)

还算不错检测出来数据库的名称Current database is : shouji,看了下本地搭建的站点知道他的管理员的表名叫做ecs_admin_user,列名分别为user_name、password。(如图5)

把相应的名称添加到pangolin上猜解,管理员的用户名以及密码都已经猜解出来了,不过速度太慢了,拿到MD5的加密值,破解不了,也有好多朋友问过我,破不了MD5,我们怎么办,那我的回答就只能是另辟新境了,应为MD5加密是单向的,是没有办法进行解密的,我们通常上的MD5解密网站也要通过一个一个比对,才能找出他的对应明文。
既然进不了后台,走其他的路吧,说实话,这个时候就有点不太想用工具了,因为工具毕竟非常局限,只有那么一点功能,太束缚我们的发挥,于是号召了下,“兄弟们,把工具都撇了,耽误事情。”于是所有人开始手工进行网站入侵(当然这个就要经验了)。
因为对PHP的研究确实不是很深,所以决定恶补PHP的脚本入侵技术,足足看了5个小时的文章,在电脑前面迷迷糊糊的就见到了第二天的太阳。
昨天看的文章确实对自己启发不少,PHP注入比较常用的有个UNION查询,
语句如下:
and 1=2 union select 13,12,11,10,9,8,7,6,5,4,3,2,1
那么在注入点后面输入and 1=2 union select 1,返回错误页面(如图6)。

一直到and 1=2 union select 13,12,11,10,9,8,7,6,5,4,3,2,1。此时返回页面正常(如图7),说明,此页面一共查询了13个字段,分别在文章题目位置和内容位置返回11,10,那么也就是说明,如果我把11和10换成我想要查询的内容就可以了。

我们将语句改成and 1=2 union select 13,12, DATABASE(), user(),9,8,7,6,5,4,3,2,1。页面返回如图8,看到了页面返回的便是当前数据库名称shouji,以及当前数据库连接用户root.

到这里大家是不是会有一些喜悦,root拥有数据库控制的最高权限,也就是说我们能够成功的希望很大,当然你也可以查看MYSQL的版本等等。
虽然知道了用户名但是没有密码是没有用的,如何得到密码那,这又是一个难题。不过不知道大家想没想到load_file这个函数,顾名思义,当然就是装载文件了,这样思路就清晰了,如果我们可以装载他数据库的连接文件,那么就自然会胜利冲破难关。
不过要想装载他的连接文件就必须知道绝对路径,为什么?因为相对路径不能用,呵呵。在网站上不停的游走,不停侧单引号,最后还真的被我找到了他的绝对路径(如图9)。

相对路径找到了,那么数据库连接文件又是什么那,记得我们开始下了一套ECSHOP的系统了吧,对到那里去找,OK,路径为DATACONFIG.PHP, 好的现在我们加载他的连接文件,在注入点后面加上
and 1=2 union select 13,12,11,load_file(‘E:new_sitedataconfig.inc.php’),9,8,7,6,5,4,3,2,1
以为就这样大功告成,可谁知道人算不如天算,挂了(如图10)

开始以为是路径错了,可仔细检查一下,并每有出现错误啊,难道是权限为题,应该也不会,我是ROOT啊,到底是哪了不对那,仔细看了下才发现,每个单引号前面都多了个“”怎么成了转义字符了,没关系,出现问题我们就解决问题。他将单引号顾虑成“’”,你过滤他,那我不用他不就完了,据我所致,想换掉单引号应该有两种方法,一种是用CHAR()、另一种就是转换成16进制,于是开始构造提交字符。
我们用ASCII转换器进行下转换(如图11)

那么构造后的结果就是:
以下是引用片段:
and 1=2 union select13,12,11,load_file
(char(69,58,92,110,101,119,95,115,105,116,101,92,100,97,116,97,92,99,111,110,102,105,103,46,112,104,112)
),9,8,7,6,5,4,3,2,1
返回结果没有报错,证明文件应该已经装载成功,可是怎么没有显示出来那(如图12),

难道是哪有错误?想了半天,原来如此,他装载文件的时候是将整个文件完全装载,那么我看到的也就是执行过的PHP的代码,这里我们用右键,查看源文件一下就清楚了(如图13)

(图片信息为假)
这样我们就得到了他的完整信息,包括数据库的地址、帐户、密码,虽然现在差不多已经成功一半了,可是还有个问题就是ROOT帐户虽然也是超级管理员权限,可是他不能像SQL一样直接执行命令,如果我们像进一步渗透服务器就必须用到MYSQL的提权工具(如图14),来进行权限的提升。

可是如何将文件上传上去就又成了问题,用MYSQL QUERY连接上数据库,添加了个管理员帐户,进入到网站后台,可进去后发现,如果不研究源代码是很难找到入口得到webshell的。想了想,既然SQL的数据库可以叉一句话安全然后到处成文件,那么MYSQL是不是也可以那,如果可以,我们只需要在数据库里新建个表,然后在字段里插入PHP一句话,在导出成PHP文件不就可以了吗。这样在根目录下就会有一个文件,也就是我们所说的一句话安全,那么我们只需要用控制端去连接他就可以了,连接成功(如图15)

不过如果在导出之后,发现导出文件是报错的或不能使用。
有了,提权也就不是什么困难的事情了,MYSQL提权,我朋友小飞做的教程非常不错,大家可以到网上去搜一下MYSQL提权,很多。加完管理员后,上传工具开了终端,登陆上去(如图16)。

至此,入侵检测就告一段落了,应该是拿到了服务器的最高权限。
其实,我是一个完全不懂PHP的人,只是在做入侵检测之前,学习了一下。其实,这次入侵检测完成以后,给我最大的一个感受就是,中国的网络安全技术为什么同国外差距这么大,就是因为惰性的原因,其实入侵检测并不难,网上的知识足够我们学的,真的希中国的网络安全技术能够真正的强大起来,而不只是梦想而已。
- 最新评论
