本文共 974 字,大约阅读时间需要 3 分钟。
访问目标页面后,首先检查页面源代码,寻找潜在的安全疏漏。通过注释发现一段基64编码的字符串,这可能包含隐藏的信息或 otp 密码。尝试将其解码,发现并非普通的 flag 或 hint,而是一段隐藏信息。
通过试错法,尝试使用常见的用户名如 "admin" 登录,发现提示 “wrong pass!”,证明 "admin" 用户存在,但密码错误。接下来,需要通过注入来获取用户密码。
发现输入框存在字符注入漏洞,尝试利用时间盲注。构造特定 SQL 语句,每秒发送一次请求,观察页面响应时间是否异常。例如,尝试以下代码:
name='1'||if(1=1,sleep(5),0)%23&pw=1
成功触发了时间盲注,证明注入点有效。
利用自动化工具 SQLMap,批量扫描目标页面,并提取相关数据。发现存在 user
表,包含 username
和 passwd
列。提取后的数据如下:
username | passwd |
---|---|
admin | cdc9c819c7f8be2628d4180669009d28 |
了解 UNION SELECT 的特性,尝试构造并不在数据库中存在的虚拟数据。例如,在 union_test
表中,尝试以下查询:
SELECT * FROM `union_test` WHERE name="" UNION SELECT "admin","hacked" #
成功获取 admin 账户的密码,无需修改数据库,仅通过构造虚拟数据实现绕过验证。
结合已知的虚拟数据和 user
表结构,尝试构造有效的登录请求。例如,使用以下代码:
name='UNION SELECT 1,"admin","202cb962ac59075b964b07152d234b70%"'&pw=123
通过分析前文 pw
字段的加密方式,发现密码使用 MD5 加密。破解成功后,获取 flag。
通过注入技术,发现防护措施仅允许单行数据获取。结合 UNION SELECT,巧妙构造虚拟数据,绕过了传统的防护机制。
转载地址:http://lxpuk.baihongyu.com/