目录
环境搭建
bluecms下载地址:http://down.chinaz.com/download.asp?id=26181&dp=1&fid=19&f=yes
作者用的是5.4.x的php版本,mysql数据库环境为GBK
安装好环境先,数据库用户名密码,跟本地数据库一致
还是利用seay自动审计一下,总的来说误报率还挺高…
开始找洞洞
sql注入-1
/bluecms/ad_js.php
这里可以看到ad_id
参数带入到../include/mysql.class.php
的getone()
函数中,并将执行语句结果以html的注释格式输出显示
跟进到该getone()
函数,发现将$sql
语句执行
构造ad_id
参数
查看到其数据库名
后台sql注入-2
/bluecms/admin/article.php
新闻删除功能。该红框中,直接将GET请求中的id
参数带入到.../include/mysql.class.php
的getone()
函数中。
(而且可以看到下一行的sql语句则是对id参数做了取整过滤)
其存在时间盲注
盲注出了数据库名"bluecms"的第一位"b"的ascii码为98
sql注入-3
/bluecms/admin/nav.php
这里对navid
参数是直接GET请求获取并带入sql语句中执行
利用时间盲注验证了确实存在该漏洞
任意文件删除-1
/bluecms/user.php
如果face_pic3
参数中的文件存在,则删除该指定文件。往上跟进,face_pic1
要空才会执行face_pic3
的删除。且我在bluecms
主目录下新建一个1.txt
将该功能数据包中的face_pic1
置空
face_pic3
处指定1.txt
,可以看到原先bluecms
目录下新建的1.txt
被删除
任意文件删除-2
/bluecms/admin/database.php
对备份文件进行删除时,可目录遍历指定任意文件
前后台广告功能xss-1
先看后台
/bluecms/admin/ad.php
在新增与编辑广告功能处,看ad_name
,content
,exp_content
参数,都没有对参数做html实体编码的过滤,而是直接写进数据库并显示
elseif($act == 'do_add')
{
$ad_name = !empty($_POST['ad_name']) ? trim($_POST['ad_name']) : '';
$time_set = isset($_POST['time_set']) ? intval($_POST['ad_name']) : 0;
.
.
.
$content = "<a href=\"{$_POST['content']['link']}\" target=\"_blank\"><img src=\"{$_POST['content']['url']}\"$width $height border=\"0\" /></a>";
}
$exp_content = !empty($_POST['exp_content']) ? trim($_POST['exp_content']) : '';
$sql = "INSERT INTO ".table('ad')." (ad_id, ad_name, time_set, start_time, end_time, content, exp_content) VALUES ('', '$ad_name', '$time_set', '$start_time', '$end_time', '$content', '$exp_content')";
$db->query($sql);
showmsg('添加新广告成功', 'ad.php');
对以上三个参数构造恶意js语句:-->%0a<script>alert(1)</script>
后台广告编辑界面发生弹窗
再看前台
/bluecms/ad_js.php
ad_js.php
中的ad_content
就是对数据库中的exp_content
或content
字段内容进行前端的输出显示
-->%0a<script>alert(1)</script>
能恰好完成注释的闭合,构造恶意js语句发生弹窗
个人资料处xss-2
/bluecms/user.php
除sex
,address
的以外参数都未进行过滤
跟进到数据库表中看到字段类型及长度,红框内的字段长度和类型都满足xss语句的写入
对email
,msn
表框写入xss语句
触发xss弹窗
新闻处xss-3
/bluecms/user.php?act=do_add_news
跟踪content
参数的过滤函数filter_data
做了正则匹配的替换,很容易进行绕过,如利用<img/><svg/>
等标签或者<sCripT>
大小写绕过或者<scir<script>pt>
重写绕过
跟踪另一个参数descript
,仅对此参数做了mb_substr()
长度的限制,虽然写进数据库,但是前端并未对该字段进行显示输出。所以仅编辑该参数是不存在xss漏洞的
充值卡xss-4
/bluecms/admin/card.php
后台对充值卡进行添加编辑的时候,name
参数未进行任何过滤,直接写进了数据库表中
后台对充值卡名进行恶意构造,可触发xss漏洞
找不到文件上传漏洞之——分析一个文件上传处
例:个人资料的头像上传处
face_pic
参数是上传的文件,经过img_upload
函数
跟进到/bluecms/include/upload.class.php
的img_upload
函数,对文件类型content-type
进行了allow_image_type
的白名单过滤;进一步经过get_type
函数
跟进到/bluecms/include/upload.class.php
的get_type
函数,对.
最后一次出现的位置及之后字符串,进行文件后缀的白名单过滤
总的来说…还有挺多类似的漏洞的,就不一个个列举了
GOT IT!
******************************************************
具体利用方式需根据具体实践场景~