前言
在信息安全领域,SQL注入和跨站脚本攻击(XSS)是常见的攻击手段,对许多应用程序构成了严重的威胁。本文将详细探讨这些攻击的原理和检测方法,并通过实际代码案例,说明如何通过漏洞挖掘工具、手工测试和Fuzz技术,发现并验证这些安全漏洞。
首先,我们将通过一个具体的SQL注入示例,展示攻击者如何通过构造特定的输入来操控数据库查询,从而获得不正当的信息访问权。其次,我们会深入分析时间盲注的攻击手法,并介绍如何利用数据库响应时间来判断注入语句的执行结果。接着,通过实际代码分析,我们将解释这些漏洞在代码实现中的成因,并提出相应的防护措施。
在接下来的部分中,我们将探讨反射型XSS漏洞,并通过具体的实例展示如何进行有效的XSS漏洞测试。我们还会讨论现代浏览器的内置安全机制以及应用程序层的安全措施,帮助读者更全面地理解和防御XSS攻击。
通过本文的学习,读者将了解SQL注入和XSS攻击的基本原理和检测方法,掌握使用工具和手工测试相结合的漏洞挖掘技巧,提升自身在信息安全领域的专业水平。
SQL注入
EMM这个SQL漏洞Seay审计工具没审计出来,可能是工具代码规则需要更新一下,进入正题,在前期的第一篇文章内容,有介绍过相关SQL注入判断方式,在POST请求体发现一些有关ID或者User等参数的,都可以去挖掘,漏掉了就可能错过了。
patient_id=5'and'1'='1
: 这段代码构建了一个始终为真的条件,服务器成功地执行了查询,并返回了正常的结果。这表明服务器没有识别出恶意代码并阻止执行。
patient_id=5'and'1'='2
: 这段代码构建了一个始终为假的条件,服务器没有返回正常结果,而是返回了一个错误信息。这表明服务器可能对查询进行了检查,但它只检测了错误的条件。
时间盲注
时间型盲注是一种 SQL 注入攻击技术,它利用数据库的响应时间来判断注入语句的真假,从而获取敏感信息。patient_id=5' or sleep(5)--+
通过响应时间并没有延迟准确的5
秒,首先通过延迟注入,延迟动作是存在,测试延迟注入速度较慢,但适用于 MySQL 5.0.12 以上版本。有时候需要根据具体实际情况可能存在其它一些因素,没有按照语句准确的延迟到5
秒。按照语句执行逻辑:OR
运算符的优先级高于AND
运算符,--+
作为一个注释符在查询时并不会执行。
patient_id=5' and sleep(5)--+
这里我换成了and方式是可以准确延迟
除了SLEEP()
函数还有BENCHMARK()``WAITFOR DELAY
这类函数可以测试,通常先测试常用函数,不行在考虑使用其它函数。
注入目的已达成,那么接下来看看代码方面
Application\Runtime\Cache\His\4c76a4f64095c59596389c0565f34682.php
//获取患者档案
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{