国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)絡(luò)安全之原型鏈污染

這篇具有很好參考價(jià)值的文章主要介紹了網(wǎng)絡(luò)安全之原型鏈污染。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄:

目錄:

一、概念

二、舉例

三、 實(shí)操了解

總結(jié)

四、拋出原題,歷年原題復(fù)現(xiàn)

第一題:

五、分析與原理

?第二題:

八、分析與原理

九、具體操作,payload與結(jié)果

結(jié)果:?


一、概念

? JavaScript 規(guī)定,所有對(duì)象都有自己的原型對(duì)象(prototype)。一方面,任何一個(gè)對(duì)象,都可以充當(dāng)其他對(duì)象的原型;另一方面,由于原型對(duì)象也是對(duì)象,所以它也有自己的原型。因此,就會(huì)形成一個(gè)“原型鏈”(prototype chain):對(duì)象到原型,再到原型的原型……

cat.color--->Animal.prototype--->aaa.prototype--->xxx.--->object.protoype--->null

如果一層層地上溯,所有對(duì)象的原型最終都可以上溯到`Object.prototype`,即`Object`構(gòu)造函數(shù)的`prototype`屬性。也就是說(shuō),所有對(duì)象都繼承了`Object.prototype`的屬性。這就是所有對(duì)象都有`valueOf`和`toString`方法的原因,因?yàn)檫@是從`Object.prototype`繼承的。`Object.prototype`的原型是`null`。`null`沒(méi)有任何屬性和方法,也沒(méi)有自己的原型。因此,原型鏈的盡頭就是`null`。

二、舉例

網(wǎng)絡(luò)安全之原型鏈污染,原型模式,javascript,開(kāi)發(fā)語(yǔ)言

三、 實(shí)操了解

在我們了解到了具體的“子類(lèi)繼承父類(lèi)”的關(guān)鍵點(diǎn)后,我們進(jìn)行實(shí)操看一道題

function P() {

}
var p = new P();

console.info(p.constructor === P)

console.info(p.constructor === P.prototype.constructor)

console.info(p.hasOwnProperty('constructor'))

思路:三小問(wèn)的具體思路:

  1. console.info(p.constructor === P);: 這行代碼比較了對(duì)象 p 的構(gòu)造函數(shù)是否等于構(gòu)造函數(shù) P。由于 p 是通過(guò)構(gòu)造函數(shù) P 創(chuàng)建的,所以 p.constructor 應(yīng)該指向 P,因此這里的比較結(jié)果為 true。

  2. console.info(p.constructor === P.prototype.constructor);: 這行代碼比較了對(duì)象 p 的構(gòu)造函數(shù)是否等于構(gòu)造函數(shù) P.prototype.constructor。在這里,P.prototype.constructor 默認(rèn)指向 P,因?yàn)?P.prototype 是從構(gòu)造函數(shù) P 繼承而來(lái)的。因此這里的比較結(jié)果也為 true。

  3. console.info(p.hasOwnProperty('constructor'));: 這行代碼檢查對(duì)象 p 是否直接擁有自己的屬性 'constructor'。然而,'constructor' 實(shí)際上是從 P.prototype 繼承而來(lái)的,因?yàn)?p 是通過(guò) new P() 創(chuàng)建的,它的原型是 P.prototype。因此,這里的比較結(jié)果為 false。

  4. 總結(jié):代碼展示了對(duì)象 p 與構(gòu)造函數(shù) P 及其原型之間的關(guān)系。對(duì)象 p 是通過(guò)構(gòu)造函數(shù) P 創(chuàng)建的,它的原型指向了 P.prototype。這些比較和檢查操作說(shuō)明了原型鏈在 JavaScript 中的工作方式。

總結(jié)

