渗透测试简单来说是安全人员模拟黑客入侵的方式,评估目标安全防御能力的行为。根据测试人员获取信息的多少,可分为黑盒、白盒、灰盒三种类型。(ING)
简要步骤
-
明确目标。 需要明确渗透测试的范围(IP/域名/内外网)、规则(提权/数据/时间)、需求(Web应用漏洞/业务逻辑漏洞/人员权限管理漏洞等),针对性展开测试
-
信息收集。 主动扫描&搜索。基础信息(域名、子域名、IP、端口、CDN)、应用信息(服务器开启端口对应应用)、版本信息(探测到所有程序系统的版本)、人员信息(法人、管理员、用户)、防护信息(WAF、防火墙等防护设备)
丰富的信息是后续漏洞发现和利用的基础。
-
漏洞探测。 框架组件公开漏洞(验证poc/exp)、传统漏洞(XSS/SQL/SSRF)、口令漏洞、代码业务逻辑漏洞、误配置漏洞等多种方式,通过自动化(AWVS/Nessus/appscan/OpenVAS)工具漏洞扫描或人工代码审计(fortify)实现。
-
漏洞验证。 结合自动化扫描工具的结果进行验证、手工搭建模拟环境验证等方式,确认漏洞的存在、可利用性、可能的危害。
-
发起攻击。 通过Metasploit等自动工具、编写脚本等方式实现。
-
信息获取。 实施攻击后,能够获得怎样的权限或者数据是需要。
实施攻击 -> 获取内部信息 -> 内网渗透 -> 持续性存在 -> 痕迹清理
-
报告生成。 完成渗透测试实践后,还需整理过程中收集到的信息、编写的代码、POC、EXP等,详细分析漏洞成因、验证过程和危害,提出修补建议,生成详尽的渗透测试报告。
信息收集
类型:主动信息收集(主动访问/扫描等)、被动信息收集(google/shodan搜索等)
IP相关
IP获取
通过ping域名(ICMP协议)、nslookup命令、或站长之家支持在线查询的网站获取IP
CDN检测&真实IP获取
CDN(内容分发网络)服务根据地区选择线路提供访问,加速网站访问,隐藏真实IP
- 检测:全球
ping
/nslookup
(站长工作/爱站网)。同一域名不同地区访问IP不同,则很可能使用CDN、ping到了vercel-dns
/nslookup的name字段等有类似域名。 - 绕过:
- 查询子域名。 很多网站只对主站做了CDN加速,子域名没有。子域名与主站很可能在同一服务器/同一C段网络中,通过子域名IP辅助判断主站IP真实性。
- 查询历史DNS记录 。 (dnsdb/viewdns/微步在线等)
- 使用国外主机请求域名。 部分CDN服务商只对国内线路做加速。
- 网站信息泄露漏洞。 (phpinfo页面SERVER_ADDR字段-主机真实IP)
- 邮件信息。 若该站点提供邮件系统(一般在内部),通过邮箱注册/密码找回/RSS订阅等,接收邮件查看源码可以获得真实IP。
- App应用。 有App,通过流量抓包可能会找到真实IP。
- 域名备案信息广域探测。 共用一台服务器的多个网站域名及子域有没做CDN的
旁站/C段查询
- 旁站:同一服务器上的其他网站
- C段:同一内网段内的其他服务器(最后一个三位数不同)
当前服务器-旁站入手。更多资产-C段入手。
站长之家、webscan、nmap等工具
端口扫描
-
nmap - 最最最常用
-sS # TCP SYN扫描 -sT # TCP connect() 扫描 -sU # UDP扫描 -sN # TCP Null -sF # FIN -sX # Xmas扫描 -Pn # 不通过ICMP ping检测 -sP # 通过ping ICMP检测
-
masscan
域名相关
子域名收集
收集子域名可以扩大渗透范围,主站往往防御森严,从子域可以寻找更多突破口
- 搜索引擎查找。
site:baidu.com
(google/shodan/360测绘空间/zoomeye等) - 枚举爆破查找。 如在线子域名查询(站长之家等)、子域名挖掘机、sublist3r、FuzzDomain、SubDomainBrute、subfinder、OneForAll、ksubdomain、wydomain等
- 证书透明性信息。 查询共用SSL/TLS证书证书的网址可以找到其他域名。(crt.sh)
- DNS域传送。
- 递归爬取。 JSINFO-SCAN
- 构造域名。 altdns 基于已获得的子域名,置换探索相似域名
- 信息泄露。 跨域策略文件、站点地图、robots.txt、CSP、邮箱系统、仓库等
存活性探测: WebAliveScan、bscan、httpx、Finger等工具,检验域名是否存活,可能功能
站点相关
目录探测
- 站点爬取方式:AWVS-Site Crawler、Burp Suite-Target-Site map、yuhScan、Dirmap
- 搜索方式:谷歌搜索
site:xxx.com inurl:file intitle:后台
- 爆破方式:御剑、Kali-DirBuster
指纹识别
指纹分类 | 示例 |
---|---|
Web容器 | Apache、IIS、Nginx、Tomcat、Weblogic |
服务端语言 | PHP、Java、.NET、Node.js |
后端框架 | Thinkphp、Struts2 |
CMS应用 | Wordpress、seacms |
前端框架 | Vue、react、angularjs |
前端语言 | Javascript、less |
运营商 | 移动、联通 |
第三方内容 | YouTube、Bilibili |
CDN运营商 | 阿里云、电信 |
WAF | (规则/语义) 安全狗、D盾、宝塔 / 阿里云盾 |
- 框架识别。 Powered by xxx关键语句/前端源码/meta标签、特定文件路径、响应头特定字段信息。(chrome wappalyzer/whatweb/Glass)
- WAF识别。 (wafw00f、identYwaf、SQLMap-identify-waf) 基于WAF拦截页信息、HTTP头部信息 (Gotestwaf 评估WAF效果)
- 服务器信息收集。 服务版本(
nmap -sV -p 1-65535 x.x.x.x
)、操作系统信息(nmap -O x.x.x.x
)
社工相关
whois查询
域名的注册人信息,如联系方式、管理员信息等 ,包括DNS服务器信息
- kali Whois命令/网上的whois工具,可以获得
After
完成渗透测试并生成报告后,安全维护者需要进行漏洞修复和防护升级,如WAF规则新增、更严格的输入验证、DDoS防护等。
漏洞探测
漏洞扫描-自动化
- 文件包含
- 命令执行
- SQL注入
- XSS注入
- 弱口令
- 其他
发起攻击
绕过WAF
-
云WAF防护。 找到网站IP,通过IP访问即可绕过
-
替换关键字。
ununionion selselectect
- WAF采用替换或删除1个select/union关键词 -
绕过空格。 注释
/xxx/、空白符号%20/%0、+
代替空格,WAF替换注释或没有识别注释的情况 & 内联注释(MySQL:/*!
注释内的语句被执行) -
多参数请求拆分。多个参数拼接到同一条SQL语句,分割插入
-
HTTP参数污染。 同一参数多次出现,不同中间件解析为不同结果
color=red&color= blue
为例 -
生僻函数替换。 报错注入里
updatexml()
->polygon()
-
URL编码(二次)。 URL编码、Unicode/Base64编码等
-
宽字节绕过。GBK编码,对单引号
%27
进行转义%5C%27
,通过%df%27
转义为%df%5C%27
,其中前两个被视为新字节,%27
作为单引号正常实现语句闭合 -
大小写混合。 WAF规则匹配只针对特定情况(几乎没有)
References
- https://blog.zjun.info/tech/web-penetration-information-collection-checklist/
- https://cloud.tencent.com/developer/article/1872310
- https://www.cnblogs.com/coderge/p/13736537.html
- https://www.freebuf.com/articles/web/229982.html
- https://www.freebuf.com/articles/web/229982.html
- https://cloud.tencent.com/developer/article/1820070
- https://xz.aliyun.com/t/7767