0x0前言:
带来一首小歌:
之前看了小迪老师讲的课,仔细做了些笔记
然后打算将其写成一个脚本。
0x01准备:
requests模块
socket模块
optparser模块
time模块
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()
脚本运行: