ctfshow-xss
本文最后更新于 2024年11月7日 凌晨
前置知识
XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的安全漏洞,攻击者通过在网页中注入恶意脚本代码,诱使用户执行这些代码,从而实现窃取信息、伪造身份、篡改网页内容等攻击。
XSS 攻击可以分为三种主要类型:
反射型 XSS(Reflected XSS):攻击者通过诱使受害者访问带有恶意脚本的 URL(如通过电子邮件链接、搜索引擎等),恶意脚本被即时执行并在用户的浏览器中反射回来,通常用来窃取用户信息。
存储型 XSS(Stored XSS):恶意脚本被存储在网站的服务器端(如数据库、日志文件等),当用户访问受感染的页面时,脚本被加载并执行。存储型 XSS 对受害者影响较大,因为一旦脚本被存储在服务器端,所有访问该页面的用户都会受到影响。
DOM 型 XSS(DOM-based XSS):攻击通过客户端 JavaScript 操控 DOM 结构,攻击代码通常在用户的浏览器端执行,而不经过服务器。这种类型的 XSS 是基于网页上的 JavaScript 代码错误进行的攻击
通常的利用点在cookie,bot的执行等等,简单的了解一下知识点就行
web316
反射性xss
1 |
|
写在自己的vps上面
执行以下语句,修改vps的内容即可。
1 |
|
web317
测试了一下过滤了script
,应该大小写也过滤了
0x01
尝试使用img进行绕过
1 |
|
0x02
1 |
|
web318
测试了一下禁用了img,可以继续用body
1 |
|
web319
同web318
web320
简单的在前端输入fuzz看看过滤了什么,script
,img
,空格被过滤了,空格可以用常见的其他的来进行绕过
0x01
1 |
|
0x02
学习一下网上的其他方法
String.fromCharCode()函数:ascii码转字符
因此可以利用这个可以构造
1 |
|
里面的实际内容是
1 |
|
web321
同320的0x01
web322
测试了一下,发现xss过滤了,先修改一下vps里的文件名
与此同时还过滤了过滤了script, img, iframe空格,分号,逗号。
1 |
|
web323
同322
web324
同322
web325
同322
web326
同322
到此为止反射型xss结束,可以学习一下不同姿势的xss
xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户
web327
没什么过滤的,必须是admin
才能发送成功
没什么过滤的,按照图片来就行。
1 |
|
web328
去看了一下官方的视频了解了一下思路
首先需要注册一个账户,password用payload输入,同时vps的端口需要打开,以便可以接收到cookie值,然后进行登陆,利用bp逐条更改cookie值发包以得到flag
1 |
|
然后登陆,bp异步发包改cookie发包就行,速度不要过快
web329
本题与上题不同的地方在于cookie会立即失效,所以用cookie的方法就失效了,可以尝试使用外带其他信息进行登陆得到flag
0x01
通过类名查找元素,通过document来获取。
1 |
|
innerHTML:从对象的起始位置到终止位置的全部内容,不包括Html标签。
可以看到前端代码中将要显示admin密码的地方类为layui-table-cell laytable-cell-1-0-1
这是一个调用 window.open()
函数的语句,用于打开新的浏览器窗口。
0x02
jQuery 选择器查找类和获取内容。参考的jay17师傅的学习了一下
1 |
|
值得注意的是环境默认的是注册的就是第一次,所以加入了一个简单的script
的限制就可以得到了flag
web330
这题考察的是xss来修改密码。
抓包发现有修改的api,利用本地修改(x自己?)
1 |
|
看了一下视频,先注册一个账号,用户名用payload,密码123即可
使用admin
登入,等大约五六秒,登入之后需要抓包,会重定向,能看到flag
web331
这题由上题的GET传参变成POST传参了
基本的思路都是一样的,改一下payload就行
1 |
|
$.ajax()
是 jQuery 用于发起 AJAX 请求的方法。
url: 'api/change.php'
指定请求的目标 URL(api/change.php
)。
type: 'post'
设置请求类型为 POST。
data: { p: 123 }
是请求的发送数据,这里以键值对的形式传递参数,p
的值为 123。
其余流程差不多,不多赘叙
web332
题目描述是xss在哪里
flag是9999元
随便注册账户默认只有五块,思路就是让自己钱变得多或者让admin设置的钱变少就行
这题先讲非预期,下一题正常讲
给admin转-100000就行了,然后正常买flag
web333
登陆发现没有钱了先是一个方法,先注册一个asd::asd
的账户,然后再以payload注册一个账户把钱打进asd的账户里,然后回到asd账户里购买就行
1 |
|