渗透测试 | 黑白盒某门诊挂号漏洞挖掘经验分享
字数 1139 2025-08-19 12:40:36
SQL注入与XSS漏洞挖掘实战教学文档
1. SQL注入漏洞挖掘
1.1 基础SQL注入检测
原理:通过构造特殊输入改变SQL查询逻辑,获取未授权数据访问
检测方法:
- 在POST请求体中寻找ID或User等参数
- 使用真/假条件测试:
patient_id=5'and'1'='1(始终为真条件)patient_id=5'and'1'='2(始终为假条件)
判断依据:
- 真条件返回正常结果 → 可能存在注入漏洞
- 假条件返回错误信息 → 确认存在注入漏洞
1.2 时间盲注技术
适用场景:当应用不直接返回错误信息时
测试方法:
- 使用延迟函数:
patient_id=5' or sleep(5)--+patient_id=5' and sleep(5)--+
注意事项:
- OR和AND优先级不同会影响结果
- 延迟可能不精确为5秒,但应有明显延迟
- 其他可用函数:
BENCHMARK(),WAITFOR DELAY
技术要点:
--+是注释符,确保后续查询部分被忽略- 优先测试常用函数,再尝试其他函数
2. 代码层面分析
2.1 漏洞代码示例
//获取患者档案
function getUserInfo() {
var patient_id=$("#patient_id").val();
if(patient_id>0){
$.post('/Doctor/getUserInfo',{patient_id:patient_id},function (res) {
if(res.status==0){
if(res.data.file_id>0){
var d=res.data;
var txt='<dt class="whiteBg">体重:'+d.weight+'kg<span class="r">身高:'+d.height+'cm</span><br>\n'
+ '血型:'+d.blood_a+'<span class="r">RH'+d.blood_b+'</span><br>\n'
+ '左耳听力:'+d.left_ear_hearing+'<span class="r">右耳听力:'+d.right_ear_hearing+'</span><br>\n'
+ '左眼视力:'+d.left_vision+'<span class="r">右眼视力:'+d.right_vision+'</span></dt>\n'
+ '<dd>个人史:'+d.personal_info+'</dd>\n'
+ '<dd>家族史:'+d.family_info+'</dd>\n'
+ '<dd>身*证:'+d.id_card+'</dd>\n'
+ '<dd>紧急联系人:'+d.emergency_contact_name+'<span class="r">关系:'+ d.emergency_contact_relation_label+'</span></dd>\n'
+ '<dd>电话:'+d.emergency_contact_mobile+'</dd>';
$("#user_file_box").html(txt);
}else{
问题点:
- 直接拼接用户输入的patient_id到SQL查询
- 未对返回数据进行过滤直接输出到HTML
3. XSS漏洞挖掘
3.1 反射型XSS测试
测试方法:
- 寻找输出用户输入的参数
- 测试基本XSS payload:
<script>alert(1)</script>- ``
现代浏览器防护:
- 内置XSS过滤器可能阻止简单payload
- 需要测试绕过技术
3.2 输出上下文分析
关键点:
- 数据输出在HTML标签属性中
- 数据输出在JavaScript代码中
- 数据输出在HTML注释中
测试技巧:
- 闭合当前上下文
- 测试各种编码方式
- 利用DOM-based XSS技术
4. 防护措施
4.1 SQL注入防护
- 使用参数化查询/预处理语句
- 实施最小权限原则
- 输入验证和过滤
- 使用ORM框架
4.2 XSS防护
- 输出编码:
- HTML实体编码
- JavaScript编码
- URL编码
- 使用CSP策略
- 设置HttpOnly标志
- 输入验证和过滤
5. 漏洞挖掘工具与技巧
5.1 工具使用
- Seay审计工具(注意规则更新)
- Burp Suite
- SQLMap
- XSS Hunter
5.2 手工测试技巧
- Fuzz测试技术
- 边界条件测试
- 异常输入测试
- 逻辑漏洞挖掘
6. 实战总结
- 工具扫描+手工验证结合
- 关注ID/User等关键参数
- 多种注入技术组合测试
- 代码审计与黑盒测试互补
- 持续更新测试payload库
通过掌握这些技术和方法,安全测试人员可以更有效地发现和验证SQL注入与XSS漏洞,提升应用安全性。