1、我们现在要了解一个PHP的防御函数
magic_quotes_gpc(魔术引号开关)
2、magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据
如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
3、单引号(’)、双引号(”)、反斜线(\)等字符都会被加上反斜线
magic_quotes_gpc的作用:当php的传参中有特殊字符就会在前面加转义字符“\”,来做一定的过滤
4、单引号和双引号内的一切都是字符串,那我们输入的东西如果不能闭合掉单引号和双引号,我们的输入就不会当作代码执行,就无法产生SQL注入,那我们该怎么办?
1、尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国家规范。
但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如我国的gbk、gb2312,作为自己默认的编码类型。
也有一些cms为了考虑老用户,推出了gbk和utf-8两个版本(例如:dedecms)
2、我们就以gbk字符编码为例,拉开帷幕。gbk全称《汉字内码扩展规定》,gbk是一种多字符编码。他使用了双字节编码方案,因为双字节编码所以gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。我们可以通过输出来验证这句话。
例如:0xD50X5C 对应汉字 “ “,URL编码用百分号加字符的16进制编码表示字符,于是%d5%5c经URL解码后为“誠”
1、前面讲到了GBK编码格式。GBK是双字符编码,那么为什么他们会和渗透测试发送了“巧遇”呢?
2、宽字节SQL注入主要是源于程序员设置数据库编码为非英文编码那么就有可能产生宽字节注入
例如说MySQL的编码设置为了select names ‘gbk’ 或是 select character_set_client =gbk, 这样配置会引发编码转换从而导致的注入漏洞。
3、宽字节SQL注入就是PHP发送请求到MySQL时使用语句
select names ‘gbk’ 或是 set character_set_client =gbk进行了一次编码,但是又由于一些不经意的字符集转换导致了宽字符注入。
闭合单引号,注释掉后面的单引号(让我们的输入跳出单双引号)
低版本 修改配置文件然后强行执行magic_quotes_gpc
高版本 删除掉了这个配置,通过特定函数使用addslashes()
select * from news where id=1
$_SERVER
GBK = 双字符编码
单字节(ascii能找到的全是单字节)\ => 92 单字节 =>双字节
select * from news where id='1?\''
URL编码 => 16进制
传一个字符将反斜杠吃掉成为汉字
尝试 => 我试试看宽字节
\ => %5c
%df\ => 凑成汉字
%df%5c =>运
%9c%5c
\' => 都是字符串
user表
%df = URL编码后的内容
gbk => %e8%81%82%5c => 两个汉字
3+1=4/2=2字符
if group_concat 子查询
(1)找不需要闭合
(2)找作用域
非utf-8,非英文编码都可行 数据库的设置
和前端、后端都没啥关系,核心是数据库的编码
前端页面GBK 数据库GBK的可能性很大
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
woke | 16.00 | 0 | 2022-03-22 11:11:40 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.