米酷CMS 7.0.4代码审计
工具:seay源代码审计系统
源代码:网上很好找,这里就懒得贴上了,找不到的话可以给我留言
后面一段时间会深入学习安全开发,代码审计,内网渗透和免杀,快快成长。
审这个系统是因为在先知上看到一篇审它老版本的文章,索性拿来练一下生疏的手。
部署也不再赘述,直接使用phpstudy快速部署,放置源代码后访问路径下
/install/index.php

部署后的界面如下:

源代码放进seay进行白盒审计

挨个进行查看

第一个疑似注入点,可以看到包含了inc.php文件,先看一下过滤没有

套娃,在library.php里面发现了全局过滤

贴出源代码:
if (!get_magic_quotes_gpc()) {
if (!empty($_GET)) {
$_GET = addslashes_deep($_GET);
}
if (!empty($_POST)) {
$_POST = addslashes_deep($_POST);
}
$_COOKIE = addslashes_deep($_COOKIE);
$_REQUEST = addslashes_deep($_REQUEST);
}
function addslashes_deep($_var_0)
{
if (empty($_var_0)) {
return $_var_0;
} else {
return is_array($_var_0) ? array_map('addslashes_deep', $_var_0) : addslashes($_var_0);
}
}
即没有开启gpc过滤敏感字符则使用addslashes_deep函数,addslashes_deep函数是一个魔改addslashes函数的函数,起到过滤敏感字符的作用。
可以看到此处的过滤没有过滤$_SERVER参数,后面有相关的地方可以留意一下。
SESSION在Cookie参数中,所以被过滤了,继续往后面看
来到很多文章都写过的ucenter位置,reg.php内容中有这样一段代码
<?php
include('../system/inc.php');
if(isset($_SESSION['user_name'])){
header('location:index.php');
};
if(isset($_POST['submit'])){
$username = stripslashes(trim($_POST['name']));
// 检测用户名是否存在
$query = mysqli_query($conn,"select u_id from mkcms_user where u_name='$username'");
if(mysqli_fetch_array($query)){
echo '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>';
exit;
}
$result = mysqli_query($conn,'select * from mkcms_user where u_email = "'.$_POST['email'].'"');
if(mysqli_fetch_array($result)){
echo '<script>alert("邮箱已存在,请换个其他的邮箱");window.history.go(-1);</script>';
exit;
}
这里获取到了我们POST输入的name
$username = stripslashes(trim($_POST['name']));
而因为include了inc.php文件,$_POST进来的输入被全局过滤了,如果我们使用了单引号就会被加上反斜杠,但是!
这里又在外面使用了
stripslashes
函数,关于该函数:

同时我们可以通过页面返回的值来判断查询结果是否正确,即该位置存在布尔注入
使用方法:
查询一个已注册的用户名,然后进行布尔注入
本地测试(POST payload 注意test用户已注册)
永真式:
name=test' and '1'='1&email=test%40qq.com&password=test&submit=

永假式:
name=test' and '1'='2&email=test%40qq.com&password=test&submit=

burp抓包放进sqlmap里面跑

可以直接使用工具跑出来
接着全局搜索使用了stripslashes函数的位置

active.php代码如下
<?php
include('../system/inc.php');
$verify = stripslashes(trim($_GET['verify']));
$nowtime = time();
$query = mysqli_query($conn,"select u_id from mkcms_user where u_question='$verify'");
$row = mysqli_fetch_array($query);
if($row){
echo $row['u_id'];
$sql = 'update mkcms_user set u_status=1 where u_id="'.$row['u_id'].'"';
if (mysqli_query($conn,$sql)) {
alert_href('激活成功!','login.php');
}
}else{
$msg = 'error.';
}
echo $msg;
?>
我们可以通过是否echo $row['u_id']来进行注入
去数据库里面查一下u_question是多少:

其逻辑在reg.php中,简单贴一下代码:
$token = md5($username.$password.$regtime); //创建用于激活识别码
$data['u_question'] =$token;
实际上真实环境中我们应该是拿不到u_question的,但是这里我们可以使用时间盲注来获取数据库内容
repass.php也是类似的点存在注入
$username = stripslashes(trim($_POST['name']));
$email = trim($_POST['email']);
// 检测用户名是否存在
$query = mysqli_query($conn,"select u_id from mkcms_user where u_name='$username' and u_email='$email'");
而除了因为stripslashes导致的注入外,代码里面还有因为直接拼接SQL语句而导致的注入,简单举两处:
admin_edit.php里
$sql = 'update mkcms_manager set ' . arrtoupdate($_data) . ' where m_id = ' . $_GET['id'] . '';
if (mysqli_query($conn,$sql)) {
alert_href('管理员修改成功!', 'cms_admin.php');
} else {
alert_back('修改失败!');
}
这里的 $id 直接进行拼接,从而造成了注入,因为不需要使用引号进行闭合,所以之前的全局过滤也形同虚设了。
ad.php 里
if (isset($_GET['del'])) {
$sql = 'delete from mkcms_ad where id = ' . $_GET['del'] . '';
if (mysqli_query($conn,$sql)) {
alert_href('删除成功!', 'cms_ad.php');
} else {
alert_back('删除失败!');
}
}
这里也是通过拼接组成的SQL语句,存在SQL注入漏洞
逻辑漏洞以前有老哥提到过验证码复用+暴力遍历从而任意用户密码重置,下次还是审一个没人审的小众代码吧太菜了
参考链接:
米酷CMS 7.0.4代码审计的更多相关文章
- 熊海cms v1.0 完全代码审计
很久以前写的,写这个东西更多的是为了说明我自己的一个思路,即按照程序功能点进行代码审计, 这样经过一段时间训练,熟悉了某种功能的正确和错误实现方法,遇到类似的代码就可以很快看出是否有问题了 --- 0 ...
- 帝国CMS 6.0功能解密之新版结合项功能,帝国结合项使用
可以用来做A-Z信息检索 某字段等于多少,输出 等等 帝国CMS6.0在继承以往版本结合项功能的基础上又新增很多特性,更强大.今天我们就专门来讲解6.0的结合项改进. 回顾下以往版本的结合项语 ...
- PageAdmin Cms V2.0 getshell 0day
黑小子在土司公布了“PageAdmin cms getshell Oday”,并给出了一个漏 洞的利用EXP.经过危险漫步在虚拟机里测试,存在漏洞的是PageAdmin Cms的次最薪版本PageAd ...
- SiteServer CMS 5.0 源码入门
开发者中心 STL 语言 文 档 博 客 论 坛 Github 二次开发 提示:文档中心正在完善中,我们将不断发布新文档,敬请期待... 新手入门 SiteServer CMS 能做什么 Site ...
- Chisel辅助iOS 应用程序调试,MusicApp模仿酷狗4.0 UI框架
本文转载至 http://www.cocoachina.com/ios/20140825/9446.html Chisel Chisel集合了大量的LLDB 命令来辅助iOS 应用程序调试,并支持添 ...
- 开放融合易用@门户移动开发新体验-逐浪CMS v8.0.1全面发布
北京时间2019年8月30日消息: 领先的web内核研发厂商--上海Zoomla!逐浪CMS团队发布最新CMS版本:Zoomla!逐浪CMS v8.0.1,这是继上个版本v8.0后功能最具完强大与精彩 ...
- 骑士CMS<6.0.48 模板注入文件包含漏洞复现及遇到的坑
1.坑 payload:variable=1&tpl=<?php phpinfo(); ob_flush();?>/r/n<qscms/company_show 列表名=&q ...
- 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析
0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...
- 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件删除漏洞分析
0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...
随机推荐
- 1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法
1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法 问题1: 关于网站访问(打不开或者连接不上服务器的问题): 没有关闭selinux和防火墙,是访问不了网站 [root@mall ~ ...
- 通过JS判断当前浏览器的类型
通过JS判断当前浏览器的类型,对主流浏览器Chrome.Edge.Firefox.UC浏览器.QQ浏览器.360浏览器.搜狗浏览器的userAgent属性值来判断用户使用的是什么浏览器. 不同浏览器的 ...
- MySQL索引结构之Hash索引、full-text全文索引(面)
Hash索引 主要就是通过Hash算法(常见的Hash算法有直接定址法.平方取中法.折叠法.除数取余法.随机数法),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位 ...
- 【Java从入门到精通】day08-包机制-JavaDoc生成文档
1.包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包语句的语法格式为: package pkg1[.pkg2[.pkg3...]]; 一般利用公司域名倒置作为包名(如www ...
- 解密Cookie,这一篇就够了
一.Cookie介绍 因为HTTP协议是无状态的,每次请求都是独立的,服务器端无法判断两次请求是否来自同一个用户,进而也就无法判断用户的登录状态,也不知道用户上一次做了什么.所以Cookie就是用来绕 ...
- 一个List按照某个size分割为多个小的List
针对于List的size比较大,使用多线程处理任务时,可以将List分割为一个一个比较小的任务单元进行处理. 例如集合大小:645,按照100分割,会将集合分割为6个size为100的集合和一个siz ...
- ISITDTU CTF 2020 部分Web题目Writeup
周末,跟着m3w师傅打ISITDTUCTF,m3w师傅带弟弟上分,Tql! Web1 给了源码: <?php class Read{ public $flag; public function ...
- mac 快键键图标对应
Mac 键盘快捷键 您可以按下某些组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作. 要使用键盘快捷键,请按住一个或多个修饰键,然后按快捷键的最后一个键.例如,要使用 Command- ...
- Hadoop大数据平台搭建之前期配置(1)
环境:CentOS 7.4 (1708 DVD) 工具:VMware.MobaXterm 一. 网络配置 1. 在VMware中安装虚拟机,此步骤不作赘述. 2. 镜像文件保留在固定目录下,网络适配 ...
- 面试官:小伙子,你给我说一下Java Exception 和 Error 的区别吧?
前言 昨天在整理粉丝给我私信的时候,发现了一个挺有意思的事情.是这样的,有一个粉丝朋友私信问我Java 的 Exception 和 Error 有什么区别呢?说他在面试的时候被问到这个问题卡壳了,最后 ...