Abstract: SQL 注入之宽字节注入、 HTTP 头注入和其他注入

Table of Contents

  1. 宽字节注入
    1. 原理:
  2. 二次编码注入
    1. 函数
  3. HTTP头注入
    1. XFF 注入

宽字节注入

原理:

GBK 占用两字节,ASCII 占用一个字节。PHP 中编码为 GBK,函数执行添加的是 ASCII 编码,添加的符号为 "\"MySQL 默认字符集是 GBK 等宽字节字符集。

%df'PHP 中的 addslashes函数(开启 GPC 或者 iconv())转义成 %df\' ,其中 \ 的十六进制是 %5C,那么现在 %df\' = %df%5C%27 ,若程序默认的字符集是 GBK 等宽字节字符集,则 MySQLGBK 编码时,会认为 %df%5c%27 是一个宽字符,即 運',出现单引号就好注入了。

宽字节注入,内联注入是无法使用的,宽字节注入推荐使用加前缀 --prefix和后缀 suffix 方法,不推荐写 tamper

注意

  • PHP5.3之前,PDO 受宽字节注入影响
  • 如何防止宽字节注入?
    • mysql_set_chartset('GBK')
    • mysql_real_escape_string($value)

二次编码注入

url 编码是一种浏览器用来打包表单输入的格式。url 编码就是一个字符 ascii码的十六进制,不过需要在前面加上 % ,比如 \ascii 是 92(0x5c),故\url 编码为 %5c

函数

  • urldecode()
  • rawurldecode()
1
2
3
4
5
<?php

echo urldecode($_GET['id']);

?>

注意:默认的 GETPOST 函数,先解码一次。

HTTP头注入

XFF 注入

X-Forwarded-For:简称 XFF 头,代表客户端,也就是 HTTP 的请求端真实的 IP,通常一些网站防注入功能会记录请求端真实 IP 地址并写入数据库或某文件。通过修改 XFF 头可以实现伪造 IP

使用 Modify Headers 可以修改 X-Forwarded-For

通过 burpsuite 抓包