zoukankan      html  css  js  c++  java
  • 企业检测SQL注入的一些方式探讨

    寻找SQL注入点的 way

    在企业中有如下几种方式可以选择;

    • 自动化
      - 白盒基于源码卡点审计
      - 黑盒基于流量进行自动化扫描
    • 手动
      - 手动白盒看代码
      - 手动黑盒检查

    MySQL Inject 入门案例

    没有做任何过滤,直接把参数插入到SQL语句中,就是注入点;

    PHP Demo:

    // 接收来自前端输入参数id
    $uid = $_GET['id'];
    // 构造查询SQL语句,注意这里,uid参数没做过滤就放到SQL语句中进行拼接
    $sql = "select * from user where user_id = $uid";
    // 语句也未使用预编译,就执行查询动作,SQL注入就是这么产生的
    query($sql);
    

    注意,上面只是一个演示案例,现在的Web框架基本是MVC模式的,Model层一般不接收前端的参数,接收前端参数一般在Control层完成,也就意味着查询SQL注入的时候你需要跟踪一个前端参数从Control层传递到Model。这期间,一个前端参数可能会经过十几个函数的调用传递都是有可能的。这个时候考验你的就不是技术了,而是耐心。


    自动化审计的尝试之旅

    最开始使用的是Seay源代码审计工具,后面使用的是Rips代码审计工具,发现都不能满足自己的需求,因为有个致命缺陷,就是会有遗漏的SQL注入找不全。这样就非常危险了,你说XSS、CSRF这种攻击客户端的洞,漏几个就漏几个了。但SQL注入这种攻击服务端的漏了几个,如果漏的那几个还被外部发现了,那饭碗还要不要了?

    比较的结果是 Rips 比 Seay 误报率、准确率要高好几个档次。使用Risp能提高审核的效率,但是并不能提高精度,所以正确用法的是,拿到陌生的代码时,可以使用Rips先扫一遍,先找出一些容易找到SQL注入点。想要覆盖全,并且有精度的效果,往下看。

    Taint这种参数污染标记跟踪的工具又会比Rips的准确率高。


    人工审计才能保证精度

    精度和效率感觉是个矛盾;

    Taint总会有误报和漏的,毕竟taint是基于流量的,如果没有人点击那个url,是不可能检测出来的,可以用一个笨方法来解决,现在的情景下,光靠检测工具是可能的,只能说依靠工具辅助人来提高效率而已。

  • 相关阅读:
    Redis基础知识补充及持久化、备份介绍
    Redis基础认识及常用命令使用
    Docker实战(7):Docker无日志(无*-json.log文件)
    Linux实战(11):Centos安装Jenkins
    Linux实战(13):Centos8 同步时间
    Docker实战(6): 导出docker镜像离线包
    Linux实战(13):Centos8安装FFmpeg
    Linux实战(12):解决Centos7 docker 无法自动补全
    Linux实战(11):Centos后期添加网卡配置
    Linux实战(11):配置PPPOE拨号
  • 原文地址:https://www.cnblogs.com/mysticbinary/p/12865920.html
Copyright © 2011-2022 走看看