欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Etouch2.0 分析代码审计流程 (二) 前台SQL注入

来源:未知 作者:wnhack 时间:2019-01-08 14:13 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助
0x1 前言
​拜读了phpoop师傅的审计文章,心情激动w分,急急忙忙写完手头作业,为了弥补上篇的遗憾,趁热继续认真重读了前台代码(之前没认真读需要登陆的控制器),然后幸运的在各个地方找到了几个还算满意的前台注入。阅读此文,强烈建议,食用开篇作Ectouch2.0 分析解读代码审计流程,风味更佳。
 
0x2 介绍下ECTOUCH的相关配置
​ 更多内容可以参考上篇文章Ectouch2.0 分析解读代码审计流程,这里主要针对SQL谈谈。
1. 程序安装默认关闭debug模式,这样子程序不会输出mysql错误
   `/upload/mobile/include/base/drivers/db/EcMysql.class.php`
   ```php
   //输出错误信息
   public function error($message = '', $error = '', $errorno = '') {
       if (DEBUG) { //false
           
           $str = " {$message}
                   SQL: {$this->sql}
                   错误详情: {$error}
                   错误代码:{$errorno}
";
       } else {
           $str = "出错: $message
";
       }
       throw new Exception($str);
   }
   ```
   所以一般考虑盲注,有回显的注入,要不然过于鸡肋了。
 
0x3 谈谈自己审计这个cms的误区
当时我看前台的时候很容易就可以发现limit后面的注入,因为我之前一直认为limit后面只能使用报错注入,然后就没怎么研究直接跳过了,导致第一次没审计出前台注入,后来我找了下资料,发现自己错了,limit后面也可以进行盲注,不过参考下网上文章这种方法只是适用5.6.6的5.x系列, 为了严谨一点,我本地测试了下,发现的确不行,但是没有去深入了解底层原理,如果有师傅愿意谈谈,实在是我的荣幸,所以说limit后注入是有mysql的版本限制的,所以这里我只分享一个limit后的注入,其他点抛砖引玉。

参考文章:技术分享:Mysql注入点在limit关键字后面的利用方法
分享写tips:
1.可能有些跟我一样的菜鸟还是不理解要去哪里找注入,这里谈谈我的看法。
首先注入需要交互,也就是需要输入,所以要找个接收参数的点,这个时候直接去看控制器无疑是很好的选择,因为这里是功能点,需要用户来交互,当然不排除有其他的地方,ex。
 
0x5 前台 Flow consignee_list limit限制SQL注入
upload/mobile/include/apps/default/controllers/FlowController.class.php
     */
    public function consignee_list() {
        if (IS_AJAX) {
            $start = $_POST ['last']; //可控
            $limit = $_POST ['amount']; //可控
            // 获得用户所有的收货人信息
            $consignee_list = model('Users')->get_consignee_list($_SESSION['user_id'], 0, $limit, $start);//这里传入
            ......................
            die(json_encode($sayList));
            exit();
可控参数如入了Usersmodel类里面,跟进函数:
pload/mobile/include/apps/default/models/UsersModel.class.php
    function get_consignee_list($user_id, $id = 0, $num = 10, $start = 0) {
        if ($id) {
            $where['user_id'] = $user_id;
            $where['address_id'] = $id;
            $this->table = 'user_address';
            return $this->find($where);
        } else {
            $sql = 'select ua.*,u.address_id as adds_id from ' . $this->pre . 'user_address as ua left join '. $this->pre . 'users as u on ua.address_id =u.address_id'. ' where ua.user_id = ' . $user_id . ' order by ua.address_id limit ' . $start . ', ' . $num; //很明显没有单引号,直接拼接进去造成了注入。
            return $this->query($sql); 0x1 前言
​拜读了phpoop师傅的审计文章,心情激动w分,急急忙忙写完手头作业,为了弥补上篇的遗憾,趁热继续认真重读了前台代码(之前没认真读需要登陆的控制器),然后幸运的在各个地方找到了几个还算满意的前台注入。阅读此文,强烈建议,食用开篇作Ectouch2.0 分析解读代码审计流程,风味更佳。
 
0x2 介绍下ECTOUCH的相关配置
​ 更多内容可以参考上篇文章Ectouch2.0 分析解读代码审计流程,这里主要针对SQL谈谈。 本文来自无奈人生安全网
1. 程序安装默认关闭debug模式,这样子程序不会输出mysql错误
   `/upload/mobile/include/base/drivers/db/EcMysql.class.php`
   ```php
   //输出错误信息
   public function error($message = '', $error = '', $errorno = '') { 内容来自无奈安全网
       if (DEBUG) { //false
           
           $str = " {$message}
                   SQL: {$this->sql} 本文来自无奈人生安全网
                   错误详情: {$error}
                   错误代码:{$errorno}
";
       } else { 内容来自无奈安全网
           $str = "出错: $message
";
       }
       throw new Exception($str);
   }

www.wnhack.com


   ```
   所以一般考虑盲注,有回显的注入,要不然过于鸡肋了。
 
0x3 谈谈自己审计这个cms的误区
当时我看前台的时候很容易就可以发现limit后面的注入,因为我之前一直认为limit后面只能使用报错注入,然后就没怎么研究直接跳过了,导致第一次没审计出前台注入,后来我找了下资料,发现自己错了,limit后面也可以进行盲注,不过参考下网上文章这种方法只是适用5.6.6的5.x系列, 为了严谨一点,我本地测试了下,发现的确不行,但是没有去深入了解底层原理,如果有师傅愿意谈谈,实在是我的荣幸,所以说limit后注入是有mysql的版本限制的,所以这里我只分享一个limit后的注入,其他点抛砖引玉。 无奈人生安全网

参考文章:技术分享:Mysql注入点在limit关键字后面的利用方法
分享写tips:
1.可能有些跟我一样的菜鸟还是不理解要去哪里找注入,这里谈谈我的看法。
本文来自无奈人生安全网

首先注入需要交互,也就是需要输入,所以要找个接收参数的点,这个时候直接去看控制器无疑是很好的选择,因为这里是功能点,需要用户来交互,当然不排除有其他的地方,ex。
 
0x5 前台 Flow consignee_list limit限制SQL注入
upload/mobile/include/apps/default/controllers/FlowController.class.php www.wnhack.com
     */
    public function consignee_list() {
        if (IS_AJAX) {
            $start = $_POST ['last']; //可控 无奈人生安全网
            $limit = $_POST ['amount']; //可控
            // 获得用户所有的收货人信息
            $consignee_list = model('Users')->get_consignee_list($_SESSION['user_id'], 0, $limit, $start);//这里传入
            ......................
本文来自无奈人生安全网

            die(json_encode($sayList));
            exit();
可控参数如入了Usersmodel类里面,跟进函数:
pload/mobile/include/apps/default/models/UsersModel.class.php 内容来自无奈安全网
    function get_consignee_list($user_id, $id = 0, $num = 10, $start = 0) {
        if ($id) {
            $where['user_id'] = $user_id;
            $where['address_id'] = $id;

本文来自无奈人生安全网


            $this->table = 'user_address';
            return $this->find($where);
        } else {
            $sql = 'select ua.*,u.address_id as adds_id from ' . $this->pre . 'user_address as ua left join '. $this->pre . 'users as u on ua.address_id =u.address_id'. ' where ua.user_id = ' . $user_id . ' order by ua.address_id limit ' . $start . ', ' . $num; //很明显没有单引号,直接拼接进去造成了注入。
www.wnhack.com

            return $this->query($sql);。 (责任编辑:wnhack)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。