XSS跨站脚本攻击

  一、XSS漏洞原理

       XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。

XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:      

     恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

 1.XSS漏洞出现的原因

   程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。

2.XSS的分类

1、反射型XSS或不持久型XSS(中危)

2、储存型XSS 或持久型 XSS(高危)

3、DOM XSS

 3.测试方法

1、工具扫描:APPscan、AWVS

2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF

    使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。

(1)在目标站点上找到输入点,比如查询接口,留言板等;

(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;

(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

二、反射型XSS

     反射型xss攻击( Reflected XSS)又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接( 即每次攻击需要用户的点击)。

JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

Javascript语法格式:

<script>

[Javascript代码]

</script>

例如:

<!DOCTYPE html>
		<html>
			<head>
				<meta charset="utf-8">
				<title></title>
			</head>
			<body>
				<script type="text/javascript">
				alert('第一个javascript程序');
				</script>
			</body>
		</html>

在XSS中常用的是以下这些标签

alert                        alert()方法用于显示带有一条指定消息和一个确认按钮的警告框

window.location      window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向  到新的页面

location.href            返回当前显示的文档的完整URL

onload                     一张页面或一幅图像完成加载

onerror                    在加载文档或图像时发生错误

onchange                HTML 元素改变

onclick                     用户点击 HTML 元素

onmouseover          鼠标指针移动到指定的元素上时发生

onmouseout            用户从一个 HTML 元素上移开鼠标时发生

onkeydown              用户按下键盘按键

三、DOM型XSS

  通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口就是DOM,所以在DOM型的xss漏洞利用中,DOM可以看成是一个访问HTML的标准程序接口。

特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)

四、存储型XSS

    存储型XSS是指应用程序直接将攻击者提交的恶意代码存储到服务端保存,然后永久显示在其他用户的页面上。

  比较常见的就是,黑客写下一篇包含恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在它们的浏览器中执行这段恶意的JavaScript代码.黑客把恶意的脚本保存到服务端,所以这种XSS攻击就叫做"存储型XSS"。

存储型XSS可能出现的位置:

  (1)用户注册

  (2)留言板

  (3)上传文件的文件名处

  (4)管理员可见的报错信息

  (5)在线聊天框

  (6)客服

  (7)问题反馈区

  (8)邮件信箱

  理论上,见框就插。

满足存储型XSS的条件: 能够插入数据,插入的JS代码能够正常执行

存储型XSS的作用:获取Cookie,内网IP等等

JS恶意代码可以获取浏览器的Cookie,访问植入了XSS的网站,如果使用Burp抓包检查,会发现第一次访问正常页面,第二次会GET传参访问XSS平台。如果访问正常页面的时候修改Cookie,XSS是获取不到正确Cookie的。

获取Cookie之后,可以Burp抓包直接修改Cookie,登录他人账户,也可以在浏览器修改,当然,Cookie是有时效性的。

存储型XSS在SRC属于中危漏洞,在项目上属于高危漏洞,杀伤力较大。

五、XSS绕过

 1.双引号,单引号

第二关

发现没有

查看源码发现有实体函数

再闭合一下

2.事件

第三关

单引号闭合发现被转义

onclick

多了个单引号

试试onmouseover

第四关

可以看出过滤了<>

还是用事件" οnmοuseοver="alert(1)

3.JavaScript伪协议

第五关

发现过滤是在script中加“_”,同样的方法用事件试试

发现还是过滤

使用JavaScript伪协议

"><a href=javascript:alert(1)>你好</a>

第六关

同样发现script被过滤,用上一关的方法

发现href也被过滤,这时候优先考虑简单的大小写过滤

"><a Href=javascript:alert(1)>你好</a>

双写

第七关

发现script被删除那么我们用双写

发现已经绕过,那再闭合一下就好了

"><scrscriptipt>alert(1)</scrscriptipt>

16进制实体

第八关

其中有两个注入点

发现script和伪协议都被过滤

用16进制实体将t转为&#74但要告诉电脑用的是16进制所以将t改为&#x74

输入javascrip&#x74:alert(1)

换行

第九关

首先发现',"无法发生闭合,说明已经被过滤且第二注入点没有输出位,查看源代码发现第二注入点必须为http://

发现还绕过了javascript那么用16进制实体进行绕过

avascrip&#x74:%0dhttp://%0dalert(1)

隐藏

第十关

打开网页发现没有注入点,打开源代码发现是keyword和t_sort

在url栏上进行这两个参数的注入

发现只有t_sort有用,经测试16进制失败所以试试实体

发现还是没有弹窗但是注入进去了,是因为type="hidden"给隐藏了

输入type="text"给后面顶掉

第十一关

使用burp将Referer改为同第十关

第十二关

为user-agent头

第十三关

为cookie

操作同十一关

第十五关(真没看懂)

没有注入的地方,产看源代码

第十六关

<script>被过滤,用imag标签

发现又把空格过滤了

用url编码代替一下%0d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可闻椿湫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值