はじめに
この記事で紹介する内容は OSコマンドインジェクション につながるため、あくまでも検証目的です。
きっかけ
Azure Functions Linux Consumption Plan(従量課金プラン) では Kuduによる、WebSSH(アプリケーションコンテナへの接続) や Bash 接続(Kudu への接続)が利用できません。
そのため、アプリケーションが動作する環境の詳細を手軽に確認することができません。
そこで、アプリケーションコード内からコマンドを実行することで実行環境の情報を探ってみます。
コード例
index.js
const util = require("util");
const {exec} = require("child_process");
const execAsync = util.promisify(exec);
module.exports = async function (context, req) {
const cmd = req.query.cmd || "date"
const output = {
cmd,
}
context.log(`${cmd}`)
try {
const result = await execAsync(`${cmd}`);
output.stdout = result.stdout;
context.log(output.stdout)
} catch (e){
output.error = e
context.log(e.stderr)
}
if (req.query.type === 'json') {
context.res = {
body: output
};
} else {
context.res = {
body: `${output.cmd}
${output.error ? output.error.stderr : output.stdout}`
};
}
}
実行例
- echo とか
- df -h
- cat
- ps
いろんなことがわかりますね。やったぜ。





