一、XSS
1.简介
2.XSS的原理
3.XSS的攻击方式
4.XSS的危害
5.常见XSS攻击方式
6.常见基本过滤方法
7.XSS的防御措施
8.xss平台
二、XSS(DOM)
1.LOW
2.medium
3.High
4.impossible
三、XSS (Reflected)反射型
1.Low
2.Medium
3.high
4.impossible
四、XSS (Stored)存储型
1.Low
2.Medium
3.High
4.Impossible
XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击,攻击者在网页中插入由JavaScript编写的恶意代码,当用户浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。
XSS攻击可分为三种:分别为反射型(Reflected),存储型(Stored)和DOM型。
1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题
1.scirpt 标签
2.img 标签
标签定义 HTML 页面中的图像。
3.input 标签
标签规定了用户可以在其中输入数据的输入字段。
onfocus 事件在对象获得焦点时发生:
竞争焦点,从而触发onblur事件:
input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:
" οnclick=alert(1)> 这样需要点击一下输入框
" onmouseover=alert(1)> 需要鼠标划过输入框
4.details 标签
标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 元素时触发:
使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:
5.svg 标签
6.select 标签
7.iframe 标签
8.video 标签
9.audio 标签
10.body 标签
标签定义文档的主体。
1.空格过滤
当空格被过滤了时,我们可以用 / 来代替空格:
/**/,注释符号绕过;/符号绕过;
2.引号过滤
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:
3.括号过滤
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。
// 在js中,我们可以用反引号代替单双引号
(1)编码:对用户输入的数据进行HTML Entity编码
(2)过滤:移除用户上传的DOM属性,如onerror等,移除用户上传的style节点,script节点,iframe节点等。
(3)校正:避免直接对HTML Entity编码,使用DOM Prase转换,校正不配对的DOM标签。
https://xss.pt
1.一个xss平台来收集cookie,加以利用。
2.对于反射型xss可构造链接,当用户点击时,用户cookie被发送到xss平台。
源码
发现并没有做任何过滤
构造xss语句,看到出现弹窗,代码执行成功,说明存在xss漏洞。
查看页面代码,发现xss代码以及插入并执行了。
xss平台+DOM的xss联动
打开代码界面,查看xss代码语句。
返回xss平台,可以看到我点击dvwa的信息。
查看源代码,发现对
xss平台也是可以的。
#
查看源代码,发现什么也没有,在客户端上处理,不会在进行URL解码。
Hello ' . $_GET[ 'name' ] . '
';
}
?>
发现没有任何防御,所以我们直接输入
同样xss平台也可以实现 url输入
', '', $_GET[ 'name' ] );
// Feedback for end user
echo "Hello ${name}
";
}
?>
发现源码过滤了会直接显示alert('xss')
双写绕过
标签img
Hello ${name}
";
}
?>
查看源代码,发现preg_replace 函数,是执行一个正则表达式的搜索和替换,直接将所有的
Sign登录触发存储型xss
xss平台
', '', $name );
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
//mysql_close();
}
?>
查看源代码,发现将Message所有可能xss攻击的标签都进行了转义或过滤,但对Name仅仅限制了
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
//mysql_close();
}
?>