0x0前言:python
帶來一首小歌:數據庫
以前看了小迪老師講的課,仔細作了些筆記windows
而後打算將其寫成一個腳本。api
0x01準備:服務器
requests模塊架構
socket模塊oracle
optparser模塊app
time模塊socket
0x02筆記和思路:網站
筆記: 信息收集四大件 6.快速判斷網站系統類型: 改一個網站後綴名文件,看它對大小寫是否敏感 windows:不區分大小寫 Linux:區分大小寫 7.判斷網站語言格式 看後綴 動態語言 疑問:僞靜態該怎麼判斷 8.判斷網站的數據庫類型 端口掃描、 SQL報錯注入 搭建分析 如下3種方法會致使探測數據庫失敗: 知識點: ACCESS:無故口 MYSQL:3306 MSSQL:1433 ORACLE:1521 1.內網服務器 (經過內網穿透將本機的東西眏射出來,就是轉發某個端口(相似於ngrok)) 2.將數據庫默認端口修改了 3.站庫分離(網站源碼和數據庫不在一臺服務器上) 9.判斷網站架構 審查元素(F12)
判斷系統的思路:
隨便找一個網站的目錄而後將其後綴其中一個改成大寫
若是頁面返回和原來同樣的頁面就是windows系統
若是頁面返回和原來的頁面不同就是Linux系統
那咱們也就能夠知道了,返回也面的字節是不同的
咱們就能夠寫一個判斷了
證明:
原來的頁面
更改後綴最後一個字符
結果:返回的頁面不同,是Linux或者Unix
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
判斷數據庫類型思路:這裏我採用端口判斷,若是目標網站改了默認端口或站庫分離是識別不出來的,到時候寫個SQL注入的判斷的腳本。
端口掃描用socket就能實現。
ACCESS:無故口 MYSQL:3306 MSSQL:1433 ORACLE:1521
--------------------------------------------------------------------------------------------------------------------------
判斷服務架構思路:看http響應頭就行
0x03代碼:
import requests import os import socket import time import optparse from bs4 import BeautifulSoup def main(): usage='-x 判斷系統類型' \ '-t 判斷數據庫類型' \ '-g 判斷服務架構' \ '-j 判斷網站語言' parser=optparse.OptionParser(usage) parser.add_option('-x',dest='system',help='判斷系統,判斷原理經過目錄來判斷例:https://www.btime.com/finance') parser.add_option('-t',dest='database',help='判斷數據庫,經過端口來判斷數據庫類型') parser.add_option('-g',dest='headerss',help='判斷架構') parser.add_option('-j',dest='language',help='判斷語言') (options,args)=parser.parse_args() if options.system: system=options.system SYSTEM(system) elif options.database: database=options.database DATABASE(database) elif options.language: language=options.language LANGUAGE(language) elif options.headerss: headerss=options.headerss HEADERSS(headerss) else: parser.print_help() exit() def SYSTEM(system): sc = "{}".format(system) gs = sc[-1].capitalize() sw = sc.strip(sc[-1]) url = sw + gs sg = requests.get(url) print(sg.url) a = requests.get(sc).content b = requests.get(url).content if a != b: print('系統是:Linux') else: print('系統是:windows') def DATABASE(database): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.settimeout(3) s.connect((database,1433)) print('[+]MSSQL數據庫開放') except: print('[-]1433關閉') time.sleep(0.1) try: s.settimeout(3) s.connect((database,1521)) print('[+]oracle數據庫開放') except: print('[-]1521端口關閉') time.sleep(0.1) try: s.settimeout(3) s.connect((database,3306)) print('[+]MYSQL數據庫開放') except: print('[-]3306關閉') def HEADERSS(headerss): url="{}".format(headerss) headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'} r=requests.get(url,headers=headers) print('[+]協議類型:',url[0],url[1],url[2],url[3],'/',r.status_code) print('[+]服務架構:',r.headers['Server']) print('[+]頁面類型',r.headers['Content-Type']) def LANGUAGE(language): url="{}".format(language) headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'} g=requests.get(url,headers=headers) try: print('[+]程序支持',g.headers['X-Powered-By']) except: print('[-]沒有找出該網站的程序支持') if __name__ == '__main__': main()
腳本運行: