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

  PHP代码审计学习(4)——SQL漏洞_第1张图片

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

      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',传入的时候没有单引号,调用的时候单引号就出现了引发注入

PHP代码审计学习(4)——SQL漏洞_第2张图片

 

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

你可能感兴趣的:(PHP代码审计学习(4)——SQL漏洞)