從以上的簡(jiǎn)單拋出和講解我們不難看出原型鏈污染玩的就是兩個(gè)重要的概念1.原型繼承2.屬性查找機(jī)制,讓我們維持著這兩個(gè)理念看看題型,在題型中理解原型鏈污染

  1. 原型繼承: JavaScript中的對(duì)象可以通過(guò)原型繼承從其他對(duì)象繼承屬性和方法。每個(gè)對(duì)象都有一個(gè)指向其原型的鏈接,通過(guò)這個(gè)鏈接可以訪問(wèn)原型對(duì)象的屬性和方法。

  2. 屬性查找機(jī)制: 當(dāng)訪問(wèn)一個(gè)對(duì)象的屬性或方法時(shí),JavaScript引擎會(huì)首先在對(duì)象本身查找,如果找不到,它會(huì)沿著原型鏈向上查找,直到找到屬性或方法或者到達(dá)原型鏈的末端。

四、拋出原題,歷年原題復(fù)現(xiàn)

第一題:

const express = require('express')
var hbs = require('hbs');
var bodyParser = require('body-parser');
const md5 = require('md5');
var morganBody = require('morgan-body');
const app = express();
var user = []; //empty for now

var matrix = [];
for (var i = 0; i < 3; i++){
    matrix[i] = [null , null, null];
}

function draw(mat) {
    var count = 0;
    for (var i = 0; i < 3; i++){
        for (var j = 0; j < 3; j++){
            if (matrix[i][j] !== null){
                count += 1;
            }
        }
    }
    return count === 9;
}

app.use(express.static('public'));
app.use(bodyParser.json());
app.set('view engine', 'html');
morganBody(app);
app.engine('html', require('hbs').__express);

app.get('/', (req, res) => {

    for (var i = 0; i < 3; i++){
        matrix[i] = [null , null, null];

    }
    res.render('index');
})


app.get('/admin', (req, res) => { 
    /*this is under development I guess ??*/
    console.log(user.admintoken);
    if(user.admintoken && req.query.querytoken && md5(user.admintoken) === req.query.querytoken){
        res.send('Hey admin your flag is <b>flag{prototype_pollution_is_very_dangerous}</b>');
    } 
    else {
        res.status(403).send('Forbidden');
    }    
}
)


app.post('/api', (req, res) => {
    var client = req.body;
    var winner = null;

    if (client.row > 3 || client.col > 3){
        client.row %= 3;
        client.col %= 3;
    }
    matrix[client.row][client.col] = client.data;
    for(var i = 0; i < 3; i++){
        if (matrix[i][0] === matrix[i][1] && matrix[i][1] === matrix[i][2] ){
            if (matrix[i][0] === 'X') {
                winner = 1;
            }
            else if(matrix[i][0] === 'O') {
                winner = 2;
            }
        }
        if (matrix[0][i] === matrix[1][i] && matrix[1][i] === matrix[2][i]){
            if (matrix[0][i] === 'X') {
                winner = 1;
            }
            else if(matrix[0][i] === 'O') {
                winner = 2;
            }
        }
    }

    if (matrix[0][0] === matrix[1][1] && matrix[1][1] === matrix[2][2] && matrix[0][0] === 'X'){
        winner = 1;
    }
    if (matrix[0][0] === matrix[1][1] && matrix[1][1] === matrix[2][2] && matrix[0][0] === 'O'){
        winner = 2;
    } 

    if (matrix[0][2] === matrix[1][1] && matrix[1][1] === matrix[2][0] && matrix[2][0] === 'X'){
        winner = 1;
    }
    if (matrix[0][2] === matrix[1][1] && matrix[1][1] === matrix[2][0] && matrix[2][0] === 'O'){
        winner = 2;
    }

    if (draw(matrix) && winner === null){
        res.send(JSON.stringify({winner: 0}))
    }
    else if (winner !== null) {
        res.send(JSON.stringify({winner: winner}))
    }
    else {
        res.send(JSON.stringify({winner: -1}))
    }

})
app.listen(3000, () => {
    console.log('app listening on port 3000!')
})

五、分析與原理

取flag的條件是 傳入的querytoken要和user數(shù)組本身的admintoken的MD5值相等,且二者都要存在。由代碼可知,全文沒(méi)有對(duì)user.admintokn 進(jìn)行賦值,所以理論上這個(gè)值時(shí)不存在的,但是下面有一句賦值語(yǔ)句:

