打造自己的弱口令掃描工具
本文轉(zhuǎn)載自微信公眾號(hào)「 Bypass」,作者 Bypass。轉(zhuǎn)載本文請(qǐng)聯(lián)系 Bypass公眾號(hào)。
在內(nèi)網(wǎng)檢測(cè)中,弱口令掃描是必不可少的環(huán)節(jié),選擇一個(gè)好用的弱口令掃描工具,尤為重要。
我曾寫過(guò)一款弱口令檢測(cè)工具,經(jīng)常有童鞋在后臺(tái)詢問(wèn)關(guān)于iscan源代碼的事情,但其實(shí)通過(guò)Python打造自己的弱口令掃描工具是一件非常簡(jiǎn)單的事情,無(wú)非就是將多個(gè)Python掃描腳本集成在一起。
今天,分享一些常見的端口服務(wù)掃描腳本,可根據(jù)自己的需求來(lái)改寫腳本,打造一款屬于自己的弱口令檢測(cè)工具,然后在實(shí)戰(zhàn)中應(yīng)用,不是挺有意思的嗎。
1、RDP 掃描模塊
RDP協(xié)議相對(duì)復(fù)雜,想要使用Python實(shí)現(xiàn)RDP暴力破解,一直沒找到比較簡(jiǎn)單實(shí)現(xiàn)的方式。后來(lái),我在impacket 示例文件下找到了rdp_check.py,這個(gè)腳本可用于測(cè)試目標(biāo)主機(jī)上的帳戶是否有效。那么,通過(guò)它來(lái)改寫Pyhton掃描腳本,就變得很簡(jiǎn)單。
demo代碼有點(diǎn)長(zhǎng),這里就不貼了,演示截圖如下:
具體參考代碼:
- https://github.com/SecureAuthCorp/impacket/blob/master/examples/rdp_check.py
2、SMB 掃描模塊
用于檢測(cè)共享文件夾和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 掃描模塊
用于檢測(cè)FTP匿名訪問(wèn)和弱口令。
- 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 掃描模塊
用于檢測(cè)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 登錄驗(yàn)證過(guò)程,用于telnet弱口令的檢測(cè)。
- 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 掃描模塊
用于檢測(cè)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 掃描模塊
用于檢測(cè)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 模塊
用于檢測(cè)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請(qǐng)求,檢測(cè)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請(qǐng)求,檢測(cè)tomcat控制臺(tái)弱口令。
- import requests
- 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