+
 新版
2017-01-16 14:12
GNU/Linux命令确实很强大,如果能配上可视化操作,对普通用户会更友好.
比如我们可以在mysql-client这种命令行终端里管理MySQL,
也可以在phpMyAdmin这种基于浏览器的可视化环境里管理MySQL.
我们在phpMyAdmin里的每一个可视化操作,
phpMyAdmin都会在下方显示出操作对应的SQL语句,
我们暂且称之为"SQL操作回显".
同理,我们同样可以用PHP开发一个基于浏览器的phpLinuxAdmin来管理Linux和使用其上的命令.
相比"SQL操作回显",实现"shell回显",也就是在可视化操作后,把PHP调用的"命令和参数"显示出来.
SQL我们要防御SQL注入,shell我们也有防御shell注入.
shell参数转义可以用escapeshellarg,命令转义可以用escapeshellcmd,exec可以接收命令的输出和返回值.
下面以列出/root目录下的内容为例(需要传递sudo用户密码):
<?php
header('Content-Type: text/plain; charset=utf-8');
// php -S 127.0.0.1:8080 -t ./
// http://127.0.0.1:8080/index.php?arg=/root&pass=xxx
$cmd = 'echo '.escapeshellarg($_GET['pass']).' | sudo -S ls -lha '.escapeshellarg($_GET['arg']);
exec($cmd, $output, $return_var); //output是数组
if($return_var === 0) var_export($output);
else echo 'fail';
为了方便测试,用HTTP+GET方式传递密码,真实环境应该用HTTPS+POST方式.
因为浏览器历史记录和服务器日志都会记录GET请求.
Linux上的sudo和gksu,相当于Windows上"以管理员身份运行".
sudo --help 可见 -S, --stdin 表示从标准输入读取密码,所以编程时可以这样传递密码:
echo mypassword | sudo -S command
phpLinuxAdmin,你准备好了么?
2017-01-16 13:16
很普通的命令,有啥B可以装的。
2017-01-16 10:49

引用来自“Skiychan”的评论

排版乱七八糟,内容穿插。
```
接着,在第二个终端窗口中运行以下命令,之后,你就可以在第一个终端窗口中观察日志文件内容:
$ sudo mkdir -p /etc/test$ sudo rm -rf /etc/test
```
我就说这 rm -rf 和上面的有什么关系?
会在/var/log/auth.log中记录这两句的操作,你自己试试就知道了,rm -rf 只是随便一个例子而已。
2017-01-16 10:39

引用来自“月影南溪”的评论

“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
图片已处理好,文章稿源为 Linux 中国,已在文末标明,并附有原文链接。
2017-01-16 09:37
这特么坑,小编都不审核一下???微信图片都打不开
2017-01-16 09:04
“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
2017-01-16 08:37
无图无真相
2017-01-16 08:26
第一句话就很扯。
回复 @
{{emojiItem.symbol}}
返回顶部
顶部