portswigger-labs学习记录
导语
从今天开始,来开一个新坑,学期结束,看看能不能利用一些零散的时间在寒假结束前完成一个web安全的靶场,portswigger的靶场算是比较入门的,希望能够在写博客的基础上好好坚持下来。明确一下任务:*就题论题,熟练地了解并掌握在靶场题目限定下的操作
注:文章所添加的题目,翻译来自浏览器系统自带,倘若有愚蠢至极的翻译,并不代表本人水平,仅作大体表达参考!
友链:
靶场平台:Web Security Academy: Free Online Training from PortSwigger
CTF-Web修炼手册:XSS 完全指南 - CTF-Web修炼手册
跨站脚本攻击(XSS)
XSS攻击主要有三种类型。它们分别是:
题目一
- 解答:这个题目直接在可利用的搜索栏输入
<stript>alert('XSS')</stript>有”XSS”回显,就说明有XSS漏洞 - 总结:熟悉最基本的HTML语言,菜鸟教程:HTML 教程 | 菜鸟教程
题目二
- 解答:原理和方法同上,这次的漏洞存在于评论区中,要在表单其他信息填充任意的信息
- 总结:无
题目三
注释:翻译问题,水槽就是sink
- 解答:本实验通过检查DOM是对于输入文本的简单粘贴,只需要闭合原属性并加以利用,就可以进行攻击
解析:DOM是浏览器对网页的编程接口,它把 HTML 文档转换为一个树形对象结构,让 JavaScript 能够动态地访问和操作页面内容。DOM XSS就是基于浏览器不安全的处理HTML,本实例中利用
document.write('<img src="...">');浏览器从url中获取输入保存在query变量中再通过拼接'<img src="/tracker?q=' + query + '">';写入document.write中初学补充:
概念1:前端三件套
1
2
3HTML像房子的墙、门、窗(结构),
CSS像墙漆、地板、窗帘(外观),
JavaScript像电灯开关、遥控器、智能家居(交互功能)概念2:Source(源头):用户能控制的数据入口
1
2
3- URL参数(`?q=xxx`)
- 表单输入
- 网页片段(`#xxx`)概念3:Sink(汇点):危险的DOM
1
2
3document.write() // 最危险
element.innerHTML // 很危险
eval() // 极度危险概念4:数据流
1
用户输入 → 网页获取 → 不检查 → 直接使用 → 执行恶意代码
题目四
- 解答:基本原理同上。playload:
<img src=1 onerror=alert(1)> - 解析:漏洞触发点:使用了
innerHTML和location.search。location.search获取 URL 中的查询参数(例如?search=xxx)。将参数值直接通过innerHTML插入到 DOM 中。对于该playload:img元素里存在src属性,只需要随便给一个值,关键是onerror是<img>标签的标准事件处理器,当图片加载失败时,浏览器会自动执行onerror中的JavaScript代码,这样就能执行任意恶意代码,这里是alert(1)
题目五
- 解答:锚定window.location.search这个属性,它把window.location.search,即URL问号后面的returnPath值给了href,所以只要构造一个含有脚本指令的伪URL即可
- 解析:利用window.location.search找XSS的注入点
题目六
解答:在靶场模拟的攻击服务器里构造攻击载荷:
<iframe src="https://0a1b2c3d4e5f6789.web-security-academy.net(注释:你指定的网站)/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>效果预览:
解析:对于攻击载荷各部分解析
部分 作用 示例值 <iframe>创建一个内嵌窗口 容器 src="..."指定加载哪个网页 你的实验页面 #URL的哈希部分(锚点) 用于触发漏洞 onload="..."页面加载完成后执行 触发攻击的关键 this.src+=修改iframe的URL 添加恶意代码到hash '<img src=x onerror=print()>'恶意代码 触发print()函数
题目七
解答:这个题目要求我们做的是在某个属性处注入,所以只需要闭合前属性,添加新属性即可:
" onclick="alert(1)本题要求尝试多种事件方式,多尝试几种事件,就可以通过本关
1 | // 点击相关 |
题目八
- 解答:审题可以知晓:注入点是属性值,触发事件是点击评论作者名字。本题是一个存储型XSS,提交表单至数据库,所以我们要利用BP去修改,提交一个恶意表单。
这里有四项,我们先提交一个POST,使得其成功上传。接着再访问页面,搜索关键字找到准确的注入点!
咦~我们发现,我们输入的123456.com成功写进了href标签里,这就是题目所说的漏洞所在,现在只要填入palyload即可,如下图
题目九
- 解答:通过BP发现出现在变量赋值里,只需要搜索palyload:
';alert(1);//,做到:把字符串闭合;添加函数;注释掉后引号
题目十
- 解答:输入的有效palyload:
product?productId=1&storeId="></select><img%20src=1%20onerror=alert(1)>
题目十一
- 解答:在搜索框输入载荷
{{$on.constructor('alert(1)')()}},成功alert
| 部分 | 分析 |
|---|---|
| 双大括号 | AngularJS表达式定界符,表示内部代码会被解析执行 |
| $on | AngularJS作用域内置方法,用于事件监听。这里作为获取Function构造函数的入口点 |
| .constructor | JavaScript函数对象的属性,指向创建该函数的构造函数(即Function构造函数) |
| (‘alert(1)’) | 传递给Function构造函数的字符串参数,会被编译为函数体代码 |
题目十二
- 解答:playload为
{"searchTerm":"\\"-alert(1)}//", "results":[]}
题目十三
- 解答:在存在漏洞的博客处输入评论,注意本题存在初步的漏洞检测,第一个尖括号会被转化为字符串,但是从第二个尖括号开始就不会转换,只需要输入载荷:
<><img src='' onerror=alert(1)>
题目十四


