Bluecms代码审计
参考:来自学长的一篇文章
这我看完风哥的审计过程,然后我自己审计的文章。
环境搭建
phpstudy
BlueCMSv1.6sp源码
代码审计工具
总结功能点
BlueCMS本次代码审计实战靶场
拿到这样一个CMS我们首先应该对这个站的正常功能进行测试,看一看存在哪些功能,这里的测试方法是黑盒加白盒,以风哥的观点,挖掘漏洞的核心在于传参,知道了每个传参的意思就等于知道了代码会做什么,要做什么?
以下是风哥总结的这个站的功能点
利用黑白盒交叉审计,我们可以更好的找出漏洞,然后罗列出功能点,再根据功能点去尝试进行测试
大概流程如下:
总结功能点{
黑盒测试功能点{
黑盒测试不出来的地方白盒审计
对测试结果进行白盒审计
}
}
Seay源码审计系统
常见功能简介:
1、代码自动高亮
2、可以自动审计(误报有点高)
3、可以快速全局搜索
4、可以定位函数
5、可以监控Mysql(插件)
接下来就是对这个网站的漏洞挖掘过程。
网站重新安装漏洞
这里我们可以重新访问uploads下面的install目录就可以重新安装
然后我们再来看这个网站,一般而言网站有展示类和功能类。
展示类(比如新闻站、门户站)
功能类(比如商城、OA、系统)
XSS
我们首先注册账户,这里抓个包,看看
可以看到post传参到user.php,变量act的传参do_reg
接下来我们使用seay源码审计
这里的功能就是检查一下注册传参的这些参数,是否为空和去空格
然后注意到下面这段代码
把注册的这些参数insert into插入数据库执行,而且发现好像也没有过滤,于是乎这里我们就可以进行XSS和Sql注入了。首先我们弹一个弹窗试试看
在带入的参数中插入
<script>alert('XSS')</script>
成功弹窗,并且是存储型XSS
sql注入
存在注入点的地方
$sql = "INSERT INTO ".table('user')." (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', '$user_name', md5('$pwd'), '$email', '$timestamp', '$timestamp')";
注册抓包
发现这里竟然没有报错,成功注册,说明我们的单引号并没有造成语句闭合报错应该是被转义了,php配置开启了魔术引号。这时候我们可以回想一下之前的宽字节注入。在引号前面添加%df把引号吃掉
成功报错,说明存在注入
然后我们在看这条payload
%df' or updatexml(1,concat(0x7e,(SELECT database())),1),1,1)#
把他插入语句中,应该是会直接查询数据库
居然没有成功执行查询语句
报错代码如下:
INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', 'xss123', md5('xss123'), 'xss123@qq.com%df\' or updatexml(1,concat(0x7e,(SELECT database())),1),1,1)#', '1558864503', '1558864503')
而放入数据库编辑器却能查询出数据库
然后我们换思路,insert into 能插入多条语句
$sql = "INSERT INTO ".table('user')." (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', '$user_name', md5('$pwd'), '$email', '$timestamp', '$timestamp')";
而在这些插入的数据中,能够被我们控制的,并且能够回显得只有eamil这个点。那我们就可以通过在email中添加子查询,查询出我们想要的东西,比如管理员的密码。
插入如下语句:
INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', 'qwe123', md5('qwe123'), 'qwe123%40qq.com%df',1,1),(100,'mochu',md5(123456),(select pwd from blue_admin where admin_id=1),1,1)#
但是这里报错了,是魔术引号导致的,这里还是使用宽字节中的办法,转换为16进制,将’mochu’=>0x276d6f63687527
成功注册,接下来登入账号
成功拿到管理员密码,不过这里管理员的表和字段都是数据库的,不过这些盲注也可以知道。
登入框存在万能密码
登入抓包,找到传参地点
elseif($act == 'index_login'){$user_name = !empty($_REQUEST['user_name']) ? trim($_REQUEST['user_name']) : '';$pwd = !empty($_REQUEST['pwd']) ? trim($_REQUEST['pwd']) : '';$remember = isset($_REQUEST['remember']) ? intval($_REQUEST['remember']) : 0;if($user_name == ''){showmsg('�û�������Ϊ��');}if($pwd == ''){showmsg('���벻��Ϊ��');}$row = $db->getone("SELECT COUNT(*) AS num FROM ".table('admin')." WHERE admin_name='$user_name'");if($row['num'] == 1){showmsg('ϵͳ�û��鲻�ܴ�ǰ̨��¼');}$w = login($user_name, $pwd);
可以看到这里还是没有做任何的过滤在登入框内,所以这里估计还是存在POST注入,所以试试万能密码。
这里的万能密码payload:
%df’) or 1=1#
成功登入。
X-Forwarded-For注入
这里登入一个普通用户,发布两篇文章。
这里既然有评论,那就可能有XSS抓包评论
这里面有一些函数
intval()
intval() 函数用于获取变量的整数值。
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
**htmlspecialchars() **
把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体
**nl2br() **
nl2br() 函数在字符串中的每个新行(\n)之前插入 HTML 换行符(
或
)。
这些函数看下来,XSS没戏了。
这里把目光转入ip这个点
定位追踪到getip()
这里有一个getenv,实际上就是获取系统的环境变量
第一个HTTP_CLIENT_IP这个环境变量没有成标准,很多服务器完全没法获取
第二个X-Forwarded-For 这个东西可以通过HTTP请求头来修改。
可以控制请求头中的X-Forwarded-For控制ip的传参,ip的传参会直接被拼凑到SQL语句。
设置X-Forwarded-For为1’#后直接报错了。可以注入
sqlmap直接跑出来
数据库备份文件爆破
登入管理员后台,备份数据库
然后我们去服务器上找一下这个文件
我们先直接访问这个文件,因为没有做拦截,可以直接访问
成功访问,然后我们也发现这个文件里有许多敏感信息
而这里唯一不知道的就是路径和数据库文件名,路径很好爆破,文件名又是时间命名的,所以直接爆破可得路径和文件名。
文件包含
在user.php中找到了一个我们可以控制的include
当$act=pay才会触发这个文件包含
找找pay
在这里找到了pay,找到了包含的地方
接下来找上传图片马的点
并且上传了我的图片马
接下来就是去包含
回到pay的传参点
include 'include/payment/'.$_POST['pay']."/index.php";
由此可得路径为:
../../ + 图片马路径 => ../../data/upload/face_pic/15588905480.jpg
然而还有最后一步需要解决,就是传参点后面的index.php,不然肯定会受影响。
直接加进去,并不能包含成功,需要将后面给截掉。
这里%00和00截断都试过了,php低版本才会存在这样的截断,而这里没有。
这里就有一个骚想法:
文件路径长度限制
百度可知:
在Windows API中,路径的最大长度为MAX_PATH,MAX_PATH被定义为260。
最长260个字符
而这里又想到文件上传的想法,在后面加点,加260个点,window是从后面开始截
这样既可得到shell
Bluecms代码审计相关推荐
- 代码审计文章资源汇总
0x00 前言 如饥似渴的学习. 0x01 文章 1.代码审计思路 https://blog.csdn.net/qq_36869808/article/details/83027850 2.SQL审计 ...
- ATTCK靶场系列(六)
一.环境配置 vlunstack是红日安全团队出品的一个实战环境,具体介绍请访问:http://vulnstack.qiyuanxuetang.net/vuln/detail/8/ emmm,我得吐槽 ...
- 代码审计之rips之bluecms审计
rips是一款代码审计工具,下载下来并放在网站跟目录就可以了,然后直接通过浏览器访问,很简单,傻瓜式的使用. 代码审计:https://nchc.dl.sourceforge.net/project/ ...
- BlueCms v1.6 本地文件包含漏洞代码审计
目录 BlueCms POC构造 漏洞利用 BlueCms BlueCMS是一款专注于地方门户网站建设解决方案,基于PHP+MySQL的技术开发,全部源码开放. 复现版本为bluecmsv1.6版本, ...
- 渗透测试——bluecms安装及seay代码审计
安装phpstudy 链接:https://pan.baidu.com/s/1A8QrOJ-I1UHR08l4KbqpUw 提取码:e8a3 按照默认安装即可 安装bluecms 将src_new文 ...
- php代码审计之bluecms
目录 环境搭建 开始找洞洞 sql注入-1 后台sql注入-2 sql注入-3 任意文件删除-1 任意文件删除-2 前后台广告功能xss-1 先看后台 再看前台 个人资料处xss-2 新闻处xss-3 ...
- php代码审计基础笔记
出处: 九零SEC 连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 -------------------------- ...
- 代码审计之SQL注入:BlueCMSv1.6 sp1
这是一篇纪录关于BlueCMSv1.6 sp1两个SQL注入的审计过程,原文来自代码审计之SQL注入:BlueCMSv1.6 sp1 ,主要纪录一下个人在参考博文复现这两个漏洞经过. href=&qu ...
- Bluecms后台任意修改文件getshell
0x01 前言 前几天在入门代码审计的时候,拿bluecms学习,偶然在百度上面找到一篇文章是写bluecms拿shell的,就学习了一下,我认为应该有部分cms也存在此漏洞,可能文章有不足的地方欢迎 ...
最新文章
- 2021全国高校计算机能力挑战赛(初赛)Java试题四
- php 直接定义json,PHP json_dncode()函数定义与使用方法
- DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- Python实训day04pm【网络爬虫(文本、图片)】
- Java笔记——Java代码块的执行顺序
- 深入理解Spark 2.1 Core (五):Standalone模式运行的原理与源码分析
- 5行代码可实现5倍Scikit-Learn参数调整的更快速度
- git stash参数介绍
- sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml
- 关于might_sleep的一点说明
- 你的Android HTTPS真的安全吗?(转载)
- Siamese-RPN论文阅读
- NIOS 2 软核中EPCS配置芯片的存储操作
- 大屏一体机!奥可视新品A5亮点浅析
- 【有利可图网】PS实战系列:用ps做出雨中油画的质感
- 8255实现数码显示管显示两位数字
- 正则验证车牌号码(包括新能源车牌)
- imx6 Android gpu 内存,IMX8M / IMX8M NANO /IMX6D 等GPU的简单对比
- (转载)深入了解iOS中的OOM(低内存崩溃)
- ros环境下配置orb-slam2遇到的问题