zoukankan      html  css  js  c++  java
  • PHP代码审计学习(4)——SQL漏洞

    前言

      SQL注入原理之前已经研究过了,感兴趣的师傅可以去看一下SQL注入天书,这里不详细介绍了,简单讲一下再代码审计中容易出现的SQL注入类型,只是简单归纳一下书里的知识

    SQL注入位置

      登陆页面、获取HTTP头处理函数、订单处理、查询搜索,用户管理操作页面等,登陆页面大多发生在HTTP头的client-ip和x-forward-for,一般用于记录IP地址,在订单页面因为要和很多页面交互往往很复杂,也常常出现二次注入

    代码审计基本注入类型

      普通注入

        字符型 1' and '1' = '1'  、数字型 1 and 1=1

      宽字节注入

        PHP连接数据库时候,当设置 set character_set_chient=gbk 时候或当我们看到的变量有时会被addslashes函数过滤,会导致编码注入问题。如果数据库是用GBK编码处理参数的,我们可以在参数中带入%df%27 '或%df ',编码为%df%5c%27,%df%57会被认为是一个中文“運”,这样单引号之前的转义符号“”就被吃调了,变成了“運’”转义失败,mysql在解读时会无视新字节,使得我们的单引号 ' 生效。

        在SQLMAP加脚本参数,或者直接在后边加%df'直接跑

    --tamper unmagicquotes --dbs --hex

        设置SET NAMES 'gbk'也一样有漏洞出现,只是不过多干两步

    SET
    character_set_connection='gbk',
    character_set_results='gbk',
    character_set_client=gbk

      

        代码审计的时候查找关键字

          SET NAMES

          character_set_client=gbk

          mysql_set_charset('gbk')

      二次注入

        传入数据库再取出调用的情况下就可能会造成漏洞,现在web程序经常会使用addslashes(),mysql_real_escape_string(),mysql_escape_string()或开启GPC的方式转义特殊字符。如果某处使用了urldecode或rawurldecode,就有可能出现二次编码注入,比如我们提交?id=1%2527,第一次解码后是?id=1%27,因为%25解码后是%,然后1%27就存入了数据库,再调用解码的时候,1%27就变成了1',传入的时候没有单引号,调用的时候单引号就出现了引发注入

         在代码审计中我们就可以搜索urldecode或rawurldecode来查找有没有二次注入的漏洞

  • 相关阅读:
    nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。
    centos7安装nodejs
    .Net Core Linux centos7行—jenkins linux 构建.net core web app
    asp.net core 编译mvc,routing,security源代码进行本地调试
    发现一个很N且免费的html5拓扑图 关系图 生成组件
    Quill编辑器介绍及扩展
    vs2017 rc 离线安装包制作
    单体架构风格
    GlusterFS 安装 on centos7
    Expect 安装 on centos7
  • 原文地址:https://www.cnblogs.com/Lee-404/p/13088757.html
Copyright © 2011-2022 走看看