代码审计⼊门之BlueCMSv1.6sp1
*本⽂原创作者:ZKAQ聂风,本⽂属于FreeBuf原创奖励计划,未经许可禁⽌转载
0×00 前⾔
⼤家好,我是聂风,在此,我做⼀个简单的代码审计⽂章分享来⽅便同学们学习。BlueCMS v1.6 sp1⼀直以来就是PHP代码审计⼊门的最佳良品。这次我们就选择这⼀个案例进⾏学习。我先声明,我的代码审计⽅法是针对代码基础较为薄弱较薄弱的⼈进⾏代码审计。
0×01 环境搭建
Phpstudy
用phpstudy搭建网站
BlueCMS v1.6 sp1源码
代码审计⼯具(Seay源代码审计系统)
0×02 代码审计过程
拿到⼀个CMS,有诸多审计⽅法,我这⾥的审计⽅法是⿊盒+⽩盒测试,偏⿊盒较多的代码审计。拿到
代码后我们应该先对其进⾏功能点的分析,看⼀看该CMS存在哪些功能,因为我们寻漏洞,肯定是从⽹站中的正常功能进⾏测试,这是⿊盒测试的⼀个⽅法,挖掘漏洞的核⼼我认为在于传参,知道每个传参的意义是不是就等于知道了代码会做什么,要做什么呢?
这是我总结的BlueCMS v1.6 sp1的功能点:
正常⽽⾔,我们先将CMS进⾏⼀个安装,正常⽽⾔CMS的源码放⼊web⽬录下后我们会访问install⽬录,然后进⾏安装。安装完后我们是不是应该以安全⼯程师的⾝份去想⼀想,我们是否能够再次访问install⽬录,进⾏重新安装呢?如
装。安装完后我们是不是应该以安全⼯程师的⾝份去想⼀想,我们是否能够再次访问install⽬录,进⾏重新安装呢?如果能够进⾏重新安装,是不是就可以将整个⽹站的数据全部重装,然后拿到设置新的管理员账号,然后通过后台拿到webshell?
然后我们去访问该页⾯,正常,可以重装:
于是我们审计出了代码的第⼀个问题,可以重复安装呢!是不是很简单?
然后我们再来看这个⽹站,⼀般⽽⾔⽹站有展⽰类和功能类:
展⽰类(⽐如新闻站、门户站)
功能类(⽐如商城、OA、系统)
但是⽆论是展⽰类还是功能如果我们可以拿到⼀个普通⽤户的权限是不是更加容易渗透测试?测试的点是不是更多?
那么我们去注册⼀个账户吧!
注册⼀个账号,我们想⼀想,是不是可以尝试进⾏⼀个XSS,我们先注册⼀个账号,然后抓包看看,然后我们输⼊了⽤户名后,我们发现burp抓了⼀个包:
很明显这个数据包是⽤来检测你的⽤户名是否有⼈注册过,那么我们是不是可以通过爆破user_name传参进⾏爆破出⽤户名。(爆破出⽤户名后爆破密码更容易)
然后填完所有内容,提交,然后抓到了数据包,我们发现是被提交到user.php:
然后我们通过代码审计⼯具去那个⽂件。
在传参中我们看到了我⾃⼰输⼊的“账号|密码|邮箱|验证码”,然后最后出现了⼀个act传参,打开这个user.php我们可以看出这个⽂件有好⼏个功能,act就是决定我的数据包是⼲什么的传参,于是乎复制这个传参值去源码中寻这个传参:
这段源码就是关于你的注册,我们可以看到INSERT INTO插⼊,然后我们看是否存在过滤,很明显这⾥没有过滤,那么我们尝试进⾏XSS以及SQL注⼊。
我们就先看XSS。
先抓包,正常的填写注册,然后将数据包拦截(这是为了防⽌前端检测)
修改数据包,加⼊XSS语句,我是在邮件的地⽅加的。
成功弹窗:
事实证明这⾥存在⼀个存储型XSS,然后我们再去看看SQL注⼊:
这很明显是他的SQL语句,然后我们尝试使⽤updatexml的报错。
构建下语句:
' or updatexml(1,concat(0x7e,(SELECT database)),1),1,1)#
然后执⾏,居然成功执⾏了。没有过滤?居然能成功执⾏,说明单引号没有起作⽤,是不是存在魔术引号?试试宽字节!
%df' or updatexml(1,concat(0x7e,(SELECT database)),1),1,1)#
然后成功报错:
很明显这⾥存在SQL注⼊,但是这⾥神奇的很,我这⾥报错说语法错误,我直接去本地执⾏却没问题!源码中对报错做了限制。只能通过盲注来解决,难受!
我们仔细思考,这⾥是⼀个插⼊语句,那么我们是不是可以尝试插⼊多⾏数据,我们通过语句构建,再建⽴⼀个⽤户,
我们仔细思考,这⾥是⼀个插⼊语句,那么我们是不是可以尝试插⼊多⾏数据,我们通过语句构建,再建⽴⼀个⽤户,然后⽤⼦查询填充邮箱处,然后我们登陆这个账号是不是就可以看到邮箱字段⾥⾯的内容,⾛,说⼲就⼲!!
构建语句:
%df',1,1),(100,0x6162717765,md5(123456),(select database),1,1)#
闭合原本的语句,然后再插⼊⼀条数据,然后执⾏,成功执⾏了!!
数据被插⼊了,⾛,登陆账号:
很明显,库名在邮箱处显⽰了,与似乎我们可以通过这样的⽅法利⽤这个点!!
我们结束了注册功能在看看登录功能,登录处会不会存在SQL注⼊?
⽼样⼦,登录,然后抓包看传参到那个⽂件:
还是那个⽂件,就是act变为了index_login:
登录还定义了函数,右键函数追踪⼀下:
还是⽼样⼦,没有任何过滤,那么试试万能密码吧:
payload:%df’) or 1=1#
万能密码成功登录。
万能密码就是存在POST类型的SQL注⼊,可以尝试使⽤SQLMAP。
我是跑数据包,在pwd字段。
然后登录后修改资料处也存在SQL注⼊和XSS。
然后我们看到了别⼈的⽂章,我们看到我们可以评论:
然后果断评论,我尝试了不登录也是可以评论,然后我们抓包看看吧!
去看看这个⽂件:
这⾥似乎有⼀个过滤。
Htmlspecialchars会将尖括号转化为HTML实体,那么不能出现尖括号。
然后呢这⾥我们来玩⼀个骚套路,我们看到传参⾥⾯有ip对吗?
留⾔记录IP这个是留⾔系统中经常存在的套路。那我们看到了他实际上插⼊了ip的值是特意拼接是,是由这个⾃定义函数设定getip。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。