在內網檢測中,弱口令掃描是必不可少的環節,選擇一個好用的弱口令掃描工具,尤為重要。
我曾寫過一款弱口令檢測工具,經常有童鞋在后台詢問關於iscan源代碼的事情,但其實通過Python打造自己的弱口令掃描工具是一件非常簡單的事情,無非就是將多個Python掃描腳本集成在一起。
今天,分享一些常見的端口服務掃描腳本,根據自己的需求來改寫腳本,在實戰中應用更切合實際游刃有余。
1、RDP 掃描模塊
RDP協議相對復雜,想要使用Python實現RDP暴力破解,一直沒找到比較簡單實現的方式。后來,我在impacket 示例文件下找到了rdp_check.py,這個腳本可用於測試目標主機上的帳戶是否有效。那么,通過它來改寫Pyhton掃描腳本,就變得很簡單。
demo代碼有點長,這里就不貼了,演示截圖如下:
具體參考代碼:
https://github.com/SecureAuthCorp/impacket/blob/master/examples/rdp_check.py
2、SMB 掃描模塊
用於檢測共享文件夾和smb弱口令。
from impacket import smb def smb_login(ip,port,user,pwd): try: client = smb.SMB('*SMBSERVER',ip) client.login(user,pwd) flag ='[+] IPC$ weak password: '+user,pwd except: print '[-] checking for '+user,pwd+' fail'
3、FTP 掃描模塊
FTP一般分為兩種情況,匿名訪問和弱口令。
import ftplib def ftp_anonymous(ip,port): try: ftp = ftplib.FTP() ftp.connect(ip,port,2) ftp.login() ftp.quit() print '[+] FTP login for anonymous' except: print '[-] checking for FTP anonymous fail' def ftp_login(ip,port,user,pwd): try: ftp = ftplib.FTP() ftp.connect(ip,port,2) ftp.login(user,pwd) ftp.quit() print '[+] FTP weak password: '+user,pwd except: print '[-] checking for '+user,pwd+' fail'
4、SSH 掃描模塊
用於檢測SSH弱口令。
import paramiko def ssh_login(ip,port,user,pwd): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,port,user,pwd,timeout=5) print '[+] SSH weak password: '+user,pwd ssh.close() except: print '[-] checking for '+user,pwd+' fail'
5、Telnet 掃描模塊
模擬Telnet 登錄驗證過程,用於telnet弱口令的檢測。
import telnetlib def telnet(ip,port,user,pwd): try: tn = telnetlib.Telnet(ip,timeout=5) tn.set_debuglevel(0) tn.read_until("login: ") tn.write(user + '\r\n') tn.read_until("assword: ") tn.write(pwd + '\r\n') result = tn.read_some() result = result+tn.read_some() if result.find('Login Fail')>0 or result.find('incorrect')>0: print "[-] Checking for "+user,pwd+" fail" else: print "[+] Success login for "+user,pwd tn.close()
6、MySQL 掃描模塊
用於檢測MySQL弱口令。
import MySQLdb def Mysql_login(ip,port,user,pwd): try: db = MySQLdb.connect(host=ip, user=user, passwd=pwd,port=port) print '[+] Mysql weak password: '+user,pwd db.close() except: print '[-] checking for '+user,pwd+' fail'
7、MSsql 掃描模塊
用於檢測MSSQL弱口令。
import pymssql def mssql_login(ip,port,user,pwd): try: db = pymssql.connect(host=ip,user=user,password=pwd,port=port) print '[+] MSsql weak password: '+user,pwd db.close() except: #pass print '[-] checking for '+user,pwd+' fail'
8、MongoDB 模塊
用於檢測MongoDB 匿名登錄和弱口令。
from pymongo import MongoClient def mongodb(ip,port=27017): try: client = MongoClient(ip,port) db=client.local flag = db.collection_names() if flag: print "[+] Mongodb login for anonymous" except Exception, e: pass def mongodb_login(ip,port,user,pwd): try: client = MongoClient(ip,port) db_auth = client.admin flag = db_auth.authenticate(user, pwd) if flag == True: print '[+] Mongodb weak password: '+user,pwd except: print '[-] checking for '+user,pwd+' fail'
9、phpmyadmin 掃描模塊
模擬http請求,檢測phpmyadmin弱口令。
import requests def phpMyAdmin_login(ip,port,user,pwd): try: url = "http://"+ip+":"+str(port)+"/phpmyadmin/index.php" data={'pma_username':user,'pma_password':pwd} response = requests.post(url,data=data,timeout=5) result=response.content if result.find('name="login_form"')==-1: print '[+] find phpMyAdmin weak password in:'+url print '[+] find phpMyAdmin weak password:'+user,pwd else: print '[-] Checking for '+user,pwd+" fail" time.sleep(2) except: print '[-] Something Error'+user,pwd+" fail"
10、Tomcat 掃描模塊
模擬http請求,檢測tomcat控制台弱口令。
def tomcat_login(ip,port,user,pwd): try: url = "http://"+ip+":"+str(port)+"/manager/html" user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" Authorization = "Basic %s" % (base64.b64encode(user+':'+pwd)) header = { 'User-Agent' : user_agent , 'Authorization':Authorization} request = urllib2.Request(url,headers=header) response = urllib2.urlopen(request,timeout=5) result=response.read() if response.code ==200: print '[Success] ' + url+' '+user+':'+pwd except: print '[Login failed]' + url+' '+user+':'+pwd