XSS攻击

做了几个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实体一下scr&#105;pt(还可以在script中间插入&#09;,&#10;,空格等不可见字符对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

如果需要的话在学习一下吧。

上一篇
下一篇