【picoCTF – Write Up】 caas(Medium – Web Exploitation)

picoCTF caasのアイキャッチ

このページにはプロモーションが含まれています

目次
プログラミング言語の人気オンラインコース

問題情報

  • タイトル:caas
  • カテゴリ:Web
  • 難易度:Medium
  • 使用ツール:ブラウザ

問題文

caasの問題文の画像

問題文の和訳

牛語(cowsay)をサービスとして提供します

ヒント:なし

DeepL.com(無料版)で翻訳しました。

アプローチ(解法の流れ)

1. 動作を確認する

リンクからアクセスしました。

Cowsay as a Serviceの画像

ブラウザから上記のURLにアクセスしてみると、

牛のアスキーアートの画像


牛のアスキーアートが現れました。
jsファイルをダウンロードして内容を確認します。

const express = require('express');
const app = express();
const { exec } = require('child_process');

app.use(express.static('public'));

app.get('/cowsay/:message', (req, res) => {
  exec(`/usr/games/cowsay ${req.params.message}`, {timeout: 5000}, (error, stdout) => {
    if (error) return res.status(500).end();
    res.type('txt').send(stdout).end();
  });
});

app.listen(3000, () => {
  console.log('listening');
});

Express を使って、Webサーバ(ポート3000)を起動する
public フォルダ内のファイルを 静的ファイル として配信する
/cowsay/:message にアクセスすると
URLの :message 部分を取り出し
Linuxコマンド cowsay にその文字列を渡して実行する
cowsayの出力結果を テキストとしてそのまま返す

URLで渡した文字列を使って cowsay コマンドを実行し、その結果を表示するWebアプリのようです。

2. 試したこと

URLを変えてみる。
/cowsay/aaa

牛のアスキーアートの画像

URLを変えてみる。
/cowsay/~

牛のアスキーアートの画像

ホームディレクトリが表示できた!
コマンドインジェクションを試せるかもしれない。

URLを変えてみる。
/cowsay/aaa;ls

lsコマンド実行結果の画像

ファイル一覧にフラグファイルらしきものが見えた。
ただし、ファイル名がflag.txtではなくfalg.txtであることに注意する。

3. FLAGをゲット!

URLを変えてみる。
/cowsay/aaa;cat falg.txt

flagの画像

フラグが見えた!

学んだこと

ユーザー入力をそのまま exec() に渡すと、コマンドインジェクションが発生する

~/home/node に展開されたことから、**シェルが介在している(チルダ展開)**と分かった

; を使うことで、元のコマンドとは別のコマンドを連続して実行できる

コマンドインジェクションでは、ls でファイル構成を確認し、cat でフラグを読むという基本的な探索手順が有効

フラグ名が flag.txt とは限らず、ファイル名の typo(falg.txt)にも注意が必要

一見シンプルなサービスでも、外部コマンド実行がある場合は重大な脆弱性につながることを学んだ

はなまる

お読みいただきありがとうございました!

よかったらシェアしてください!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

セキュリティを中心に学習・実践しています。
CTFのWrite Upや検証記録を発信中。
[保有資格:ITパスポート、基本情報技術者、応用情報技術者]

コメント

コメントする

CAPTCHA


目次