---
# System prepended metadata

title: 代码审计

---

代码审计
===

由于需要开始试了试php的审计，确实能审出一些小问题。但是想深入搞一搞一定要有开发功底，最基本的架构和框架要懂。

xdebug+chrome+phpstorm用起来是最顺手的

bootcms出现了一个原始报错，2018年10月22日

zzzms的后台getshell，2018年11月4日

5ucms的代码注入，wdlcms没什么用的代码注入，2019年2月11日

有成果再来更新

----------------------2018年11月4日-------------------

更新一个zzzcms的两个漏洞复现

sql注入

注入点：

原因是因为get参数被拼接到了sql语句中，跟踪一下变量，看参数是怎么被插入的

程序入口文件中的这两行是关键，打上断点，跟进函数

getlocation函数中获得了路径及参数，query变量的值如图所示

跟进checklocation函数，p和q是从query取出来的about和22，即为get参数

在checklocation中，globals中添加了一对键值对sid=>22

此时location变量值为about，即为网站中的一个栏目

接着跟进ParseGlobal函数

其中G函数是用来获取globals中的值

跟进，发现值22在db_cond_to_sqladd中直接被拼接，之后被执行

后台管理万能密码

原因在login.php第19行

其实是有做过滤的，跟进getform

过滤函数是txt_html，继续跟进


找到原因：并没有过滤单引号，

--------------------------2019年2月11日-------------------------------------

更新：5ucms的代码注入，wdlcms没什么用的代码注入

wdlcms代码注入

网站后台的管理应该与服务器管理相隔离，但此cms可将网站后台修改的内容直接添加到php源码中而非.sql或.cache文件中，导致了代码注入从而可以getshell。

修改后台网站配置信息：

这里修改手机版域名这个键值，burpsuite抓包修改请求，令该值等于test%0a%0aphpinfo();/*

%0a可可以直接在代码中生成换行符，/*将之后内容注释掉

注入后的代码：

访问url  /Runtime/Temp/95a1fe934b68ebfee8468bf0bc4f0000.php

代码执行成功，表示此处可以任意插入代码。需要知道随机的临时文件名字才能执行，没什么利用价值。

5ucms的代码注入

网站后台的管理应该与服务器管理相隔离，但此cms可将网站后台修改的内容直接添加到php源码中而非数据库或缓存文件中，导致了代码注入从而可以获得服务器权限。




后台系统配置栏的信息全部存储在php源码中：/Apps/Common/Conf/setting.php

跟踪setting.php的更新过程：

/Apps/Common/Conf/function.php中的refreshdata函数没有做任何过滤操作，导致了代码注入。




2、漏洞利用

登录后台管理账户后，在系统配置栏最后一项进行如下修改：
在setting.php中添加数组元素值，同时闭合数组，注释掉之后的代码。因为源码对输入内容没有做任何过滤，只有部分字符进行了html实体编码，可以使用单引号、括号等符号对代码进行闭合、写注释等操作。

访问/Apps/Common/Conf/setting.php拿到webshell。

------------------------------------------------------------------------------------