網(wǎng)絡(luò)安全之原型鏈污染,原型模式,javascript,開(kāi)發(fā)語(yǔ)言

?結(jié)果:

網(wǎng)絡(luò)安全之原型鏈污染,原型模式,javascript,開(kāi)發(fā)語(yǔ)言

?第二題:

'use strict';

const express = require('express');
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser');
const path = require('path');


const isObject = obj => obj && obj.constructor && obj.constructor === Object;

function merge(a, b) {
    for (var attr in b) {
        if (isObject(a[attr]) && isObject(b[attr])) {
            merge(a[attr], b[attr]);
        } else {
            a[attr] = b[attr];
        }
    }
    return a
}

function clone(a) {
    return merge({}, a);
}

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
const admin = {};

// App
const app = express();
app.use(bodyParser.json())
app.use(cookieParser());

app.use('/', express.static(path.join(__dirname, 'views')));
app.post('/signup', (req, res) => {
    var body = JSON.parse(JSON.stringify(req.body));  {"__proto__": {"admin":1}}
    var copybody = clone(body)
    if (copybody.name) {
        res.cookie('name', copybody.name).json({
            "done": "cookie set"
        });
    } else {
        res.json({
            "error": "cookie not set"
        })
    }
});
app.get('/getFlag', (req, res) => {
    var аdmin = JSON.parse(JSON.stringify(req.cookies))
    if (admin.аdmin == 1) {
        res.send("hackim19{}");
    } else {
        res.send("You are not authorized");
    }
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

八、分析與原理

分析:小例題:obj[a][b] = value。如果攻擊者可以控制avalue,則可以將a的值設(shè)置為__proto__,并且將使用值value為應(yīng)用程序的所有現(xiàn)有對(duì)象定義屬性b

分析整個(gè)代碼:首先定義一個(gè)函數(shù)merge,關(guān)于合并兩個(gè)對(duì)象的設(shè)計(jì)是非常不安全的。由于執(zhí)行merge()的庫(kù)的最新版本已經(jīng)打了補(bǔ)丁,這道題目使用了舊方法合并對(duì)象,從而易受到攻擊。
在上面的代碼中,我們可以快速注意到的一點(diǎn)是將2 個(gè)“admins”定義為const adminvar admin。理想情況下,js中不允許將const變量再次定義為var,所以在題目中有一個(gè)需要我們搞懂的點(diǎn)便是,其中一個(gè)是正常的a,而另一個(gè)是其他的a(同形異義字)。

原理:對(duì)象遞歸合并、按路徑定義屬性、對(duì)象克隆

九、具體操作,payload與結(jié)果

從源代碼入手:
? Merge()函數(shù)是以一種可能發(fā)生原型污染的方式編寫(xiě)的。這是問(wèn)題分析的關(guān)鍵。
? ? 易受攻擊的函數(shù)是在通過(guò)clone(body)訪問(wèn)/signup時(shí)被調(diào)用的,因此我們可以在注冊(cè)時(shí)發(fā)送JSON有效負(fù)載,這樣就可以添加admin屬性并立即調(diào)用/getFlag來(lái)獲取Flag。
? ?如前所述,我們可以使用__proto__(points to constructor.prototype)來(lái)創(chuàng)建值為1的admin屬性。
執(zhí)行相同操作的最簡(jiǎn)單的payload:

{"__proto__": {"admin": 1}}

結(jié)果:?

網(wǎng)絡(luò)安全之原型鏈污染,原型模式,javascript,開(kāi)發(fā)語(yǔ)言

?網(wǎng)絡(luò)安全之原型鏈污染,原型模式,javascript,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-637208.html

到了這里,關(guān)于網(wǎng)絡(luò)安全之原型鏈污染的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 安全開(kāi)發(fā)-JS應(yīng)用&NodeJS指南&原型鏈污染&Express框架&功能實(shí)現(xiàn)&審計(jì)&WebPack打包器&第三方庫(kù)JQuery&安裝使用&安全檢測(cè)

    安全開(kāi)發(fā)-JS應(yīng)用&NodeJS指南&原型鏈污染&Express框架&功能實(shí)現(xiàn)&審計(jì)&WebPack打包器&第三方庫(kù)JQuery&安裝使用&安全檢測(cè)

    Node.js是運(yùn)行在服務(wù)端的JavaScript 文檔參考:https://www.w3cschool.cn/nodejs/ Nodejs安裝:https://nodejs.org/en 三方庫(kù)安裝 express:Express是一個(gè)簡(jiǎn)潔而靈活的node.js Web應(yīng)用框架 body-parser:node.js中間件,用于處理 JSON, Raw, Text和URL編碼的數(shù)據(jù)。 cookie-parser:這就是一個(gè)解析Cookie的工具。通過(guò)re

    2024年02月11日
    瀏覽(58)
  • 安全基礎(chǔ) --- 原型鏈污染

    安全基礎(chǔ) --- 原型鏈污染

    大部分面向?qū)ο蟮木幊陶Z(yǔ)言,都是通過(guò)“類(lèi)”(class)實(shí)現(xiàn)對(duì)象的繼承。傳統(tǒng)上,JavaScript 語(yǔ)言的繼承不通過(guò) class,而是通過(guò)“原型對(duì)象”(prototype)實(shí)現(xiàn) JavaScript 規(guī)定,每個(gè)函數(shù)都有一個(gè) prototype 屬性,指向一個(gè)對(duì)象 js中類(lèi)的建立 js 中,定義一個(gè)類(lèi),需以 定義“構(gòu)造函數(shù)”

    2024年02月10日
    瀏覽(26)
  • 【安全】原型鏈污染 - Hackit2018

    【安全】原型鏈污染 - Hackit2018

    目錄 準(zhǔn)備工作 解題 代碼審計(jì) Payload ????????將這道題所需依賴模塊都安裝好后 ? ? ? ? ?運(yùn)行一下,然后可以試著訪問(wèn)一下,報(bào)錯(cuò)是因?yàn)槔锩鏇](méi)內(nèi)容而已,不影響,準(zhǔn)備工作就做好了 代碼審計(jì) ?解題關(guān)鍵就在這里,將請(qǐng)求體里面的row,col,data都是我們post傳進(jìn)去的可控的

    2024年02月11日
    瀏覽(25)
  • 安全作業(yè)-Race競(jìng)爭(zhēng)型漏洞、原型鏈污染

    安全作業(yè)-Race競(jìng)爭(zhēng)型漏洞、原型鏈污染

    ? 一、第一題js代碼 獲取flag的條件是 傳入的querytoken要和user數(shù)組本身的admintoken的MD5值相等,且二者都要存在。 由代碼可知,全文沒(méi)有對(duì)user.admintokn 進(jìn)行賦值,所以理論上這個(gè)值時(shí)不存在的,但是下面有一句賦值語(yǔ)句: data , row , col ,都是我們post傳入的值,都是可控的,所以

    2024年02月13日
    瀏覽(22)
  • 【安全】原型鏈污染 - Code-Breaking 2018 Thejs

    【安全】原型鏈污染 - Code-Breaking 2018 Thejs

    目錄 準(zhǔn)備工作 環(huán)境搭建 加載項(xiàng)目 復(fù)現(xiàn)? 代碼審計(jì) payload ?總結(jié) ????????Nodejs ????????BurpSuite ? ? ? ?? 項(xiàng)目鏈接 ①?下載好了cmd切進(jìn)去 ? ② 安裝這個(gè)項(xiàng)目 ? 可以檢查一下 ③運(yùn)行并監(jiān)聽(tīng) ? ? ? ? ? 可以看到已經(jīng)在3000端口啟動(dòng)了? ??看到了這一句,所以要先了解l

    2024年02月11日
    瀏覽(48)
  • 網(wǎng)絡(luò)安全入口設(shè)計(jì)模式

    網(wǎng)絡(luò)安全入口設(shè)計(jì)模式

    網(wǎng)絡(luò)安全入口涵蓋了幾種設(shè)計(jì)模式,包括全局路由模式、全局卸載模式和健康終端監(jiān)控模式。網(wǎng)絡(luò)安全入口側(cè)重于: 全局路由 、 低延遲故障切換 和 在邊緣處減輕攻擊 。 上圖包含了3個(gè)需求。 ?網(wǎng)絡(luò)安全入口模式封裝了全局路由模式。因此,實(shí)現(xiàn)可以將請(qǐng)求路由到不同區(qū)域

    2024年02月09日
    瀏覽(82)
  • 發(fā)現(xiàn)網(wǎng)絡(luò)安全的基本實(shí)踐:安全代碼開(kāi)發(fā)

    發(fā)現(xiàn)網(wǎng)絡(luò)安全的基本實(shí)踐:安全代碼開(kāi)發(fā)

    本文的目標(biāo)是對(duì)安全代碼開(kāi)發(fā)在網(wǎng)絡(luò)安全中的重要性提供清晰、全面的看法。然后,我們將探討數(shù)字世界中迫在眉睫的威脅、安全開(kāi)發(fā)的指導(dǎo)原則以及可用的工具和技術(shù)。 我們還將分析如何將安全性整合到開(kāi)發(fā)周期和培訓(xùn)中,作為確保這一基本實(shí)踐成功的關(guān)鍵要素。通過(guò)對(duì)安

    2024年02月04日
    瀏覽(17)
  • 26歲轉(zhuǎn)行網(wǎng)絡(luò)安全,成功上岸安全開(kāi)發(fā)!

    26歲轉(zhuǎn)行網(wǎng)絡(luò)安全,成功上岸安全開(kāi)發(fā)!

    前言 我是去年 9 月 22 日才正式學(xué)習(xí)網(wǎng)絡(luò)安全的,之前在國(guó)營(yíng)單位工作了 4 年,在長(zhǎng)沙一個(gè)月工資只有 5000 塊,而且看不到任何晉升的希望,如果想要往上走,那背后就一定要有關(guān)系才行。 而且國(guó)營(yíng)單位的氣氛是你干的多了,領(lǐng)導(dǎo)覺(jué)得你有野心,你干的不多,領(lǐng)導(dǎo)卻覺(jué)得你這

    2024年02月11日
    瀏覽(25)
  • JavaScript設(shè)計(jì)模式(一)——構(gòu)造器模式、原型模式、類(lèi)模式

    JavaScript設(shè)計(jì)模式(一)——構(gòu)造器模式、原型模式、類(lèi)模式

    個(gè)人簡(jiǎn)介 ?? 個(gè)人主頁(yè): 前端雜貨鋪 ???♂? 學(xué)習(xí)方向: 主攻前端方向,正逐漸往全干發(fā)展 ?? 個(gè)人狀態(tài): 研發(fā)工程師,現(xiàn)效力于中國(guó)工業(yè)軟件事業(yè) ?? 人生格言: 積跬步至千里,積小流成江海 ?? 推薦學(xué)習(xí):??前端面試寶典 ??Vue2 ??Vue3 ??Vue2/3項(xiàng)目實(shí)戰(zhàn) ??Node.js??

    2024年02月11日
    瀏覽(30)
  • 【前端知識(shí)】JavaScript——設(shè)計(jì)模式(工廠模式、構(gòu)造函數(shù)模式、原型模式)

    工廠模式是一種眾所周知的設(shè)計(jì)模式,廣泛應(yīng)用于軟件工程領(lǐng)域,用于抽象創(chuàng)建特定對(duì)象的過(guò)程。 優(yōu)點(diǎn):可以解決創(chuàng)建多個(gè)類(lèi)似對(duì)象的問(wèn)題 缺點(diǎn):沒(méi)有解決對(duì)象標(biāo)識(shí)問(wèn)題(即新創(chuàng)建的對(duì)象是什么類(lèi)型) 示例: 構(gòu)造函數(shù)模式與工廠模式相比,沒(méi)有顯式地創(chuàng)建對(duì)象,其屬性和方

    2024年02月15日
    瀏覽(54)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包