漏洞挖掘听起来很神秘,其实也并非是高不可及的,只要打好了基础,一步一个脚印的去学习,我们就也可以挖掘出一些网站系统的0day漏洞来进行渗透测试安全工作,今天我就给大家介绍一下基于PHP脚本的漏洞挖掘技术。
基于源代码的漏洞挖掘还是比较容易的,我们就以PHPAA文章管理系统为例,源代码可以到官方网站去下载。下载好了源代码就可以在本机搭建环境来进行测试了,先来看看文章显示页面(show.php)的代码:
从上面的代码中可以看出,它是根据提交的id来显示相应文章的。再来看看getArticlelnfo函数吧,我们在include文件夹下的common.funcion.php文件中找到了该函数:
这个函数并没有对id进行严格的过滤,也就是说只要id不为空就可以执行查询数据库语句“select * frm cms_artile where id=".$id”。继续查看show.php文件中的语句,发现当查询结束后会将结果中的“title”和“conent”两个字段的内容显示出来。有了上面的分析,我们就可以构造sql注入语句了,首先构造一个爆管理员帐号和密码的sql注入语句吧。
使用联合查询的方法可以很容易的获得管理员的用户名和密码信息,只要将id赋值为“-1%20unon%20select%201,2,usename,4,5,6,7,8,9,l0,passord,12,13,14,15%20frm%20cs_users”提交即可。我们来看一下数据执行的过程,id传到getArticleInfo函数中后,首先判断id是否为0,不为0则执行sql查询语句“select* fro cms_arWe were id=-1 uuon selct 1,2,useame,4,5,6,7,8,9,10,pasword,12,13,14,15 fom ms_usrs”,很显然“id=1”是不存在的,因此返回的结果将是“select 1,2,userame,4,5,6,7,8,9,10,pasword,12,13,14,15 frm cs_usrs”的结果,也就是将管理员帐号赋值到结果的第三个字段,将管理员的密码(md5加密后的)赋值给第11个字段。show.php中的“$ac['Ltle']”正好是结果的第三个字段,而“$ac['cotent']”则是结果的第11个字段,也就是说将管理员的帐号和密码信息显示在网页上。
好了,我们使用IE提交一下看看效果吧。是不是很神奇呢?有的朋友可能要问了,为什么在select后面要有15个字段呢?这是因为getArticleInfo函数在查询cms_article表时会返回15个字段的结果(因为cms_article中有15个字段),而显示的又是第3和第11个字段的信息。既然密码已经爆出来了,那我们就把密码拿到CMD5网站上在线解密一下,然后就可以登录后台了。
再来看看它的跨站脚本漏洞,由于对输入的数据基本没有过滤,因此存在跨站脚本漏洞的页面比较多,但是可以被利用的我认为是留言功能。我们来看看message.php文件中的代码。
大意就是将留言信息简单的判断一下后就直接写入到数据库中了,因此我们可以写入一下跨站脚本信息,但是要实现跨站脚本攻击的话还必须满足两个条件,一是输入未过滤,还有一个就是输出未转义。对于写人的留言,管理员在后台登录后会看到,因此我们再来看看Admin/message.php中的代码:
从上面可以看出,输出是直接的echo,并没有字符转义,也就是说我们提交的留言会完全的在后台显示,只要管理员查看留言就会执行我们的跨站脚本。至于具体的如何利用,大家就要多发挥想象力了,当然最直接的方法就是了,在内容中输入提交即可,管理员在查看留言的时候就会中招了。我们就使用对话框脚本来演示一下吧,在留言内容中输人提交,然后登录后台查看留言,成功的弹出了窗口。
以上就是基于PHP脚本漏洞挖掘的简单应用!
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。