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.
2.
3.click1 #点击click1时弹出cookie值
4. #src地址错误,然后执行onerror的内容
Low级别:
观察源码:
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '
Hello ' . $_GET[ 'name' ] . '';
}
?>
源码没有对参数做任何防御处理措施
下面给一些基本的XSS攻击
1.
2.
3.click1 #点击click1时弹出xss3
4. #src地址错误,然后执行onerror的内容
例如我们这里输入:
构造获取cookie的payload:
然后Logout 用这段cookie值进行登录即可以被攻击者的身份访问此网站(在未关闭浏览器前)
Medium
观察源码:
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL) {//Get input
$name = str_replace( '
echo "
Hello ${name}";
}
对于script标签进行了过滤,下面提供几个绕过的方法
1.大小写分开
2.ipt> 类似于SQL注入中的双写
3.用别的标签替换 :
同样也可以获得cookie 之后就可以通过cookie以被攻击者的身份访问此网站
High
观察源码:
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL) {//Get input
$name = preg_replace( '/
echo "
Hello ${name}";
}?>
分析源码,可以看到,使用了preg_replace正则表达式函数,对参数进行过滤,查看源码可以看到对
执行:
Impossible
观察源码:
使用了htmlspecailchars函数做了html实体转义,无法利用XSS