安全测试手法之渗透测试网站信息讲解
上一节讲到渗透测试中的代码审计讲解,对整个代码的函数分析以及危险语句的避让操作,近期很多客户找我们Sine安全想要了解如何获取到网站的具体信息,以及我们整个渗透工作的流程,因为这些操作都是通过实战累计下来的竟然,渗透测试是对网站检查安全性以及稳定性的一个预防针,前提是必须要有客户的授权才能做这些操作!
2.2. 站点信息
- 判断网站操作系统
- Linux大小写敏感
- Windows大小写不敏感
- 描敏感文件
- robots.txt
- crossdomain.xml
- sitemap.xml
- xx.tar.gz
- xx.bak
- 等
- 确定网站采用的语言
- 如PHP / Java / Python等
- 找后缀,比如php/asp/jsp
- 前端框架
- 如jQuery / BootStrap / Vue / React / Angular等
- 查看源代码
- 中间服务器
- 如 Apache / Nginx / IIS 等
- 查看header中的信息
- 根据报错信息判断
- 根据默认页面判断
- Web容器服务器
- 如Tomcat / Jboss / Weblogic等
- 后端框架
- 根据Cookie判断
- 根据CSS / 图片等资源的hash值判断
- 根据URL路由判断(如wp-admin)
- 根据网页中的关键字判断
- 根据响应头中的X-Powered-By
- CDN信息
- 常见的有Cloudflare、yunjiasu
- 探测有没有WAF,如果有,什么类型的
- 有WAF,找绕过方式
- 没有,进入下一步
- 扫描敏感目录,看是否存在信息泄漏
- 扫描之前先自己尝试几个的url,人为看看反应
- 使用爬虫爬取网站信息
- 拿到一定信息后,通过拿到的目录名称,文件名称及文件扩展名了解网站开发人员的命名思路,确定其命名规则,推测出更多的目录及文件名
2.3. 端口信息
2.3.1. 常见端口及其脆弱点
- FTP 21
- 默认用户名密码 anonymous:anonymous
- 暴力破解密码
- VSFTP某版本后门
- SSH 22
- 暴力破解密码
- Telent 23
- 暴力破解密码
- SMTP 25
- 无认证时可伪造发件人
- DNS 53 UDP
- 测试域传送漏洞
- SPF / DMARC Check
- DDoS(DNS Query Flood / DNS 反弹)
- SMB 137/139/445
- 未授权访问
- 弱口令
- SNMP 161
- Public 弱口令
- LDAP 389
- 匿名访问
- 注入
- Rsync 873
- 任意文件读写
- RPC 1025
- NFS匿名访问
- MSSQL 1433
- 弱密码
- Java RMI 1099
- RCE
- Oracle 1521
- 弱密码
- NFS 2049
- 权限设置不当
- ZooKeeper 2181
- 无身份认证
- MySQL 3306
- 弱密码
- RDP 3389
- 弱密码
- Postgres 5432
- 弱密码
- CouchDB 5984
- 未授权访问
- Redis 6379
- 无密码或弱密码
- Elasticsearch 9200
- 代码执行
- Memcached 11211
- 未授权访问
- MongoDB 27017
- 无密码或弱密码
- Hadoop 50070
除了以上列出的可能出现的问题,暴露在公网上的服务若不是最新版,都可能存在已经公开的漏洞
2.3.2. 常见端口扫描方式
2.3.2.1. 全扫描
扫描主机尝试使用三次握手与目标主机的某个端口建立正规的连接,若成功建立连接,则端口处于开放状态,反之处于关闭状态。 全扫描实现简单,且以较低的权限就可以进行该操作。但是在流量日志中会有大量明显的记录。
2.3.2.2. 半扫描
在半扫描中,仅发送SYN数据段,如果应答为RST,则端口处于关闭状态,若应答为SYN/ACK,则端口处于监听状态。不过这种方式需要较高的权限,而且部分防火墙已经开始对这种扫描方式做处理。
2.3.2.3. FIN扫描
FIN扫描是向目标发送一个FIN数据包,如果是开放的端口,会返回RST数据包,关闭的端口则不会返回数据包,可以通过这种方式来判断端口是否打开。 这种方式并不在TCP三次握手的状态中,所以不会被记录,相对SYN扫描要更隐蔽一些。
2.3.3. Web服务
- Jenkins
- 未授权访问
- Gitlab
- 对应版本CVE
- Zabbix
- 权限设置不当
2.3.4. 批量搜索
- Censys
- Shodan
- ZoomEye
2.4. 搜索信息收集
2.4.1. 搜索引擎利用
恰当地使用搜索引擎(Google/Bing/Yahoo/Baidu等)可以获取目标站点的较多信息。
常见的搜索技巧有:
- site:域名
- 返回此目标站点被搜索引擎抓取收录的所有内容
- site:域名 keyword
- 返回此目标站点被搜索引擎抓取收录的包含此关键词的所有页面
- 此处可以将关键词设定为网站后台,管理后台,密码修改,密码找回等
- site:域名 inurl:admin.php
- 返回目标站点的地址中包含admin.php的所有页面,可以使用admin.php/manage.php或者其他关键词来寻找关键功能页面
- link:域名
- 返回所有包含目标站点链接的页面,其中包括其开发人员的个人博客,开发日志,或者开放这个站点的第三方公司,合作伙伴等
- related:域名
- 返回所有与目标站点”相似”的页面,可能会包含一些通用程序的信息等
- intitle:”500 Internal Server Error” “server at”
- 搜索出错的页面
- inurl:”nph-proxy.cgi” “Start browsing”
- 查找代理服务器
除了以上的关键字,还有allintile、allinurl、allintext、inanchor、cache等。
还有一些其他的tips
- 查询不区分大小写
- * 代表某一个单词
- 默认用and
- OR 或者 | 代表逻辑或
- 单词前跟+表强制查询
- 引号引起来可以防止常见词被忽略
- 括号会被忽略
搜索引擎的快照中也常包含一些关键信息,如程序报错信息可以会泄漏网站具体路径,或者一些快照中会保存一些测试用的测试信息,比如说某个网站在开发了后台功能模块的时候,还没给所有页面增加权限鉴别,此时被搜索引擎抓取了快照,即使后来网站增加了权限鉴别,但搜索引擎的快照中仍会保留这些信息。
另外也有专门的站点快照提供快照功能,如 Wayback Machine 和 Archive.org 等。
2.5. 目标人员信息收集
针对人员的信息收集考虑对目标重要人员、组织架构、社会关系的收集和分析。其中重要人员主要指高管、系统管理员、运维、财务、人事、业务人员的个人电脑。
最容易的入口点是网站,网站中可能包含网站的开发、管理维护等人员的信息。从网站联系功能中和代码的注释信息中都可能得到的所有开发及维护人员的姓名和邮件地址及其他联系方式。
在获取这些信息后,可以在Github/Linkedin等网站中进一步查找这些人在互联网上发布的与目标站点有关的一切信息,分析并发现有用的信息。 如有对此需求渗透测试服务检查网站漏洞可以联系专业的网站安全公司来处理解决,国内推荐Sinesafe,绿盟,启明星辰。
此外,可以对获取到的邮箱进行密码爆破的操作,获取对应的密码。