渗透工程之信息收集
渗透工程之信息收集
信息收集分类
信息根据收集方式的不同,将信息收集分为两类:主动收集和被动收集。
主动收集:是指通过扫描确认目标的操作系统和网络服务,为后续发现漏洞提供信息帮助,但它可能引起目标的注意,或被记录下扫描行为。一些服务指纹检测、网站爬虫都是主动收集的方式,它们直接向目标发起请求,在有防火墙的情况下,可能会被拦截告警。
被动收集:是指在不接触目标的情况下,通过互联网搜索来收集目标遗留在网络中的信息。这样可以避免引起目标的注意。网上很多人说的公开来源情报(Open-Source Intelligence,OSINT,简称“开源情报”)正是需要被动收集的信息,它是从公共资源中收集到的。
信息收集内容
服务器相关信息(ip、系统类型、版本、端口、部署的网站等)
网站架构(网站类型、中间件、数据库、应用框架、网站banner、编程语言、蜜罐、waf等)
网站指纹(cms、cdn、证书、dns记录)
whois信息(姓名、备案、邮箱、电话)
子域名收集、旁站、c段
扫网站目录结构、爆破后台、测试文件、备份
源码信息、传输协议
信息收集的方法
思路:查询企业的信息,可以通过whois查询,查备案信息、企业的产权信息、注册的域名信息、使用微信公众号搜索
对于子域名的收集,可以使用DNS查询、证书查询、网络空间、威胁情报、枚举爆破的形式来搜集子域名
程序源码的收集
开源产品:
利用指纹识别找到cms,然后去官网进行下载
闭源产品:
1、码云资源进行收集
常用平台有:github、gitee、oschina
根据信息进行搜索:QQ号、邮箱地址、作者名、注释关键信息等
根据特征文件进行搜索:js文件名、脚本文件名
2、git 源码泄露
Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
漏洞利用工具:GitHack
github项目地址:https://github.com/lijiejie/GitHack
用法示例:
GitHack.py http://www.openssl.org/.git/
3、SVN 源码泄露
SVN是一个开放源代码的版本控制系统。在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。网站管理员在发布代码时,没有使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
漏洞利用工具:Seay SVN漏洞利用工具
4、hg源码泄漏
Mercurial 是一种轻量级分布式版本控制系统,使用 hg init的时候会生成.hg。
漏洞利用工具:dvcs-ripper
github项目地址:https://github.com/kost/dvcs-ripper
用法示例:
rip-hg.pl -v -u http://www.example.com/.hg/
5、CVS泄露
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。
http://url/CVS/Root 返回根信息
http://url/CVS/Entries 返回所有文件的结构
漏洞利用工具:dvcs-ripper
github项目地址:https://github.com/kost/dvcs-ripper.git
运行示例:
rip-cvs.pl -v -u http://www.example.com/CVS/
6、Bazaar/bzr泄露
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。
运行示例:
rip-bzr.pl -v -u http://www.example.com/.bzr/
7、网站备份压缩文件
管理员将网站源代码备份在Web目录下,攻击者通过猜解文件路径,下载备份文件,导致源代码泄露。
常见的备份文件后缀:rar、zip、7z、tar.gz、bak、txt、old、temp
漏洞利用工具:御剑
8、WEB-INF/web.xml 泄露
WEB-INF是Java的WEB应用的安全目录,如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
WEB-INF 主要包含一下文件或目录:
WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.
WEB-INF/database.properties : 数据库配置文件
WEB-INF/classes/ : 一般用来存放Java类文件(.class)
WEB-INF/lib/ : 用来存放打包好的库(.jar)
WEB-INF/src/ : 用来放源代码(.asp和.php等)
通过找到 web.xml 文件,推断 class 文件的路径,最后直接 class 文件,再通过反编译 class 文件,得到网站源码。
8、DS_Store 文件泄露
.DS_Store是Mac下Finder用来保存如何展示 文件/文件夹 的数据文件,每个文件夹下对应一个。如果将.DS_Store上传部署到服务器,可能造成文件目录结构泄漏,特别是备份文件、源代码文件。
漏洞利用工具:
github项目地址:https://github.com/lijiejie/ds_store_exp
用法示例:
ds_store_exp.py http://hd.zj.qq.com/themes/galaxyw/.DS_Store
9、SWP 文件泄露
swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。
漏洞利用:直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件。
JS信息泄露
什么是JS渗透测试?
在Javascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞JS开发的WEB应用和PHP,JAVA,NET等区别在于即没有源代码,也可以通过浏览器的查看源代码获取真实的点。获取URL,获取JS敏感信息,获取代码传参等,所以相当于JS开发的WEB应用属于白盒测试(默认有源码参考),一般会在JS中寻找更多的URL地址,在JS代码逻辑(加密算法,APIkey配置,验证逻辑等)进行后期安全测试。
后端语言:php java python .NET 浏览器端看不到真实的源代码
前端语言:JavaScript(JS)和JS框架 浏览器端看到真实的源代码
常用的js框架:
Vue、Node.js、Jquery、Angular等
使用js所产生的安全问题:
- 源码泄漏
- 未授权访问=JS里面分析更多的URL访问确定接口路径
- 敏感key泄漏=JS文件中可能配置了接口信息(云应用,短信,邮件,数据库等)
- API接口安全=(代码中加密提交参数传递,更多的URL路径)
识别方式:
- 插件wappalyzer
- 源程序代码筒短
- 引入多个js文件
- 一般有/static/is/app.js等顺序的js文件
- 一般cookie中有connect.sid
测试方法:
1.人工审查:
审查元素筛选JS文件,可以根据关键字进行全局搜索,主要集中跳转等接口地方。例如:
- src=
- path=
- method:”get”
- http.get(“
- method:”post”
- http.post(“
- $.ajax
- http://service.httppost
- http://service.httpget
2.使用BurpSuite进行半自动审查:
- 自带功能:Target->sitemap->Engagement tools->Find scripts
- 官方插件:JS Miner、JS Link Finder
- 第三方插件:HaE、Unexpected_information
- 插件加载器:jython-standalone-2.7.2
3.全自动工具审查:
- 表现JS中提取信息:Jsfinder、URLFinder、JSINFO-SCAN、 FindSomething
- FUZZ爆破更多JS: ffuf
- JS打包器Webpack:Packer-Fuzzer
端口:
端口扫描工具:
nmap、Masscan、网络空间、御剑、zmap
为什么明明开了无法通信:防火墙、内网
常用端口及攻击方法:
| 端口 | 服务 | 渗透用途 |
|---|---|---|
| tcp 20,21 | FTP | 允许匿名的上传下载,爆破,嗅探,win提权,远程执行(proftpd 1.3.5),各类后门(proftpd,vsftp 2.3.4) |
| tcp 22 | SSH | 可根据已搜集到的信息尝试爆破,v1版本可中间人,ssh隧道及内网代理转发,文件传输等等 |
| tcp 23 | Telnet | 爆破,嗅探,一般常用于路由,交换登陆,可尝试弱口令 |
| tcp 25 | SMTP | 邮件伪造,vrfy/expn查询邮件用户信息,可使用smtp-user-enum工具来自动跑 |
| tcp/udp 53 | DNS | 允许区域传送,dns劫持,缓存投毒,欺骗以及各种基于dns隧道的远控 |
| tcp/udp 69 | TFTP | 尝试下载目标及其的各类重要配置文件 |
| tcp 80-89,443,8440-8450,8080-8089 | 各种常用的Web服务端口 | 可尝试经典的topn,vpn,owa,webmail,目标oa,各类Java控制台,各类服务器Web管理面板,各类Web中间件漏洞利用,各类Web框架漏洞利用等等…… |
| tcp 110 | POP3 | 可尝试爆破,嗅探 |
| tcp 111,2049 | NFS | 权限配置不当 |
| tcp 137,139,445 | Samba | 可尝试爆破以及smb自身的各种远程执行类漏洞利用,如,ms08-067,ms17-010,嗅探等…… |
| tcp 143 | IMAP | 可尝试爆破 |
| udp 161 | SNMP | 爆破默认团队字符串,搜集目标内网信息 |
| tcp 389 | LDAP | ldap注入,允许匿名访问,弱口令 |
| tcp 512,513,514 | Linux rexec | 可爆破,rlogin登陆 |
| tcp 873 | Rsync | 匿名访问,文件上传 |
| tcp 1194 | OpenVPN | 想办法钓VPN账号,进内网 |
| tcp 1352 | Lotus | 弱口令,信息泄漏,爆破 |
| tcp 1433 | SQL Server | 注入,提权,sa弱口令,爆破 |
| tcp 1521 | Oracle | tns爆破,注入,弹shell… |
| tcp 1500 | ISPmanager | 弱口令 |
| tcp 1723 | PPTP | 爆破,想办法钓VPN账号,进内网 |
| tcp 2082,2083 | cPanel | 弱口令 |
| tcp 2181 | ZooKeeper | 未授权访问 |
| tcp 2601,2604 | Zebra | 默认密码zerbra |
| tcp 3128 | Squid | 弱口令 |
| tcp 3312,3311 | kangle | 弱口令 |
| tcp 3306 | MySQL | 注入,提权,爆破 |
| tcp 3389 | Windows rdp | shift后门[需要03以下的系统],爆破,ms12-020 |
| tcp 3690 | SVN | svn泄露,未授权访问 |
| tcp 4848 | GlassFish | 弱口令 |
| tcp 5000 | Sybase/DB2 | 爆破,注入 |
| tcp 5432 | PostgreSQL | 爆破,注入,弱口令 |
| tcp 5900,5901,5902 | VNC | 弱口令爆破 |
| tcp 5984 | CouchDB | 未授权导致的任意指令执行 |
| tcp 6379 | Redis | 可尝试未授权访问,弱口令爆破 |
| tcp 7001,7002 | WebLogic | Java反序列化,弱口令 |
| tcp 7778 | Kloxo | 主机面板登录 |
| tcp 8000 | Ajenti | 弱口令 |
| tcp 8009 | tomcat Ajp | Tomcat-Ajp协议漏洞 |
| tcp 8443 | Plesk | 弱口令 |
| tcp 8069 | Zabbix | 远程执行,SQL注入 |
| tcp 8080-8089 | Jenkins,JBoss | 反序列化,控制台弱口令 |
| tcp 9080-9081,9090 | WebSphere | Java反序列化/弱口令 |
| tcp 9200,9300 | ElasticSearch | 远程执行 |
| tcp 11211 | Memcached | 未授权访问 |
| tcp 27017,27018 | MongoDB | 爆破,未授权访问 |
| tcp 50070,50030 | Hadoop | 默认端口未授权访问 |
WAF
waf解释:
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
waf分类:
云WAF:百度安全宝、阿里云盾、长亭雷池,华为云,亚马逊云等
硬件WAF:绿盟、安恒、深信服、知道创宇等公司商业产品
软件WAF:宝塔,安全狗、D盾等
代码级WAF:自己写的waf规则,防止出现注入等,一般是在代码里面写死的
waf识别:
拦截页面,identywaf项目内置,网络空间 ,工具识别(identywaf、wafwoof)
蜜罐
蜜罐解释:
蜜罐是一种安全威胁的检测技术,其本质在于引诱和欺骗攻击者,并且通过记录攻击者的攻击日志来产生价值。安全研究人员可以通过分析蜜罐的被攻击记录推测攻击者的意图和手段等信息。攻击方可以通过蜜罐识别技术来发现和规避蜜罐。因此我们有必要站在红队攻击者的角度钻研蜜罐识别的方式方法。
蜜罐分类:
根据蜜罐与攻击者之间进行的交互的程度可以将蜜罐分为三类:低交互蜜罐、中交互蜜罐、高交互蜜罐。当然还可以根据蜜罐模拟的目标进行分类,比如:数据库密罐、工控蜜罐、物联网蜜罐、web 蜜罐等等
蜜罐产品:
| 蜜罐 | Quake系统搜索语法 |
|---|---|
| STRUTSHONEYPOT | app:”StrutsHoneypot” |
| CONPOT HTTP 蜜罐 | app:”Conpot Http 蜜罐” |
| CONPOT MODBUS 蜜罐 | app:”Conpot modbus 蜜罐” |
| CONPOT S7 蜜罐 | app:”Conpot s7 蜜罐” |
| KIPPO 蜜罐 | app:”kippo 蜜罐” |
| HONEYPY HTTP 蜜罐 | app:”Honeypy Http 蜜罐” |
| HONEYPY ES蜜罐 | app:”Honeypy ES蜜罐” |
| AMUN IMAP 蜜罐 | app:”amun imap 蜜罐” |
| AMUN HTTP蜜罐 | app:”amun http蜜罐” |
| NEPENTHES NETBIOS蜜罐 | app:”Nepenthes netbios蜜罐” |
| NEPENTHES FTP 蜜罐 | app:”Nepenthes FTP 蜜罐” |
| SSHESAME SSH 蜜罐 | app:”sshesame ssh 蜜罐” |
| OPENCANARY蜜罐管理后台 | app:”opencanary蜜罐管理后台” |
| DIONAEA SIPD 蜜罐 | app:”Dionaea sipd 蜜罐” |
| DIONAEA SMBD 蜜罐 | app:”Dionaea smbd 蜜罐” |
| DIONAEA HTTP 蜜罐 | app:”Dionaea Http 蜜罐” |
| DIONAEA MSSQL 蜜罐 | app:”Dionaea MSSQL 蜜罐” |
| DIONAEA FTP 蜜罐 | app:”Dionaea ftp 蜜罐” |
| DIONAEA MEMCACHED 蜜罐 | app:”Dionaea Memcached 蜜罐” |
| KOJONEY SSH 蜜罐 | app:”Kojoney SSH 蜜罐” |
| WEBLOGIC蜜罐 | app:”weblogic蜜罐” |
| MYSQL蜜罐 | app:”MySQL蜜罐” |
| HFISH蜜罐 | app:”HFish蜜罐” |
| HFISH蜜罐管理后台 | app:”HFish蜜罐管理后台” |
| HONEYTHING物联网蜜罐 | app:”honeything物联网蜜罐” |
| ELASTICSEARCH蜜罐 | app:”elasticsearch蜜罐” |
| HOSTUS蜜罐 | app:”HostUS蜜罐” |
| WHOISSCANME蜜罐 | app:”whoisscanme蜜罐” |
| COWRIE TELNETD蜜罐 | app:”Cowrie telnetd蜜罐” |
| GLASTOPF蜜罐 | app:”glastopf蜜罐” |
识别原理:
https://zhuanlan.zhihu.com/p/526843143
识别方式:
工具识别:heimdallr(误报率有点高)、quake_rs、网络空间
人工识别:
- 端口多有规律性
- web访问协议就去下载
- 设备指纹对应分析
cdn
什么是cdn
CDN的全程是内容分发网络,用于在请求较远服务器的资源时,在离用户较近的CDN服务器上对资源进行缓存,从而在下次自己和附近他人请求时直接从CDN服务器上获取资源,从而增加访问速度,但对企业来说,CDN服务器的隐藏作用是隐藏本机ip,我们是从CDN服务器上获取的资源,并不是和本机服务器直接交流,所以间接保护了企业的安全性
如何判断是否使用cdn
使用超级ping或者各地ping,检测从全国各地ping同一个网站访问的ip是否相同,如果相同就说明没有使用,如果不同就说明使用了CDN服务。
超级 Ping: http://17ce.com/
超级 Ping: https://ping.chinaz.com/
cdn如何绕过
从子域名入手
在CDN配置时需要将本机域名解析到对应的CDN域名,在配置CDN时也要选择加速的子域名,如果我们只将主域名解析到了对应的CDN域名上,就会导致子域名未进行CDN加速,从而通过访问子域名来获得其真实IP。
历史的dns记录
在开通CDN服务之前解析域名时会在DNS服务器留下解析记录,可以通过查看此解析记录来查看真实IP
查询方式可以在网络上的查询网站入手
国外请求
如果在配置CDN服务时选择的是仅中国内地,那么通过国外IP对网站进行访问就可以获得其真实地址
有很多网站可以提供该服务,比如ipip
网页漏洞
如果页面中存在phpinfo.php直接访问对应页面即可,该文件中存在本机的ip
本ip是根据网卡给出的,也有可能是内网ip
如果网站中存在ssfr漏洞,我们访问其服务器无法获得ip地址,如果让其访问我们的服务器就可以看见它的地址也
可以获得其真实地址,上述两种方式的原理都是反向连接
备案信息
可以通过查询网站备案信息来获取所在地之类的,会有些许帮助
ddos绕过(不常用)
一般cdn都是按流量付费的,只要ddos把他流量打完,那cdn就没了
MX记录或者邮件
部署架设的邮件服务器如果向外部用户发送邮件的话,那么邮件头部的源码中会包含此邮件服务器的真实 IP 地址。
判断条件:发信人是当前域名邮件用户名,如果使用126、163、QQ这种跟服务器邮箱没有什么关系
让网站给你发:
常见的邮件触发点有:
- RSS 订阅
- 邮箱注册、激活处
- 邮箱找回密码处
- 产品更新的邮件推送
- 某业务执行后发送的邮件通知
- 员工邮箱、邮件管理平台等入口处的忘记密码
你给网站邮箱发:
(需要自己的邮件服务器不能第三方)通过发送邮件给一个不存在的邮箱地址,因为该用户邮箱不存在,所以发送将失败并且还会收到一个包含发送该电子邮件给你的服务器的真实 IP通知。
使用在线工具
比如此网站 就可自动查找真实ip,使用其的内部逻辑帮用户查询,但结果的准确性并非百分百
#某应用-CDN 绕过-全网扫描
1、判断加速厂商
2、IP 库筛地址段
3、配置范围扫描
先从 IP 段去扫描符合开放端口,再从 IP 去访问看看关键字,将符合结果进行保存!
厂商查询:https://tools.ipip.net/cdn.php工具项目:
https://www.cz88.net/geo publichttps://github.com/Tai7sy/fuckcdn
使用本地工具
比如fuckcdn,一款cdn绕过工具
使用方式
在set.ini文件内
将FindUrl配置成目标网站的域名
将FindStr的更改为目标网站首页的关键字(就是网页中出现的字符,用于判断找到的ip是否正确)
在ip.txt中输入可能的ip段(开始ip和结尾ip),该文件通常是根据信息打点中找到的服务商或者备案区域,将服务商
中所有的IP导入,或者将某地区所有的IP导入,然后工具会一个个去跑,判断是否为目标网站
获得ip库可以在一些ip查询网站
然后打开exe文件,输入目标网站ip(cdn)和端口号(一般是80),开始跑就行
超级 Ping: http://www.17ce.com/
超级 Ping: https://ping.chinaz.com/
接口查询:https://getsite-ip.com/
接口查询:https://fofa.info/extensions/source
国外请求:https://tools.ipip.net/cdn.php
国外请求:https://boce.aliyun.com/detect/
IP社区库:https://www.cz88.net/geo public
全网扫描: cdn
框架和组件:
什么是框架和组件:
框架:简单代码的一个整合库,如果使用框架就只需要学习使用框架调用即可
如:文件上传功能是需要很多代码来实现的,框架把这个代码进行封封装,调用即可
影响:如果采用框架开发,代码的安全性是取决于框架的过滤机制
组件:第三方的功能模块(日志记录,数据监控,数据转换等)
常用语言框架组件的识别方式:
| 语言 | 框架 | 识别方式 |
|---|---|---|
| php | Yii | 1.识别插件 2.Set-Cookie 中特征的格式 |
| php | Laravel | 1.识别插件 2.Set-Cookie 中特征的格式 |
| php | Thinkhphp | 1.识别插件 2.X-Powered-By: ThinkPH 3.CMS识别到源码体系TP开发 4.构造报错页面,出现“十年磨一剑”或者Thinkphp 5.看icon图标 6.错误传参 |
| python | Fask | 1.识别插件 2.Set-Cookie:expires= |
| python | Django | 1.识别插件 2.Set-Cookie:expires= |
| java | shiro | 1.查看cookie字段:Cookie的RememberMe字段超长 2.响应包中存在字段 set-Cookie: rememberMe=deleteMe 3.查看请求路径:Shiro使用一套默认的URL路径规则来处理身份验证和授权。通常,Shiro的默认路径规则与标准的Java Web应用程序不同。可以检查网站的URL路径是否包含类似/login、/doLogin、/logout、/unauthorized等Shiro相关的默认路径。 4.查看cookie名:Shiro框架使用Cookie来管理会话。默认情况下,Shiro会在浏览器中设置一个名为JSESSIONID的Cookie来跟踪用户会话。可以通过查看网站的Cookie是否包含名为JSESSIONID的Cookie来判断是否使用了Shiro。 5.查看页面源代码:搜索关键词如Shiro、securityManager、IniRealm等 |
| java | spring | 1.识别插件 2.看X-Application-Context头 3.构造报错页面 4.看icon图标 |
| java | Fastjson | 1.抓包发送不完整字段:在发送json字段的时候,尝试发送一个不完整的字段,在响应包中看是否会有报错,显示出阿里巴巴fastjson这种字样。 2.查找关键字fastjson:正常请求是 get 请求,没有请求体,可以构造错误的 post 请求,看响应包中是否有 fastjson 关键字。在GET请求包上,右键–>Change request method –>改变为POST包再发送请求 3.会把01解析成1 https://forum.butian.net/share/1679 |
| java | struts2 | 1.通过网页后缀来判断,如 .do .action 2.判断 /struts/webconsole.html 是否存在。要求:需要 devMode 为 true。 3.通过 actionErrors。要求:是对应的 Action 需要继承自 ActionSupport 类。 4.通过不存在的URL路径。在URL的反斜杠部分添加网站不存在的路径,最好是随机字符串组成的较长路径,如果返回同样的页面,在Struts2框架下,完全可以正常返回页面。 5.通过添加/struts/domTT.css。在网站根目录下添加/struts/domTT.css后访问,返回css代码。 |
| java | Jackson | 在解析01时会抛出异常 https://forum.butian.net/share/1679 |
| java | sorl | 一般开放 8983端口,访问页面也可以探针到 |
