• XSS初级漏洞靶场


    一、环境的搭建

    可以在githb上找靶机包,使用小皮面板搭建在自己本机

    与此文章类似(放在www目录下)

    二、XSS漏洞简介

    1、什么是xss漏洞

    当用户访问被xss注入的网页,xss代码就会被提取出来。用户浏览器就会解析这段xss代码,也就是用户被攻击了。

    用户最简单的动作就是使用浏览器上网,并且浏览器中有js解释器,可以解析js,然而由于浏览器不具有人格,不会判断代码是否具有恶意行为,只要代码符合语法规则,浏览器就可以解析这段xss代码。

    简单来说,xss就是通过攻击者精心构造的js代码注入到网页中,并且浏览器解释运行了这段恶意的js代码,以达到恶意攻击浏览器的效果。

    xss的攻击对象是用户浏览器,属于被动攻击,因此xss攻击涉及到三个角色

    • 攻击者
    • 用户浏览器
    • 服务器

    当然不要以为xss属于客户端攻击,受害者是用户,就会以为跟自己的网站、服务器安全就没有关系,网站的管理员也是用户之一,知识相对普通用户权限更高。

    实现xss攻击需要具备的两个条件:

    • 需要向Web页面注入精心构造的恶意代码
    • 对用户的输入没有做果过滤,恶意代码能被浏览器成功执行

    2、XSS漏洞的类型

    xss漏洞的位置通常在于Web应用程序的输入验证或者输出过滤不严格的地方

    类型:

    • 存储型XSS(Stored XSS):攻击者将恶意脚本存储在服务器上,当其他用户访问这些恶意脚本的网页时,就会触发XSS漏洞
    • 反射型XSS(Reflected XSS):恶意脚本作为URL参数发送给服务器,服务器将恶意脚本插入到返回的页面中,用户访问该页面就会执行该脚本
    • DOM-based XSS:攻击不涉及服务器端,而是通过修改页面的DOM结构来实现攻击,通常通过修改客户端脚本中的DOM元素来触发漏洞。

    三、开始闯关

    在此之前补充三个弹窗函数

    1. alert()
    2. confirm()
    3. prompt()

    反射型XSS

    1、level1

    语句插入

     从源码可以看到,后端是get接收参数,并且没有过滤,
    那么我们直接在参数的后面加上script标签

    ?name=test

    结果:

    2、level2

    和第一关差不多,按刚才的输入以此,看下情况

    可以看到,我们的输入被原米原样输出,没有弹出警告框

    看下后端源代码,我们的参数会经过这个过滤函数

    htmlspecialchars()会将& (& 符号)、" (双引号)、' (单引号)、< (小于)、> (大于)等符号转换成HTML实体编码。

    那么在h2标签中我们无法进行注入,但可以看到下面的input标签还有一个输出点,
    在这里我们只需要绕过双引号和闭合尖括号就可以实现

    效果:

    test">

    第二种方法:鼠标点击事件onclock

    也是对input标签进行操作,闭合前一个单引号,在后面加上点击事件的属性

    test"onclick="alert(1)

    点击一下:

    3、level3

    先试着用上一关的闭合单双引号试试,

    这时候我们使用点击事件,来进行注入,先将单引号闭合

    test'onclick='alert(1)

    点击,查看效果

    4、level4

    我们在使用上一关的方法,直接使用利用属性,看能不能过
    很明显可以直接过

    看下源码,看考察的点是什么?
    他在考查看我们input的闭合,会将尖括号替换为空

    5、level5

    我们直接在试一下上一关的方法
    可以看到我们的onclick被过滤替换了

    我们看源码,都替换了哪些

    可以看到我们是不能再使用script标签了,带on的事件关键字也不能用了

    我们不妨直接将input前面的标签闭合掉,使用a标签在href后直接使用javascript伪协议

    1">javascript:alert(1)">1

    6、level6

    直接看源码可以看到,将我们上一关用的href也过滤掉了

    在html的标签中,浏览器在解析过程中会忽略大小写的,而我们可以看到上面都是过滤小写,那我们不妨可以试试大小写绕过
    (当然在javascript内部是严格区分大小写的)

    1 " OnCLick="alert(1)

    7、level7

    我们可以看到这关是将关键词替换为空进行过滤,那么我们可以进行双写实现绕过

    1"oonnclick="alert(1)

    8、level8

    此处添加友情链接,那么不就可以用我们a标签里href的javascript伪协议了吗

    但可惜的是被过滤掉了

    那我们直接使用编码就行

    &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

    9、level9

    查看源码可以看到过滤了我们很多关键字,并且必须需要加上http://才可以

    那我们针对这些过滤使用实体编码来绕过

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

    很明显我们添加上了我们想要的东西

  • 相关阅读:
    Java 使用 Channel 与 Buffer 实现文件快速拷贝
    PMP 11.27 考试倒计时22天!冲刺啦!
    ModelAndView.addObject添加对象简介说明
    UE4 源码解析----引擎初始化流程
    Redis作为缓存,mysql的数据如何与redis进行同步?
    Nginx SSL证书更新及密码套件更新
    Filebeat自定义index和fields
    建议收藏!混迹职场多年总结出的8大技巧!
    Flink UDF函数
    ubuntu中使用QT、C++使用redis、hiredis记录
  • 原文地址:https://blog.csdn.net/m0_64620936/article/details/136399717