Etouch2.0 分析代码审计流程 (二) 前台SQL注入
广告位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,我们会在最短的时间内进行处理。
上一篇:一个小白的Arp攻防实战 【返回网站首页】【进入网站论坛】