SQL注入--宽字节注入
PHP测试代码:
<?php
// 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符
// /$id=$_GET[‘id’];
$mysqli=new mysqli(‘localhost’,’root’,’root’,’test’); //连接数据库 指定数据库 if ($mysqli->connect_errno) { //判断错误信息
die(‘Connect Eroor:’).$mysqli->connect_error(); //断开连接 返回错误
}else {
if ($id) {
$sql=”SELECT * FROM mysqli_test WHERE id=’$id'”; //查询语句
echo $sql;
$mysqli->query(‘set names gbk’);
$result=$mysqli->query($sql); //执行一个查询
//var_dump($result);
$date=$result->fetch_assoc(); //获得一个结果集
//var_dump($date);
echo “<br /> username:”.$date[‘username’]; //打印输出
echo “<br /> password:”.$date[‘password’];
}else {
echo “Error:ID NULL”;
}
}
?>
<?php // 面向过程写法 // $con=mysql_connect(‘localhost’,’root’,’root’) or die(‘Connect Error:’.mysql_error()); //连接数据库
// mysql_select_db(‘test’,$con);//设置数据库 // $id=addslashes($_GET[‘id’]); // $sql=”SELECT * FROM mysqli_test WHERE id=’$id'”; // echo $sql; // $result=mysql_query($sql); // $date=mysql_fetch_assoc($result); // echo “<br />username:”.$date[‘username’]; // echo “<br />password:”.$date[‘password’]; // //var_dump($date); ?>
当PHP开启magic_quotes_gpc (魔术引号),或者使用addslashes、mysql_real_escape_string等函数进行过滤时,如果查询语句中存在单引号,我们尝试闭合单引号就会被过滤掉,如图,通过添加\(转义符)将单引号转义

这种形式下,如果数据库使用的是GB2312、GBK、GB18030等宽字节的编码时,就会造成宽字节注入
当我们输入%df’时经过addslashes转义变成 %dF%5C%27 在通过GBK编码后变成 運’
在这里我们发现他多出来了一个单引号正好闭合了我们查询语句中的单引号
构造语句:http://127.0.0.1/sqltest.php?id=1%df’and 1=2 union select 1,user(),database() — a(这里要注意 在mysql注释符后边要加一个空格符,由于浏览器在会删去url末尾中的空格符 所以我们在后边加一个字符串 中间加个空格)

修复:
mysql_real_escape_string转义
参数化查询(预编译)
pdo查询
SQL注入--宽字节注入的更多相关文章
- CTF—WEB—sql注入之宽字节注入
宽字节注入 宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入
0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...
- Sql 注入详解:宽字节注入+二次注入
sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshel ...
- SQL宽字节注入
0x00 概述 - 什么是宽字节注入? 宽字节注入就是因为gbk编码方式需要两个ascii码组合来解码,所以形象的叫做宽字节,这个作为了解即可 -宽字节注入的条件 1) 数据库查询设置为GBK编码 2 ...
- 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- SQL注入:宽字节注入
了解GBK编码 尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的 ...
- GBK宽字节注入SQL
SQL注入:宽字节注入(GBK双字节绕过) 2015-06-09lyiang 宽字节注入的作用是非常大的,实际上在代码层的防御一般不外乎两种,一是反斜杠转义,而就是replace替换成空字节,之前的替 ...
- SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入
1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...
- Mysql宽字节注入(转)
尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...
随机推荐
- [vijos1892]树上的最大匹配(树形DP)
题目:https://vijos.org/p/1892 分析:(100分其实用到各种c++优化,没什么实际意义,所以弄70就可以了) 题目很简单,很容易想出用树形DP,但是求方案数的时候,满满都是细节 ...
- [工具类]文件或文件夹xx已存在,则重命名为xx(n)(2)
写在前面 最近一直在弄文件传输组件,其中一个功能就是,在接收端接收文件时,如果文件已经存在了,则对其进行文件名+索引的方式进行自动重命名,之前也写个类似的工具类,总感觉代码太冗余,每回头想想,总觉得心 ...
- android文件上传到服务器
package uploadDemo; import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStre ...
- python 参数
摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473844933 ...
- 在windows 下使用git
首先安装好在windows下的linux模拟交互器 这里我选择的是cygwin 这里我是参考:http://book.51cto.com/art/201107/278731.htm 这里还要注意我这里 ...
- SQL-Server 创建数据库,创建表格
use master --使用master权限 create database E_Market--创建新数据库 on primary--指定主数据文件,有且只有一个 ( name='E_Market ...
- 在 Visual Studio 2013 中创建 ASP.NET Web 项目(1):概述 - 创建 Web 应用程序项目
注:本文是“在 Visual Studio 2013 中创建 ASP.NET Web 项目”专题的一部分,详情参见 专题导航 . 预备知识 本专题适用于 Visual Studio 2013 及以上版 ...
- python 类型之 set
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)
蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...
- Type-Length-Value编码
Within data communication protocols, optional information may be encoded as a type-length-value or T ...