もどる TOP

[PHP] サーバー上で任意のコマンドを実行して結果を出力する

 このサイト、レンタルサーバー (ミニバード改めスターサーバー) に乗っかっているんだけど、とあるコマンドが使えるかどうかを調べたかった。でもそのコマンドはレンタルサーバーのサイトには書いてないし、SSHで接続もできないし……。

 しかしPHPからコマンドを実行できることを思い出したので、無理やりペコペコ叩いてみた。

試しにphp --versionを実行してみたところ
試しにphp --versionを実行してみたところ
任意のコマンドを実行するPHP
<?php
	$output = '';
	if (isset($_POST['cmd']) && $_POST['cmd'] != '') {
		ob_start();
		passthru($_POST['cmd']);
		$output = ob_get_clean();
	}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8" />
	<title></title>
</head>
<body>
	<form action="" method="POST">
		cmd: <input style="width:30em;" type="text" name="cmd" /><input type="submit" value="exec" />
	</form>
	<pre>
<?php echo htmlspecialchars($output); ?>
	</pre>
</body>

 上記のコードを書いた.phpファイルを作成してサーバーにアップロードして、入力欄にコマンド入力してボタンを押すと、PHPのpassthru()で実行した結果が下部に出力される。

 PHPには外部プログラムを実行できる関数っていくつかあるけど、passthru()exec()system()と違って、結果を変形しないでそのまま出してくれるみたい。でも戻り値じゃなくて標準出力に吐いてしまうので、ob_get_clean()で回収している。

 でもサーバー側の設定でコマンド実行系の関数を使えないようにされてたら、この方法はムリです。っていうか、できたとしても、あんまり変なことしないように。存在しそうなファイル見ちゃうとか。

サイドバーを表示する
ブログ
ShortCircuit
ShortCircuit
花火大会
天使
去る512時間前、キリウ君は折れてない千歳飴を渡してきて、ぼくが折るよう仕向けた。1024時間前、彼はこの世のものではないハッシュアルゴリズムでひとりブロックチェーンを始めていた。