BugKu-WEB-sodirty

目錄

前言

正文

信息收集

代碼審計

?驗證

結尾


前言

七月始,暑假副本也正式開啟


正文

信息收集

看著貌似沒啥意義

看樣子是有備份文件

下載下來

快速審計一下


代碼審計

來吧

app.js沒啥東西,主要是功能是實現error

我們找一找有沒有index.js

找到了

\www\routes\index.js

var express = require('express');
const setFn = require('set-value');
var router = express.Router();const Admin = {"password":process.env.password?process.env.password:"password"
}router.post("/getflag", function (req, res, next) {if (req.body.password === undefined || req.body.password === req.session.challenger.password){res.send("登錄失敗");}else{if(req.session.challenger.age > 79){res.send("糟老頭子壞滴很");}let key = req.body.key.toString();let password = req.body.password.toString();if(Admin[key] === password){res.send(process.env.flag ? process.env.flag : "flag{test}");}else {res.send("密碼錯誤,請使用管理員用戶名登錄.");}}});
router.get('/reg', function (req, res, next) {req.session.challenger = {"username": "user","password": "pass","age": 80}res.send("用戶創建成功!");
});router.get('/', function (req, res, next) {res.redirect('index');
});
router.get('/index', function (req, res, next) {res.send('<title>BUGKU-登錄</title><h1>前端被炒了<br><br><br><a href="./reg">注冊</a>');
});
router.post("/update", function (req, res, next) {if(req.session.challenger === undefined){res.redirect('/reg');}else{if (req.body.attrkey === undefined || req.body.attrval === undefined) {res.send("傳參有誤");}else {let key = req.body.attrkey.toString();let value = req.body.attrval.toString();setFn(req.session.challenger, key, value);res.send("修改成功");}}
});module.exports = router;

看到了沒掃到的接口

同時也發現setFn極有可能存在原型鏈污染

const setFn = require('set-value');
setFn(req.session.challenger, key, value);

由于名字叫做sodirty,所以更加堅定了這個想法

我們來講一講什么原型鏈污染

原型鏈污染是一種在JavaScript中可能存在的安全漏洞,它允許攻擊者修改對象的原型屬性,從而影響到其他依賴這些屬性的對象。這種攻擊通常發生在Web應用程序中,當開發者沒有正確地驗證或清理用戶提交的數據,并且這些數據被用作構造函數或對象方法的參數時,就可能發生原型鏈污染

這里setFn作為指針動態調用set-value,且key 的值完全由用戶控制(通過 req.body.attrkey)

如果我們嘗試構造"__proto__[password]""constructor.prototype.password",那么他們可以嘗試修改對象原型,從而改變其繼承的屬性

具體來說,當 key 是一個指向原型屬性的路徑時,set-value 庫可能會嘗試在原型鏈上設置這個屬性,這就會導致原型鏈污染

這邊Admin 對象的 password 字段被用于比較,如果攻擊者能夠通過原型鏈污染將原型中的 password 屬性設置為與 Admin 相同的值,那么他們就可以繞過身份驗證,從而獲取到 flag

當然這目前只是猜想

除此之外

        if(req.session.challenger.age > 79){res.send("糟老頭子壞滴很");}
router.get('/reg', function (req, res, next) {req.session.challenger = {"username": "user","password": "pass","age": 80}res.send("用戶創建成功!");
});

/reg默認創建age:80

所以我們需要通過

