BlueCms代码审计 – 作者:星云博创科技有限公司

0×00:前言

对BlueCmsv1.6进行代码审计。虽然平时打ctf较多,但决定自己上限的总归是代码的能力,所以才有了下面这篇文章。审计处漏洞如下:

sql注入漏洞

XSS漏洞

文件包含/上传

代码执行漏洞

0×01:全局配置分析

1. 关键字GET,POST,看过滤情况

2. 看都包含了哪些配置文件

v2-9e44ba18ccefc0dadc7a5f6498df08de_720w.pngv2-21be6e32071a349d493d69eddbb66ca5_720w.png直接转义,所以可以用单引号或者引号闭合的sql注入直接不考虑

$_SERVER被遗漏,所以可以从这方面下手v2-a673626fd468f39c363619d41842cc3b_720w.png

0×02:审计过程

SQL注入第一处:

路径:/bluecms_1.6/uploads/comment.php

配置文件中没针对$_SERVER进行过滤,直接去找关于处理ip的方法v2-c1d070ccd92b2557e8c64111154afc6c_720w.png

找一下在哪有调用

v2-42b3dbfa536b93470146d4ef8aa79923_720w.png

成功延时

v2-f4edb5ce5217324b49fb3afa2e8c0c21_720w.png

1' and sleep(10) and '1' = '1

第二处:

路径:/uploads/ad_js.php

v2-5af1e8777602975dc536a5a225905b56_720w.png未对输入内容过滤,可通过联合查询直接注入

v2-e98d2cf1b6446cce514f73d280e912b8_720w.png

XSS

第一处:

路径:bluecms_1.6/uploads/user.phpv2-914f3e0908bea65ceead17d53b71ccdc_720w.png测试了一下,只有邮件地址可以xss

<script>alert('XSS')</script>

配置文件中可以看到并未对xss进行过滤v2-aa796a72d198a44926fc9d935b37d6ab_720w.png第二处:路径:uploads/admin/ad.php

v2-76aec3cd8b62fe9ab177c4a60b8aec41_720w.pngv2-6ba22aba1c2ec2934c5ca0ffdbe73ad4_720w.png
很多位置都有xss,不一一例举了

文件包含

路径:uploads/user.php

v2-bd8c6050c95a52b408e85a39ad211ddf_720w.png这个漏洞需要php版本开到5.3.4以下,高版本已经修复了截断漏洞

pay=/../../robots.txt........................................................... ................................................................................ ................................................................................ ................................................................................ ................................................................................ ......
pay=/../../robots.txt%00

注意这里,这个用的是include,所以我们写图片马也能直接引入进来执行,配合文件上传可以getshell

v2-15530e066bdaa6bdb7a7437e59a2f75b_720w.png

文件上传

路径:/bluecms_1.6/uploads/user.php
v2-73cee4181e24f20c26b3c1fe5f553088_720w.png黑盒一手,发现未对内容过滤,这样可以配合phar打组合拳,去看一下上传方面的过滤

v2-c652d21364ef8c6bff80b213c4368911_720w.pngv2-b36812665b8a1aa84969011daac4f6a0_720w.png直接一手白名单,那没事了….现在只考虑有没有地方能触发phar,下面贴一手支持的图

v2-7bcd8b1d1e0db4ca902a889ae8e203b2_720w.pngemmm,找了一下,大多数路径都在前面拼接了BLUE_ROOT,没办法让其执行phar://这种形式emmmmm找都找了…自己测一下玩玩了,加入如下代码测试

v2-6850243be13078c7bcfc6e89ad39e19e_720w.png

构造poc如下

<?phpclass A{}$file = new A();$phar = new Phar('phar.phar');$phar->startBuffering();$phar->addFromString('test.txt','text');$phar->setStub('<script language="php">__HALT_COMPILER();</script>'); $phar->setMetadata($file);$phar->stopBuffering();

执行成功触发phar后触发phpinfo页面

v2-5fed048adfa99e943d19bc8c4ddbfdea_720w.png

任意文件删除

第一处:路径:bluecms_1.6/uploads/user.php

v2-e06a1eb78124c20a6047bd3bc4c46057_720w.pngv2-c66df55be053029f56504104def59f76_720w.pngsql语句会报错,利用条件比较苛刻(咱也不知道怎么整,反正就是菜),但是如果能利用就可以直接来一 手任意文件删除或者phar反序列化

第二处:路径:bluecms_1.6/uploads/publish.php

v2-696ff24956d45d479c4141cbc9d9dc0c_720w.png成功删除

代码执行

第一处路径:/bluecms_1.6/uploads/include/smarty/Smarty.class.php

v2-3fc590a3b481a9aecd5c41a6934b2994_720w.png反向跟进_eval方法

v2-d32ae17e1f1d2a00188248bb5e369273_720w.png跟进smarty_core_process_cached_inserts方法

v2-3545ad41e3a73f9f424aa653d7b708bd_720w.png跟一下smarty_core_read_cache_file看看怎么处理,我们需要他返回True

v2-b2415390cdbbc9c5f2488aa1b7bce0c9_720w.png这个不能为空

v2-8a12a88efe77888fd0c4767030a3c8cc_720w.png分别跟进 _get_auto_id、_get_auto_filename、_read_file函数

v2-73180d6c96824bba6a3bc21ed63985d4_720w.png

0×03:总结

不得不说,如果代码能力弱,安全行业想走的更远会很难,因为ctf、hvv都需要有深厚的代码审计能力。go语言的代码审计也在慢慢兴起,路漫漫其修远兮吾将上下而求索。

来源:freebuf.com 2021-05-19 15:09:56 by: 星云博创科技有限公司

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论