zoukankan      html  css  js  c++  java
  • 漏洞重温之XSS(上)

    漏洞简介

    跨站脚本攻击(XSS)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览页面之时,嵌入web网页中的script代码会被执行,从而达到恶意攻击用户的目的。

    XSS漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

    常见的输出函数有:echo printf print print_r sprintf die var-dump var_export

    xss漏洞最常见的验证方法为先插入一段恶意代码,完成在网站上的弹窗操作,利用恶意代码攻击自己,如果再重复访问网页时发现弹窗,则可以证明该位置存在xss漏洞。

    xss漏洞的危害:
    (1)窃取管理员账号或cookie,入侵者可以冒充管理员的身份登录后台,使入侵者具有恶意操控后台数据的能力,包括增删改查信息等。
    (2)窃取用户的个人信息或者登录账号,对网站用户的安全产生巨大威胁。例如冒充用户身份进行各种操作。
    (3)网站挂马。先将恶意攻击代码嵌入到web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
    (4)发送广告或垃圾信息。攻击者可以利用xss漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

    常见的xss漏洞分为存储型 反射型、DOM型三种。
    (1)反射型xss
    用户在请求某条URL地址的地时候,会携带一部分数据。当客户端进行访问某条连接时,攻击者可以将恶意代码植入到url,如果服务端未对url携带的参数做判断或者过滤处理,直接返回相应页面,那么xss攻击代码就会一起被传输到用户的浏览器,从而出发反射型xss。例如,当用户进行搜索时,返回结果通常会包括用户原始的搜索内容,如果攻击者精心构造包含xss恶意代码的链接,诱导用户点击并成功执行后,用户的信息就可以被窃取,甚至可以模仿用户进行一些操作。
    反射型xss不会永久存储用户的数据;仅发生在用户的一次访问过程之后。这个过程就像一次反射,因此得名反射型xss。反射型xss的触发条件比较苛刻,需要攻击者想法设法的引导用户点击链接,但产生的危害不容忽视。
    (2)存储型xss
    存储型xss又叫持久性。一般而言,它是三种xss里危害最大的一种。此类型的xss漏洞是犹豫而已攻击代码被持久化保存到服务器上,然后被显示到html页面之中。这类漏洞经常出现在用户评论的页面,攻击者精心构造xss代码,保存到数据库中,当其他用户再次访问这个页面时,就会触发并执行恶意的xss代码,从而窃取用户的敏感信息。
    (3)DOM型xss
    DOM-basedXSS漏洞是基于文档对象模型(Document Object Model)的一种漏洞。这种xss与反射型xss、存储型xss在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发xss靠的是浏览器端的DOM解析。客户端上的javascript脚本可以访问浏览器的DOM并修改页面内容,不依赖服务器的数据,直接从浏览器端获取数据并执行。


    XSS挑战之旅level1-level7

    level1

    进入主页,发现只有一张图片,没有任何文本框可以尝试插入。

    但发现网站url用name参数传参,并且更改name会改变页面显示。

    直接尝试在name参数后面写入测试代码

    <script>alert(1)</script>
    

    第一关,通过


    level2

    第二关开头,发现了xss最熟悉的文本框,本着最基本的见框就插原则,使用测试代码尝试。

    <script>alert(1)</script>
    

    根据网页反馈,发现代码并没有被执行。

    右键,点击查看源码,找问题所在。

    可以看到,我们插入的代码在两个双引号中间,并当做字符串传送,故没有完成他本来应该完成的操作。
    尝试闭合前面的单引号,代码如下:

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

    第二关,通关。


    level3

    第三关,发现插入框,使用测试代码测试。

    <script>alert(1)</script>
    

    根据网页反馈,发现插入代码并没有被执行

    右键查看网页源码,发现网站过滤了尖括号,显然script、img这些常用标签无法使用。

    尝试使用onclick事件进行xss攻击。

    使用单引号闭合value

    ' onclick=alert(1)
    

    尝试触发事件,但代码却依然没有执行,猜测代码出现问题。

    右键查看网页源码

    发现代码后面多了一个单引号,引起代码出错。

    尝试在代码后面多写一个单引号闭合后方代码。

    第三关,通关。


    level4

    第四关开始,研习传统,使用测试代码测试。

    PS:

    测试代码的作用:

    1.简单直接的检测。如果网站没有设置对xss的防备,可以直接通过代码检测出问题所在。

    2.查看网站的防御机制如何。如第三关,第四关,网站通过过滤尖括号来阻止xss攻击,在攻击没有成功的时候,我们可以通过查看网页源码,来查看具体哪个地方出现问题。

    发现代码没有被执行,右键查看网页源码。

    发现该源码和第四关区别仅仅在于一个使用单引号,一个使用双引号。

    废话不多,直接上代码。

    " onclick=alert(1) "
    

    第四关,通关。


    level5

    第五关开局,发现文本框,上测试代码。

    发现插入代码未执行,右键查看网站源码。

    发现该处需要先闭合前方的value,同时,注意到script标签被转义,变成了scr_ipt,导致该标签不可用。

    换测试代码,注意闭合前方。

    "><img src=a onerror=alert(1)>
    

    从未加载的图片位置,可以看出来,代码已经成功执行了,但是却没有弹窗,说明代码某处出现问题,导致无法正常运行。

    右键查看源代码,找寻问题所在。

    问题发现,在我们插入的代码后方,多了一个">,因为这个,才导致我们的代码没有正常执行。

    尝试闭合后方尖括号。

    发现我们希望出现的弹窗依然没有出现,右键查看网页源码。

    从这个地方,可以看出来,问题的确出在最后的尖括号上,正常情况,后方尖括号是可以被闭合的,但是现在却无法完成。

    尝试不闭合,直接将后方注释。

    PS:这里这么尝试的原因是,代码前方并没有出现任何问题,只是后面多了一个尖括号,如果可以将后面代码注释掉,使其不会影响代码正常运行,可能会达到预期目的。

    尝试过后,发现依然无法执行,猜测后方尖括号可能无法被注释等操作,可以利用到尖括号和双引号的有之前提到的onclick事件。

    事件依然没有被执行,右键查看源码。

    发现onclick事件被过滤,导致无法成功执行。

    尝试使用a标签来完成xss攻击。

    代码如下

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

    第五关,通关。


    level6

    第六关,依然先对文本框进行xss攻击。

    发现网站转义了script标签,猜测可能也转义了其他常见标签和事件,直接采用a标签进行xss攻击尝试。

    代码没有达到预期效果,右键查看网站源码。

    发现网站转义了href属性,尝试使用大小写来绕过。

    第六关,通关。


    level7

    第七关,开局使用测试代码进行第一次攻击。

    发现script标签被过滤。

    经过测试script、src、on等关键字被过滤,显然无法再使用script标签、img标签,和a标签来完成目的。

    尝试使用单词嵌套来进行攻击。

    " oonnclick=alert(1) "
    
    

    第七关,通关。

    文章未经本人允许,禁止转载。 有技术问题,可加好友讨论。 联系方式:QQ:MjgxMjMxODAzNQ== 微信:bzNycjByLVhpYW9taW5n
  • 相关阅读:
    可视化工具D3.js教程 入门 (第十三章)—— 树状图
    可视化工具D3.js教程 入门 (第十二章)—— 力导向图
    可视化工具D3.js教程 入门 (第十一章)—— 饼图
    可视化工具D3.js教程 入门 (第十章)—— 交互式操作
    vue滑动页面选中标题,选中标题滚动到指定区域
    Vue样式穿透
    操作系统:进程和线程+进程的通讯方式
    客户端与服务端长连接的几种方式
    前端性能优化的 24 条建议(2020)-收藏
    idea中修改git提交代码的用户名
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/13437409.html
Copyright © 2011-2022 走看看