router.post("/update", function (req, res, next) {if(req.session.challenger === undefined){res.redirect('/reg');}else{if (req.body.attrkey === undefined || req.body.attrval === undefined) {res.send("傳參有誤");}else {let key = req.body.attrkey.toString();let value = req.body.attrval.toString();setFn(req.session.challenger, key, value);res.send("修改成功");}}

?進行修改


?驗證

首先注冊

然后就是

我也不知道為什么使用bp進行傳參時會失敗.......所以使用hackbar進行測試

接下來就是修改admin的password

然后就可以直接獲取flag

還有就是為什么ip不一樣了,因為前面的環境崩了

?

成功


結尾

學習學習學習!!!!

求贊求關注

感謝


作者的其他文章

攻防世界-WEB-WEIPHP(記一次有趣的代碼審計)-CSDN博客

攻防世界-WEB-catcat-new-CSDN博客

攻防世界-WEB-filemanager-CSDN博客

BugKu-new_php_bugku newphp-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41454.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的Docker部署方式

說明:Docker部署MySQL主要是簡單快速&#xff0c;不會對電腦系統造成污染。假如你的本地沒有Docker&#xff0c;或者你不會使用Docker&#xff0c;則使用PyCharm去啟動MySQL&#xff0c;或者直接在本機安裝MySQL都是可以的。最重要的是&#xff0c;你要有一個MySQL環境&#xf…

使用 Git Hooks 防止敏感信息泄露

歡迎關注公眾號&#xff1a;冬瓜白 在日常開發中&#xff0c;我們可能會不小心將敏感信息提交到 Git。為了防止這種情況&#xff0c;可以利用 Git Hooks 編寫一個簡單的腳本&#xff0c;當發現提交中包含敏感詞時&#xff0c;給出提示。 以下是一個基于 pre-commit 鉤子的示例…

踩坑:Unity導出WebGL發布到手機上豎屏時強制顯示橫屏

具體的適配問題 公司的項目需要將游戲導出WebGL 發布到Web平臺 本以為是個很簡單的事情 誰知道卻被個橫豎屏適配搞的頭暈 畢竟只有大學淺淺的學了下HTML這門語言 出來工作后基本上都是在跟C# Lua打交道 言歸正傳 看看具體問題吧 游戲如果從橫屏進入 基本上不會有什么適配問題…

C++ 多進程多線程間通信

目錄 一、進程間通信 1、管道&#xff08;Pipe&#xff09; 2、消息隊列&#xff08;Message Queue&#xff09; 3、共享內存&#xff08;Shared Memory&#xff09; 4、信號量&#xff08;Semaphore&#xff09; 5、套接字&#xff08;Socket&#xff09; 6、信號&…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文發表于:ICML22 推薦指數: #paper/??? 問題背景: 異配圖的鄰接矩陣難以確定,以及異配圖的計算復雜度開銷大 可行的解決辦法:高通濾波多跳鄰居,GPRGNN(pagerank一類&#xff0c;各階鄰居的權重不同,ACM-GCN&#xff08;高低通濾波,H2GCN&#xff08;應該復雜度很大&…

碳課堂|搞清楚碳足跡,只看這篇文章就夠了

碳足跡管理是碳達峰碳中和的重要政策工具&#xff0c;2023年12月&#xff0c;國家發展改革委、工信部、國家市場監管總局、住房城鄉建設部、交通運輸部等部門聯合印發《關于加快建立產品碳足跡管理體系的意見》&#xff0c;對產品碳足跡管理各項重點任務作出系統部署。 推動碳…

音樂播放器

目錄 一、設計目標二、實現流程1. 數據庫操作2. 后端功能實現3. 前端UI界面實現4. 程序入口 三、項目收獲 一、設計目標 1. 模擬網易云音樂&#xff0c;實現本地音樂盒。 2. 功能分析&#xff1a; 登錄功能窗口顯示加載本地音樂建立播放列表播放音樂刪除播放列表音樂 3.設計思…

通過Java調用OceanBase云平臺API

最近由于工作原因又開始搗鼓OceanBase&#xff0c;OceanBase云平臺(OCP)提供了強大的管理和監控功能&#xff0c;而且對外開放API接口&#xff0c;可以將部分監控整合到自己的平臺&#xff0c;所以寫了個Java調用OCP API的demo做為自己的技術儲備&#xff0c;也想分享給大家。也…

linux下mysql的定時備份

備份是容災的基礎&#xff0c;是指為了防止系統出現操作或系統故障導致數據丟失&#xff0c;而將全部或部分數據集合從應用主機的硬盤或陣列復制到其他的存儲介質的過程為什么備份 硬件故障軟件故障誤操作病毒入侵保留歷史記錄災難性事件 存儲介質 光盤磁帶硬盤磁盤陣列DAS:直接…

[leetcode]文件組合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

一些你可能不知道的前端小優化- ??(?????)

前言 以前寫css和html和一些原生DOM操作&#xff0c;感覺寫完就完事了。從來沒有考慮過一些性能優化的問題&#xff0c;剛好最近學完了瀏覽器的事件循環和瀏覽器的工作流程。今天大家分享一些我剛學習到的前端小優化。 瀏覽器的工作流程 瀏覽器的渲染過程大致分為以下幾個階…

Windows 11內置一鍵系統備份與還原 輕松替代Ghost

面對系統崩潰、惡意軟件侵襲或其他不可預見因素導致的啟動失敗&#xff0c;Windows 7~Windows 11內置的系統映像功能能夠迅速將您的系統恢復至健康狀態&#xff0c;確保工作的連續性和數據的完整性。 Windows內置3種備份策略 U盤備份&#xff1a;便攜且安全 打開“創建一個恢…

Ubuntu20.04突然沒網的一種解決辦法

本來要學一下點云地圖處理&#xff0c;用octomap庫&#xff0c;但是提示少了octomap-server庫&#xff0c;然后通過下面命令安裝的時候&#xff1a; sudo apt install ros-noetic-octomap-server 提示&#xff1a;錯誤:7 https://mirrors.ustc.edu.cn/ubuntu focal-security …

MWC上海展 | 創新微MinewSemi攜ME54系列新品亮相Nordic展臺

6月28日&#xff0c; 2024MWC上海圓滿落幕&#xff0c;此次盛會吸引了來自全球124個國家及地區的近40,000名與會者。本屆大會以“未來先行&#xff08;Future First&#xff09;”為主題&#xff0c;聚焦“超越5G”“人工智能經濟”“數智制造”三大子主題&#xff0c;探索討論…

leetcode熱題HOT42. 接雨水

一、問題描述&#xff1a; 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 二、解題思路&#xff1a; 思路1&#xff1a;通過動態規劃的預處理方式&#xff0c;分別計算每個柱子左右兩側的最大高度&…

js數據庫多級分類按樹形結構打印

可以使用 JavaScript 來按層級打印 categories 數組。首先&#xff0c;需要將這個數組轉換成一個樹形結構&#xff0c;然后再進行遞歸或者迭代來打印每個層級的內容。 以下是一個示例代碼&#xff0c;用來實現這個功能&#xff1a; const categories [{ id: 2, name: "…

java如何刪除字符串內部分字符

java中&#xff0c;如果要刪除字符串內部分字符&#xff0c;需要用delete方法&#xff0c;前提字符串是可變字符串StringBuffer類型的。 delete方法的語法格式是sbf.delete(start,end) 其中&#xff0c;sbf是任意StringBuffer對象&#xff0c;start是起始索引&#xff0c;end…

AQ mode

算法原理概述 AQ即adaptive quantization(自適應量化),屬于宏塊級別碼流分配的范疇,在一幀的宏塊之間調整碼率分配,x264中AQ算法的核心內容是:復雜宏塊使用大的QP,簡單宏塊使用小的QP。x264如何定義復雜?x264是根據宏塊內像素值的方差來評價宏塊復雜性,方差越大,宏塊…

溶解氧(DO)理論指南(1)

轉載自梅特勒官網資料&#xff0c;僅用于學習交流&#xff0c;侵權則刪&#xff01; 溶解氧理論指南 1 溶解氧(DO)原理1.1 溶解氧和分壓1.2 氧氣在水中的溶解度1.3 溶解氧對生物的重要性1.4 溶解氧對工業的重要性 1 溶解氧(DO)原理 氧是宇宙中第三大常見元素&#xff0c;也是…

JavaScript(6)——數據類型轉換

為什么需要類型轉換&#xff1f; JavaScript是弱數據類型&#xff1a;JavaScript不知道變量到底屬于哪種數據類型&#xff0c;只有賦值了才清除 使用表單&#xff0c;prompt獲取的數據默認為字符串類型&#xff0c;此時不能直接進行算數運算 隱式轉換 某些運算符被執行時&am…