美文网首页
SQL注入防御绕过——二次编码

SQL注入防御绕过——二次编码

作者: Ackerzy | 来源:发表于2018-07-03 20:45 被阅读13次

01 背景知识

一、为什么要进行URL编码

通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编码主要是为了避免引发歧义与混乱。
例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/?name=abc&pwd=123如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和= 符号进行转义,也就是对其进行编码。
对于URL编码的深入研究可以参看下面这些内容:
为什么要进行URL编码
深入分析 web 请求响应中的编码问题

二、URL传输过程中的编码问题

HTTP请求过程经历的几个环节:
浏览器【get/post】①========>服务器②========>浏览器显示③

  • ①:浏览器会把URL经过编码后发送给服务器,不同的浏览器对URL的编码规则不同。对于GET方式提交的数据,浏览器会自动进行URL编码;对于POST方式提交的数据,其编码方式可以由开发者进行指定。
  • ②:服务器根据其自身的配置文件对URL进行解码(解码成Unicode),然后将显示内容编码。
  • ③:浏览器按照指定的编码显示该网页。
    此外,在客户端也就是浏览器上运行的前端程序也会根据Web服务的需要对要传输的数据进行一些编码操作,而在服务端除了服务器中间件会自动对URL进行解码,后端的Web程序会对前端进行编码的数据进行解码操作。

02 二次编码注入

下面这幅图片很好地解释了二次编码注入的原理(图片来源为网易Web安全工程师课程,侵删):

二次编码注入

从中我们也可以得知,二次编码注入产生的原因是:
后端程序的编码函数,如urldecode()等,与PHP本身处理编码时,两者配合失误,使得攻击者可以构造数据消灭\

看一下实例代码:

//用GET方式获取id值,并对其中的特殊字符进行转义
$id = mysql_real_escap_string($_GET['id']);
//使用urldecode()函数进行解码
$id = urldecode($id);

$sql = "SELECT * FROM usres WHERE id = '$id' LIMIT 0,1;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

上面的代码就是一个二次注入的典型场景,这时如果我们提交:
http://127.0.0.1/sql.php?id=1%2527
就可以绕过对'的转义,进行SQL注入攻击。

在测试时,如果发现了页面可能存在二次编码注入漏洞,也可以使用sqlmap进行自动化攻击

//只需在注入点后键入%2527即可
python sqlmap.py -u "http://127.0.0.1/sql.php?id=1%2527"

分享一个二次编码注入的漏洞实例

相关文章

  • SQL注入防御绕过——二次编码

    01 背景知识 一、为什么要进行URL编码 通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编...

  • 一步一步学习 Web 安全 3.2 二次编码注入

    原理 二次编码和上一节宽字节注入异曲同工,同样也是构造数据绕过转义。代码使用转义防御后又使用了 urldecode...

  • 小迪16期-20170408

    安全狗防护注入及绕过思路Sqlmap tamper插件分析. sql注入绕过思路一:提交方式更改注入sql注入绕过...

  • SQL注入防御绕过——宽字节注入

    01 背景知识 字符集 在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二...

  • SQL注入防御绕过——二次注入

    01 二次注入原理 二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所...

  • BUUCTF-Web-随便注(三种解题思路)

    知识点:SQL注入-堆叠注入,sql预处理语句,巧用contact()函数绕过 堆叠注入原理: 在SQL中,分号(...

  • SQL注入防御

    通常情况下,可以使用预编译解决sql注入问题,当有特殊业务场景必须使用拼接时,我们要对sql进行过滤 解决方案 只...

  • SQL注入

    SQL注入 概念 危害 原理 实例 防御 基础 - ### SQL语句所用符号不同数据库的sql注入与提权常见S...

  • Web安全之如何获取一个WebShell

    SQL注入获取Webshell ** ** 条件: 利用: 防御: 上传漏洞获取Webshell** *...

  • sql注入绕过方法

    大小写变形:or — Or、oR等价替换:and — &&、or — ||、 xor — |、 not — !双写...

网友评论

      本文标题:SQL注入防御绕过——二次编码

      本文链接:https://www.haomeiwen.com/subject/xvdduftx.html