• DVWA -xss


    什么是XSS

    跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。
    跨站脚本攻击,XSS(Cross Site Scripting)。由于与CSS(Cascading Style Sheet))重名,所以就更名为
    XSS。
    XSS作为OWASP TOP10(2017)内容之一,主要使用JavaSript来完成恶意攻击的行为,JS可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS攻击“想象"空间非常大。也就是说,JS强大的灵活性和功能,为XSS攻击提供了非常广阔的攻击面。

    • XSS攻击利用的是Javascript代码;
    • Javascript运行环境(解释器)是浏览器,因为浏览器中有一个引擎专门解释运行Javascript的(chrom v8引擎 );
    • XSS攻击的是客户端浏览器

    XSS攻击模型

    XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。

    整个XSS 攻击过程,涉及三个角色:

    • 服务器

    • 攻击者

    • 客户端浏览器用户(前端)

    攻击流程:

    1. 攻击者将XSS代码注入到web服务器中
    2. 受害者访问被注入的网页,网页资源加载到受害者浏览器中,浏览器发现加载内容包含js代码,浏览器就尝试解释执行js代码,一旦执行成功,那么受害者浏览器就遭受了攻击
    3. 攻击后的操作可能是将敏感信息发送给攻击者,攻击者拿到敏感信息后进行恶意欺骗
    4. 核心三步骤:
      • 攻击者向服务器注入恶意代码
      • 受害者访问服务器
      • 受害者执行恶意代码

    XSS反射型

    low等级

    <script>alert('xss')script>
    
    • 1

    输入在输入框中

    image-20230827134229698

    image-20230827134239695

    出现弹窗,表示攻击成功。

    查看源代码

    
    
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Feedback for end user
        echo '
    Hello ' . $_GET[ 'name' ] . '
    '
    ; } ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    发现并没有任何过滤。

    Medium等级

    输入

    <script>alert('xss')script>
    
    • 1

    image-20230827134825878

    发现将js标签中的内容输出了,可知后端代码将js标签过滤了。

    输入js伪协议

    <a href=javascript:alert(/xss/)>helloa>
    
    • 1

    image-20230827135127741

    点击hello,出现弹窗,表示攻击成功

    image-20230827135154289

    查看源代码

    
    <?php
    
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) //判断$_GET中是否包含name
    {
        // Get input
        $name = str_replace( '
    
    • 1

    image-20230903184716063

    Medium等级

    查看源代码

    
    
    // Is there any input?
    if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
        $default = $_GET['default'];
        
        # Do not allow script tags
        if (stripos ($default, ") !== false) {
            header ("location: ?default=English");
            exit;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    发现在这个里面再一次对

    • 1

    image-20230903191242207

    如果没反应就刷新页面。

    也可以使用& 拼接另一个参数(随便定义),也就是双参数绕过。

    &=
    
    • 1

    image-20230903191435702

  • 相关阅读:
    代码随想录刷题记录 5 - 栈和队列
    【LeetCode-75】 颜色分类
    Excel - 如何给单元格加上下拉框
    记一次 .Net+SqlSugar 查询超时的问题排查过程
    InputStream/OutputStream(文件的输入输出)
    Sentinel实战
    .NET 值类型 引用类型
    7天狂揽 1.3w star 的 MetaGPT,他们的目标让软件公司为之一惊
    syslog-ng 发送metric 到 Prometheus + Grafana
    k8s 之存储卷
  • 原文地址:https://blog.csdn.net/weixin_58954236/article/details/133634403