渗透学习
XSS跨站脚本之XSS基础
文章目录
前言
本系列用于记录本人渗透学习的过程,主要内容围绕Owasp TOP 10展开。
XSS跨站脚本之XSS基础将用实验案例的形式记录学习三大常见的跨站脚本攻击:反射型XSS、存储型XSS和DOM型XSS,借此来掌握XSS攻击的基础知识。另外还会介绍到几种payload的构造以及变形来绕过一些简单的过滤。
本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。
一、XSS漏洞原理
XSS指跨站脚本攻击,主要基于javascript语言完成恶意的攻击行为,因为javascript可以非常灵活的操作html、css和浏览器。XSS利用网页开发时留下的漏洞,巧妙的将恶意代码注入到网页中,因为浏览器不会判断代码是否恶意,只要代码符合语法规则,浏览器就会解析这段XSS代码,以达到攻击的效果。
微博、留言板、聊天室等收集用户输入的地方,都有遭受XSS的风险。
前提条件:
1.需要向Web页面注入精心构造的恶意代码
2.对用户的输入没有做过滤,恶意代码能够被浏览器成功的执行
XSS危害:
1.盗取各种用户账号
2.窃取用户Cookie资料,冒充用户身份进入网站
3.劫持用户会话,执行任意操作
4.刷流量,执行弹窗广告
5.传播蠕虫病毒
6.攻击者能在一定限度内记录用户的键盘输入
接下来就通过几个实验分别了解和感受一下几种XSS跨站脚本
二、XSS分类
1.反射型XSS
反射型XSS是一种非持久型XSS,是最容易出现的一种XSS漏洞。用户在请求某条URL地址的时候,会携带一部分数据。当客户端进行访问某条链接时,攻击者可以将恶意代码植入到URL,如果服务端未对URL携带的参数做判断或者过滤处理,直接返回响应界面,那么XSS攻击代码就会一起被传输到用户的浏览器,从而触发反射型XSS。
流量走向:浏览器——>后端——>浏览器
实验:
在文本框中输入然后提交,在没有过滤的情况下直接被攻击。
查看网页源代码,发现提交的payload被写进了页面的代码中
网页切换后再次进入没有触发弹窗,源码处也没有之前的语句,说明反射型注入是非持久的。
危险的PHP语句:
<?php
$XssReflex = $_GET['input'];
echo 'output:<br>'.$XssReflex;
?>
2.存储型XSS
存储型XSS是持久型XSS,它是危害最大的一种。该类型的XSS漏洞是由于恶意攻击代码被持久化保存在服务器上,然后显示到HTML页面之中。攻击者精心构造XSS代码,保存到数据库中,当其他用户再次访问这个页面,就会触发并执行恶意的XSS代码,从而达到攻击者想要的目的。
流量走向:浏览器——>后端——>数据库——>后端——>浏览器
实验:
输入和之前相同的注入语句,触发弹窗,源代码中同样有我们的恶意代码。与之前不同的是,这串代码被存储到了服务器的数据库中,当我们再次进入时还会触发弹窗,说明存储型XSS是持久型XSS。
危险的PHP语句:
if(isset($_POST['user'])&&isset($_POST['desc'])){
$log=fopen("sql.txt","a");
fwrite($log,$_POST['user']."\r\n");
fwrite($log,$_POST['desc']."\r\n");
fclose($log);
}
...
3.DOM型XSS
DOM型XSS与之前两种在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的DOM解析。客户端上的JavaScript脚本可以直接访问浏览器的DOM并修改页面的内容。在客户端直接输出DOM内容的时候极易触发DOM型XSS漏洞。
流量走向:URL——>浏览器
在URL的defult值上构造payload
攻击完成后触发弹窗,但在查看源代码时并没有改攻击语句,说明这是在浏览器端实现的攻击。
危险语句:
document.getElementByld(“x”).innerHTML、document.write等
还有<img src=1 onerror=alert(1)>
这样的payload,服务器返回包含上面脚本的HTML静态文本时,浏览器会把HTML文本解析成DOM。
4.XSS payload构造以及变形
1.利用【<>】构造HTML标签和标签
<h1 style="color:green;">XSS</h1>
<script>alert(/xss)</script>
2.利用HTML标签的属性值(伪协议)
<a href="javascript:alert(/xss/)">touch me!</a>
3.利用事件
img src='./smile.jpg'οnmοuseοver='alert(/xss/)'>
<input type="text" onclick="alert(/xss/)">
payload变型
1.改变大小写
2.双写关键词
3.用反引号代替单引号
4.用/代替空格
5.Tab与回车绕过关键词
6.使用HTML实体编码或URL编码
另外,还有用Burpsuite修改输入绕过前端检测、闭合标签和用注释符绕过服务端检测等方法,这些可以在自己学习碰到的时候进行尝试。
总结
以上罗列了XSS跨站脚本的三种类型,每种不同类型XSS都依据不同的PHP语句。通过这些实验案例了解到了XSS跨站脚本攻击的基础知识,在实际运用过程中会需要很多变种,可以在XSS跨站脚本的通用缺陷列表深入了解。