mysql下SQL注入截取字符串常用函数mid(),substr(),left()

本文深入解析SQL注入中常用的字符串截取函数,如MID、SUBSTR、LEFT及ORD,通过实例展示如何在盲注场景下逐步猜解数据库信息,是渗透测试与安全防护的重要参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也成为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串


mid函数

此函数为截取字符串一部分。MID(column_name,start[,length])

参数描述
column_name必需。要提取字符的字段。
start必需。规定开始位置(起始值是 1)。
length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

例:str=“123456” mid(str,2,1) 结果为2

Sql用例:

  • MID(DATABASE(),1,1)>’a’,查看数据库名第一位,MID(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。
  • MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’此处column_name参数可以为sql语句,可自行构造sql语句进行注入。
substr()函数

Substr()和substring()函数实现的功能是一样的,均为截取字符串。

  • string substring(string, start, length)
  • string substr(string, start, length)
    参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。

Sql用例:

  • substr(DATABASE(),1,1)>’a’,查看数据库名第一位,substr(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。
  • substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’此处string参数可以为sql语句,可自行构造sql语句进行注入。
Left()函数

Left()得到字符串左部指定个数的字符

  • Left ( string, n ) string为要截取的字符串,n为长度。

Sql用例:

  • left(database(),1)>’a’,查看数据库名第一位, left(database(),2)>’ab’,查看数据库名前二位。
  • 同样的string可以为自行构造的sql语句。
ORD()函数

此函数为返回第一个字符的ASCII码,经常与上面的函数进行组合使用。

  • ORD(MID(DATABASE(),1,1))>114 意为检测database()的第一位ASCII码是否大于114,也即是‘r’
### MySQL 截取字符串函数及其使用方法 在 MySQL 中,有多个函数可以用于截取字符串。以下是这些函数的详细说明使用示例: #### 1. `LEFT(str, length)` 函数 `LEFT` 函数字符串的开头提取指定长度的字符。`str` 是要处理的字符串,`length` 是需要提取的字符数。 ```sql SELECT LEFT('Hello World', 5); -- 结果: Hello ``` 此函数适用于需要从字符串左侧提取固定长度字符的情况[^1]。 #### 2. `RIGHT(str, length)` 函数 与 `LEFT` 类似,`RIGHT` 函数字符串的末尾提取指定长度的字符。 ```sql SELECT RIGHT('Hello World', 6); -- 结果: World ``` 该函数适用于从字符串右侧提取固定长度字符的场景[^1]。 #### 3. `SUBSTRING(str, pos, len)` 或 `SUBSTR(str, pos, len)` 函数 `SUBSTRING` `SUBSTR` 是等价的函数,可以从指定位置开始提取指定长度的子字符串。`pos` 表示起始位置(从 1 开始),`len` 表示提取的字符数。 ```sql SELECT SUBSTRING('Hello World', 7, 5); -- 结果: World ``` 如果省略 `len` 参数,则会提取从 `pos` 开始到字符串末尾的所有字符: ```sql SELECT SUBSTRING('Hello World', 7); -- 结果: World ``` 此函数提供了灵活的字符串截取方式,适用于多种场景[^2]。 #### 4. `MID(str, pos, len)` 函数 `MID` 函数是 `SUBSTRING` 的别名,功能完全相同。 ```sql SELECT MID('Hello World', 7, 5); -- 结果: World ``` 此函数同样适用于从指定位置提取子字符串的场景[^1]。 #### 5. `SUBSTRING_INDEX(str, delim, count)` 函数 `SUBSTRING_INDEX` 函数根据指定的分隔符截取字符串。`str` 是要截取字符串,`delim` 是分隔符,`count` 是从哪里开始截取。如果 `count` 为正数,则从左往右截取;如果为负数,则从右往左截取。 ```sql SELECT SUBSTRING_INDEX('www.example.com', '.', 2); -- 结果: www.example ``` ```sql SELECT SUBSTRING_INDEX('www.example.com', '.', -2); -- 结果: example.com ``` 此函数特别适合处理包含分隔符的字符串,如 URL、文件路径等[^3]。 --- ### 示例代码 以下是一些综合示例,展示如何使用上述函数: #### 示例 1:从字符串中提取指定位置的子字符串 ```sql SELECT SUBSTRING('Hello World', 7, 5); -- 结果: World ``` #### 示例 2:根据分隔符提取域名 ```sql SELECT SUBSTRING_INDEX('www.example.com', '.', -2); -- 结果: example.com ``` #### 示例 3:提取字符串的前 5 个字符 ```sql SELECT LEFT('Hello World', 5); -- 结果: Hello ``` #### 示例 4:提取字符串的最后 6 个字符 ```sql SELECT RIGHT('Hello World', 6); -- 结果: World ``` --- ### 意事项 - 在使用 `SUBSTRING` 或 `SUBSTR` 时,需要意起始位置是从 1 开始计数的。 - `SUBSTRING_INDEX` 的 `count` 参数可以为正数或负数,具体取决于需要从左还是从右截取字符串[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值