领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

详解某cms代码审计过程 详解某cms代码审计过程怎么写

nixiaole 2024-11-11 15:25:16 知识剖析 18 ℃

0x0:前言

随着通用型漏洞证书颁发的要求越来越高,整理了一篇关于通用型证书php框架漏洞的白盒审计思路。

0×1:重组漏洞

漏洞位置:/install/index.php

配置安装成功后,访问/install目录,如下图所示,若显示重新安装,请删除/install/install.lock。

全局搜索/install/install.lock,

并在/install/step_1.php中找到:

分析index.php代码可知,这里通过变量step的值来执行不同的操作语句,当step的值为1时包含step_1.php,此时会检查是否存在install.lock文件,所以要想办法跳过这一步。

继续向上查找变量step的值,发现通过post传值来给step,不传值默认为1,所以直接post一个step的值为2,即可跳过install.lock检查,实现重装。

验证:

0×2:SQL注入

漏洞位置:

/admin/ask.php

/inc/stopsqlin.php

这里发现只验证传入的cookie值不为空,就会拼接在sql语句中执行。

继续向上查找如何到达该漏洞位置,发现需要进入到add()方法中。

继续查找哪里调用了add()方法,在ask.php的第55行,执行三元运算符来判断是否以GET方式传了一个do参数,并且值为add时,会调用add()方法。

由于该cms将传入的cookie变量带入到了/inc/stopsqlin.php文件的stopsqlin的方法中进行了过滤,所以我们要考虑绕过该方法。

在stopsqlin.php的55行做了一个if判断,用strpos函数匹配$r_url中是否存在siteconfig.php关键字,如果存在的话返回值为具体位数,若返回值等于0的话会进入该方法,因此我们可以在url中传入一个参数值为siteconfig.php就不会进入到stopsqlin方法中,即绕过。

验证:

0×3:存储型XSS

漏洞位置:/inc/function.php

在函数stripfxg中,存在使用方法htmlspecialchars_decode()对htmlspecialchars()方法。

过滤后的参数进行解码,导致可能存在XSS漏洞。

由stripfxg函数可知:

当此函数被调用且参数$htmlspecialchars_decode为true时,htmlspecialchars_decod()方法会被调用。

全局查找函数stripfxg被调用的地方:发现在/zt/show.php。

发现赋值给变量$gsjj,这个时候考虑搜索有没有类似于echo $jsjj打印的语句 。

搜索发现没有,但是发现通过str_replace函数将变量$strout中的{#gsjj}替换成$gsjj并打印出来:

查找stripfxg函数中参数$content的来源,发现在包含的文件top.php中,继续查找变量$row[“content”]的来源发现找不到。

通过分析代码发现content是zz_cmsuser表中的一个字段,在数据库中执行sql语句确实存在content字段。

这个时候考虑如何修改zzcms_user这个表来修改content这个字段,全局搜索update zzcms_user发现在/user/manage.php中找到修改content字段的sql语句。

继续向上分析,当存在参数变量$action且值为modify时执行sql语句修改contnet,即用户可以在信息修改时控制content参数来插入XSS。

验证:

注册一个用户,在用户个人中心点击修改注册信息并抓包:

在数据包中添加参数content=<img/src=1 onerror=alert(1)>。

此时访问/zt/show.php?id=1即可触发XSS。

0×4:总结

php框架的大厂漏洞越来越难审计了,JAVA代码审计能力在实战中越来越重要。非常喜欢圈内的一句话:代码能力决定了你的上限。

最近发表
标签列表