
北京公司注册_代记账服务_财务SaaS服务_智能记账
近期评论
分类
-
商务合作
- 邮箱:aifinacn@qq.com
- 手机:13871128117
- 座机:(+86)
- Q Q:32556627点击交谈
- 地址:
政务处理
0×00 前言
大家好,我是掌控安全学院的聂风,在此,我做一个代码审计的文章分享来方便同学们学习。我逛了逛CNVD,发现有一个叫做凡诺企业网站管理系统的后台SQL注入,5月30日发布,到7月中旬已经20多万的点击量,位列CNVD点击量的第三名,这次代码审计决定通读全文来审计该CMS.
0×01 环境搭建
Phpstudy
fannuo_php_3.0免费版源码(http://www.pcfinal.cn/channel/ecms.html)
代码审计工具(Seay源代码审计系统)
0×02 代码审计过程
源码放入网站根目录,然后去访问Web地址,然后自动跳转到了安装界面,来分析分析源码。
第一开始访问到的是install/index.php文件,这个文件包含了函数库
include(‘../system/library.php’);
然后开始细细读取代码,发现我们填入的数据会直接写入/system/data.php
于是乎突发奇想,想试试能不能直接插入一句话木马,结果CMS的开发也考虑到了这个问题,
如果连接失败的的时候,写入的东西都在注释中,于是乎就想跳出注释,尝试了好多方法都没解决,然后就放弃这里了,安装这个文件颇为简单,就是将正确的数据库连接什么的写入data.php,然后将默认数据导入数据库,且将index.php重命名为index.lock。
默认账号密码:admin admin
安装完毕后,我们打开根目录index.php这个文件
包含 inc.php和 safe.php
这里有个自定义函数ism 查看了一下,实际上是返回一个false,那么这里就是包含了$dir.$t_path.index.php
我们去看看inc.php里面有什么吧
Inc.php作用:
$dir = __FILE__
包含system目录下的四个文件
conn.php、library.php、config.php、function.php
conn.php作用:
设置了时区、编码,开启了session,缓冲激活(ob_start),然后文件包含了data.php,就是数据库的连接配置文件。然后选择了数据库,指定了数据库格式是utf-8.
Config作用:
从数据库中的cms_system表中取id=1得数据,然后赋值给各种变量,然后执行数据库查询语句,会将cms_system中得到的s_template、
s_mtemplate 两个字段值 一个是1 还有一个是m1 ,然后将这两个数值作为t_path字段的条件去查询cms_template。好吧,里面只是一些图片而已,是Logo。 1代表电脑模板1 ,m1代表手机模板2,然后又定义了各种各样函数(这个地方记录一下,如果cms_system表中的s_template、s_mtemplate字段可以控制的话,那就有可能存在一个二次注入)
里面还定义了 $t_mpath =/template/m1/
Library.php和Function.php定义各种各样的函数(遇到函数跳过去就行,到时候用到来查)
那么我们现在知道了
$t_mpath =/template/m1/
$t_path =/template/1
$dir = __FILE__
$dir.$t_path.index.php => __FILE__/template/1/index.php
我们再看看safe.php这个文件
一打开就是三个正则,是对GET|POST|Cookie传参的过滤,感觉是过滤SQL注入和XSS的
$getfilter=\”\’|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)\”;
$postfilter=\”\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)\”;
$cookiefilter=\”\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)\”;
先不分析,先看完这个文件吧(这个是360的通用防护)
定义了一个函数,StopAttack ,当正则匹配到了就输出非法操作,然后匹配不分大小写,任意匹配不匹配换行(n),然后怎么匹配就看上面的正则了。
这个安全机制我觉得可以绕过,因为不仅仅是存在GET POST COOKIE 传参,还有一些IP agent-User之类的也可能会去获取,那么这里获取这些岂不是就可以绕过安全限制了(ip我看了,他居然有检测,Ip不用想了,用了 ip2long,如果返回False就设定ip为0.0.0.0)
我们来查看$dir.$t_path.index.php => __FILE__/template/1/index.php (这个页面HTML和PHP混合页面)
然后看到了第10行的<?php include($dir.$t_path.’inc_head.php’);?> 包含了inc_head.php文件
Inc_head.php里面实际上是一些Js和css脚本地址的定义,是由$s_path来控制的,如果我们控制的了这个,那么可以尝试打一个XSS 。
然后又是一个文件包含
include($dir.$t_path.\’inc_header.php\’)
于是乎查看下inc_header.php这个文件(就是个页面顶部构成,就是查询cms_channel表里面的数据,然后输出,数据就是模块标题什么的)
然后后面第53行那个语句也差不多,只是换了一个表cms_slideshow
然后81行我看到了第一个表单,GET请求search.php
看到下面还去查询了cms_detail的数据然后输出
还有cms_link也有输出
看到318行又是喜闻乐见的文件包含
<?php include($dir.$t_path.\’inc_footer.php\’);?>
Inc_footer.php文件里面也没啥有营养的东西,留了一个网站的导航,咦~第19行居然调用了第一个函数get_chip(1) 有点小兴奋,我们去看看她是干什么的,赶紧的找一找,在Config.php文件的第110行被定义。
他去查询cms_chip表里面的数据,然后输出c_content字段的值
后面就没什么东西了,我们算是看完了这整个index.php文件,然后我们收获了什么,遇到的东西都记录下?
$s_path 决定的href的链接方向(Js css ),可控制就代表构建XSS
有输出的表(如果能改里面数据就可能有XSS):
cms_slideshow
cms_channel
cms_detail
cms_link
get_chip 函数我能控制值就能尝试SQL注入(拿好小本本记录下)
然后我们去看这文件吧
search.php (注:我们这里是index包含文件中西得search.php的表单地址,那么相对路径是index.php的同级目录,我这里差点没注意,因为index.php包含的文章中有template文件夹下面1的index.php,那个文件夹内也有search.php)
这个文件还是老一套的包含inc.php和system/safe.php
然后GET接受Key的传参,然后赋值给$key 然后调用template/1/search.php。
然后文件执行SQL语句
$sql = \’select id,d_name,d_picture,d_scontent,d_date from cms_detail where d_name like \”%\’.$key.\’%\” order by d_order desc , id desc\’;
我尝试构建了语句发现(我现在是先删除了Safe.php文件的)
select id,d_name,d_picture,d_scontent,d_date from cms_detail where d_name like \”%1%\”\”order by d_order desc
北京公司注册_代记账服务_财务SaaS服务_智能记账