web安全测试1-信息收集(完整名请用base64解码):c2VjNTQyIFdFQiBBUFAgUEVORVRSQVRJT04gVEVTVElORyAmIEVUSElDQUwgSEFDS0lORw==
-
美国NIST 国家漏洞数据库
https://nvd.nist.gov/ -
Offensive Security 维护漏洞库
https://www.exploit-db.com/
信息收集
威胁建模:https://github.com/OWASP/wstg/blob/master/document/2-Introduction/README.md#Threat-Modeling
代码审计 Code review
安全测试方法
Static Application Security Testing (SAST) 静态
Dynamic Application Security Testing (DAST) 动态
Interactive Application Security Testing (IAST) 交互 :https://portswigger.net/burp/documentation/desktop/tools/infiltrator
Out-of-Band Application Security Testing (OAST) 带外 :https://portswigger.net/blog/oast-out-of-band-application-security-testing
-
威胁建模
https://csrc.nist.gov/pubs/sp/800/30/r1/final
https://www.sei.cmu.edu/blog/threat-modeling-12-available-methods/ -
代码审计
建议看黑帽大会:《Next-Level Bug Hunting - Code Edition》进行心法辅助 -
静态应用程序安全测试 (SAST)
自动化代码审查工具或静态分析工具 -
动态应用程序安全测试 (DAST)
渗透测试与漏扫工具 -
自动化与手动渗透同时进行
CSRF与逻辑漏洞等无法通过自动化来发现
黑盒测试不代表真正意义上的攻击行为,白盒测试能加速安全评估的进程,而现实往往介于黑盒与白盒之间
企业应该在内部使用白盒来喂养安全团队的“代码感”,天天接触就能养成漏洞挖掘的意识,相互成就相互进步 -
方法论
https://owasp.org/www-project-web-security-testing-guide/
http://www.pentest-standard.org/index.php/Main_Page -
DAST Web扫描器
Nessus web扫描模块
ZAP Active Scan
Arachni Scanner
Nikto
Acunetix Vulnerability Scanner
BurpSuite Pro Active/Live Scan
Fortify WebInspect
HCL AppScan
Qualys WAS
Rapid7 AppSpider
Whitehat Sentinel
Invivti (Formerly Netsparker)
扫描器对自定义的web应用无效,在检测漏洞方面永远无法与网络漏洞扫描器(Nessus)相媲美 -
浏览器选择
Chrome,Chromium,Firefox
Chromium 是 Chrome 的完全开源版本(Chrome 包含非开源元素) -
代理拦截
https://portswigger.net/burp
https://www.zaproxy.org/docs/desktop/paros/
Burp Enterprise 更多意义被应用于SDLC而非渗透中
Dafydd Stuttard (@PortSwigger):burp工具以及《Web 应用程序黑客手册》(Wiley 出版社)的第一版和第二版的作者都是他,而第三版的“书”则是burp官网的web安全靶场
burp auditing 审计(逐渐代替扫描一词)代指:主动扫描加漏洞识别 -
开源情报(OSINT)
OSINT:可理解为渗透阶段的信息收集,指搜索、收集和分析来自公共来源的数据(包括爬取等一切公网的数据)的过程
https://github.com/WebBreacher/osinttools -
web安全与OSINT
https://mp.weixin.qq.com/s/NQDODVxscZADNhy-Qqb0GQ -
搜索引擎
bing,DuckDuckGo ,google
信息茧房:基于个人数据对搜索结果进行操纵。在开源情报(OSINT)时,不同的人执行相同的搜索可能会得到不同的结果。已退出登录或使用隐私/隐身模式搜索,也可能出现不同的结果 -
搜索引擎操作符
https://duckduckgo.com/duckduckgo-help-pages/results/syntax
https://support.google.com/websearch/answer/2466433?hl=en
https://learn.microsoft.com/en-us/previous-versions/bing/search/ff795620(v=msdn.10)
https://support.microsoft.com/zh-cn/topic/高级搜索关键字-ea595928-5d63-4a0b-9c6b-0b769865e78a
https://duckduckgo.com/bangs -
Google Dorks
Google Dorks,简称 Dorks,针对性编写的搜索规则语法,用于返回针对性的结果。
Google Hacking Database (GHDB):Offensive Security 维护的 Dorks(未明确指出,则默认为 Google 编写)
https://www.exploit-db.com/google-hacking-database -
OSINT 社交媒体
-
OSINT theHarvester或Maltego或SpiderFoot
https://github.com/laramies/theHarvester
此类工具综合大多数第三方数据库平台,通常都需要免费或付费的API
https://www.intel471.com/ 收购SpiderFoot -
虚拟主机发现
HTTP 1.1版本引入虚拟主机:域名来区服务器上的不同Web应用程序
虚拟主机发现:主动爆破DNS服务器;被动查询第三方DNS数据库;空间测绘;证书透明度数据库;Web 服务器配置等
并非所有DNS记录都会映射到 Web 应用程序(或虚拟主机上的应用还未部署):浏览web跟目录,强制浏览等即可识别虚拟主机关联的web应用程序 -
DNS
53 UDP传输小于512字节的数据已成为历史(DNS扩展机制 EDNS 允许通过 UDP 传输高达 4096 字节),53 TCP传输大于512字节的数据,区域传输指下载给定域或子域的DNS区域或名称数据库
区域传输:在很多情况下,数据量是大于4096 字节的,53 TCP端口的区域传输功能的业务无法关闭 -
主动查询 DNS 服务器
大部分情况下区域传输不可用:辅助 DNS 服务器从主 DNS 服务器获取镜像数据。如果成功,则下载整个 DNS 镜像数据。除非组织将 DNS 服务委托给不注重安全的ISP,否则无法公开访问。
dig 区域传输的语法:$ dig demo.org -t axfr
通常在虚拟主机发现中大量使用的是反向 DNS 扫描 (PTR)和 DNS 暴力破解扫描(字典)。 -
反向 DNS 扫描
许多 DNS 管理员(和 DNS 工具)都会为每个正向记录 (A) 创建反向记录 (PTR) :
A: www.demo.org -> 192.168.1.1
PTR: 192.168.1.1 -> demo.test.org
对目标资产拥有的 IP 地址执行 WHOIS 查询:识别目标组织拥有的公共网段
然后对每个 IP 地址或网段执行反向 DNS 查询:PTR 记录,很多工具都支持反向查询
$dnsrecon.py -r 192.168.1.0/24 -
DNS 暴力破解扫描
大多数公共 DNS 服务器性能都很高,大多数客户端不会注意到大规模 DNS 暴力扫描(持续很多天的高并发)。但是不要指向企业自己的DNS服务器,性能可能没那么高(CDN与waf同理,扫不动往往不是你发了poc,而是速度太快被归于DOS攻击而拉黑)
https://github.com/darkoperator/dnsrecon/blob/master/dnsrecon/data/subdomains-top1mil.txt
子域名暴力破解词表的来源之一:对Alexa Top 100 万的网站进行了区域传输测试(成功率 6%,获取到镜像数据 566MB)
https://github.com/ethicalhack3r/ethicalhack3r.github.io/blob/master/_posts/2013-08-08-zone-transfers-on-the-alexa-top-1-million-part-2.markdown
DNS 侦察的部分工具列表:
nslookup
dig
Nmap
DNSRecon -
nslookup
nslookup符合:living off the land(大陆上生活或就地取材),适用于所有操作系统,适合盲注,所谓的不出网环境通常也允许 DNS 解析 -
dig
dig 客户端是 BIND 的一部分:BIND 是开源软件,它是互联网域名系统 (DNS) 协议的具体实现。BIND命名源于Berkeley Internet Name Domain 伯克利互联网名称域(源于加州大学伯克利分校)
https://www.isc.org/bind/
$ dig @<nameserver> example.com options:基础语法
-t mx:mx记录
–t axfr:区域传输
-x:PTR反向查找
dig @名称服务器 version.bind chaos txt:查询域名服务器上的 BIND 版本 -
Nmap DNS NSE 脚本
$ ls /usr/local/share/nmap/scripts/dns* -
DNS 第三方数据源
https://www.domaintools.com/platform :以全球阵列“探针”的形式被动的采集网络流量中的DNS请求数据收集到日志里(全球所有牛逼的SOC分析公司都与其有合作,数据超1000亿条)
https://dnsdumpster.com/ :第三方数据源(已OSINT的手法来采集,而非爆破与枚举DNS记录)
https://hackertarget.com/domain-profiler/ -
HTTPS 证书虚拟主机发现
通用名称和 DNS 名称值代表与 Web 应用程序关联的虚拟主机名
通过 HTTPS 访问 IP 地址有时也会显示带有 DNS 名称的证书
证书颁发机构会将已购买证书的详细信息放入日志中,证书日志的数据库是公开的可以通过域名进行查询
证书透明度:https://certificate.transparency.dev/howctworks/ -
HTTP 语法与语义
所谓的SPDY, HTTP/2, QUIC, HTTP/3,HTTP/1.1
以上所有协议在语义上一直没有变化:方法、状态码、头部字段(元数据)和主体(payload)等,变化的只是语法。此认知只需要学一个就能掌握所有。
https://blog.cloudflare.com/zh-cn/http-3-from-root-to-tip/ -
HTTP/2
二进制:采用二进制帧结构,在网络传输过程中数据不再是纯文本
推送:传统的 HTTP 协议会先请求一个URL,然后服务器响应数据。推送功能则会在发送URL之前,主动响应数据
多路复用:单TCP连接传输,请求可以并行,响应也并发接收和解析
协议与加密无关:HTTP/2 默认不加密 -
QUIC - HTTP/3
80端口不验证服务器证书:QUIC 使用 UDP 端口 80 和 443,两端口都已加密
QUIC 本质上是基于 UDP 的 HTTP/2:类似于基于 UDP 实现的 TCP+TLS+HTTP/2 -
HTTP 语义
HTTP请求:HTTP 方法/动词;URI/资源;HTTP 版本;HTTP 请求体;HTTP标头等
HTTP响应:标头;响应体等 -
HTTP方法/动词
安全方法:GET、HEAD、OPTIONS(指只读,不改变服务器状态)
不安全的方法:POST、PUT、DELETE
无关紧要的恐龙名词 Idempotent 幂等:已提出更多的微乎其微的恐龙名词的方式来告诉你,抓住“关键”即可,其他都是垃圾认知
https://developer.mozilla.org/en-US/docs/Glossary/Idempotent
如何区分垃圾的恐龙名词与术语:http://www.yinwang.org/blog-cn/2018/11/23/grammar -
HTTP 请求方法:GET
通过 HTTPS 传输后的安全隐患:URI 经常被浏览器显示(计算机取证),存储在明文书签中(浏览器书签收藏),并被用户代理历史记录(用户代理指浏览器)和中间应用程序(代理,即你通过VPN或小猫咪的服务器)记录。
示例:https://www.demo.com?token=fjlsakj.fjdlskajf.fjask (你的JWT认证已被全世界监听)
URI:https://datatracker.ietf.org/doc/html/rfc3986 -
HTTP 请求:GET 请求和 URI
URL编码问题(或者说所有的所谓的编码与绕过问题):比如 / 符号,如果它不编码就会变成语义时,你想让它成为数据,则需要进行编码(比如请求 http://demo.com//1.zip 如果//1.zip不编码,你测的是服务器(CDN或waf)对于 //这种不正常的语义是否存在漏洞(效果是否等于 /1.zip)。而/%2F 你测的是服务器接收/%2F之后,将其传入到了代码块中,对于%2F这个数据是否存在什么漏洞(1.zip 禁止访问,可%2F1.zip允许绕过?) )
https://datatracker.ietf.org/doc/html/rfc3986#section-2.4
总结:在正常范围之内或之外进行概念验证 -
HTTP 请求方法:POST
Content-Type: text/plain
Content-Type: application/x-www-form-urlencoded
Content-Type: application/json -
HTTP 请求:动词篡改和 GET/POST 方法互换
CSRF漏洞常用技巧
绕过waf技巧 -
HTTP 请求方法:HEAD
HEAD:速度非常快,适用于简单的 HTTP 响应头评估(例如,不带 HttpOnly 标志的 Cookie)。
Web 服务器是否被DOS打死了,可以试试 HEAD 是否还具有响应能力
curl --head或-I -
HTTP 请求方法:TRACE
XST攻击:跨站追踪(Cross-Site Tracing,简称 TRACE)绕过 cookie 的 HttpOnly 限制的 JavaScript XSS 攻击访问 cookie 数据的方法。
https://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf
响应包漏洞示例:
TRACE / HTTP/1.1
Host: *
Cookie:demo=钵钵鸡
-
HTTP 请求方法:CRUD(创建、读取、更新、删除)
创建:POST(或PUT)
读取:GET
更新:POST, PUT, PATCH
删除:DELETE
RESTful API的HTTP方法:https://restfulapi.net/http-methods/ -
HTTP 请求:User-Agent 用户代理
User-Agent 用于标识 HTTP 请求中的 Web 客户端,一般情况下,User-Agent 指的是浏览器
使用浏览器之外的工具直接与 Web 服务器和应用程序交互时,HTTP 用户代理都可能暴露出我们并非普通用户,尤其是在不断切换UA时。 -
HTTP 请求:Referer
如果应用程序使用 GET 请求传递敏感信息,则存在通过 Referer 意外泄露信息的风险。
Referer 字段中包含敏感信息:比如从内部应用点击外部链接时不显示 Referer 字段。
https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Referer_header:_privacy_and_security_concerns -
HTTP 请求:Cookie
应用程序建立/跟踪会话的一种方式是使用 HTTP Cookie。 -
HTTP响应
Status Codes: 状态码
Server Header:受代理服务器等影响
Cache-Control Header:缓存可能会阻止请求的实际发送或服务器无法提供新内容
Cache-Control:影响缓存最重要的标头
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control
Set-Cookie Header:通常与会话管理相关 -
加密故障
https://owasp.org/Top10/2021/A02_2021-Cryptographic_Failures/index.html -
HTTPS
TLS 1.0或SSL 3.0 1996年
TLS 1.2 2008年
TLS 1.3 2018年 -
HTTPS SSL/TLS 握手
https://www.cloudflare.com/zh-cn/learning/ssl/what-happens-in-a-tls-handshake/ -
密码套件:保密性、完整性和端点认证
用于完整性验证的多个加密算法叫密码套件,TLS 协商是找到一个双方都支持的密码套件
非对称(又称公钥)密码系统用于端点认证,并安全地协商会话密钥,该会话密钥是对称密码系统的共享密钥,用于加密传输中的大量数据
非对称:RSA, DH, DSA, ECDH, ECDSA
对称: DES, TDES/3DES, AES
哈希: MD5, SHA, SHA256, SHA384 -
公钥/证书和证书颁发机构
公钥或非对称加密系统:源认证和密钥交换/协商
服务器通过证书来传输公钥(已数字签名的方式来共享公钥)
数字签名:使用私钥对数据进行签名(需要公钥来解)
浏览器:使用预装在系统或浏览器中的CA公钥(来自受信任的根证书)对签名进行解密(拿到共享公钥)
拦截代理burp或zap:证书是由 Burp 或 ZAP 动态生成的,而浏览器并未默认信任这些证书
总结:当你安装证书的时候(或木马帮你安装),已经默认信任其数字签名(解密HTTPS,其实是拦截代理与安装证书来进行的流量解密,流量复制到所有网络侧探针,类似burp或zap那一套) -
弱传输层安全测试
通过测试传输加密的有效性来确保安全
https://github.com/OWASP/wstg/blob/master/document/4-Web_Application_Security_Testing/09-Testing_for_Weak_Cryptography/01-Testing_for_Weak_Transport_Layer_Security.md -
版本和密码套件
服务器无法配置成只允许使用当前支持的加密套件的 TLS 1.3:除非所有的客户端都同步支持 -
Nmap 评估 HTTPS
nmap -p 443 --script=ssl-enum-ciphers www.demo.com
本地编译nmap最新版:已apt的形式安装的软件通常都是比较旧的,以及附带的ssl-enum-ciphers脚本也是旧的。
https://nmap.org/nsedoc/scripts/ssl-enum-ciphers.html -
testssl.sh 评估 HTTPS
https://github.com/testssl/testssl.sh
./testssl.sh <HOSTNAME>
很多工具依赖 OpenSSL 来收集 HTTPS 配置的详细信息,如果 OpenSSL 未编译为支持某些协议(比如SSLv2 和 SSLv3),则工具无法检测与识别这些协议
testssl.sh 工具可以在不使用 OpenSSL 的情况下执行所有检查 -
Qualys SSL Labs
在线网站评估HTTPS:https://www.ssllabs.com/ssltest/ (打钩,已非公开的形式生成评估报告) -
web服务器指纹
nday评估
https://github.com/OWASP/wstg/blob/master/document/4-Web_Application_Security_Testing/01-Information_Gathering/02-Fingerprint_Web_Server.md -
端口扫描
谷歌搜软件版本漏洞:versions,vulnerabilities
漏洞利用网站或工具搜:ExploitDB ,Metasploit
下载开源软件并寻找漏洞
扫端扫描工具与云服务:
• Nmap
• Zenmap
• Shodan
• Netcraft -
nmap
-sV:端口背后的服务指纹探测,拿响应与本地指纹进行匹配
/nmap/nmap-service-probes
测试网站:http://scanme.nmap.org/
NSE 脚本引擎:很多脚本硬编码端口或http服务(80或443)的其他端口测试时最好带上(-sV或-A,已识别出非正常端口上的HTTP服务,引导其走另一条代码逻辑并选择其对应的脚本进行评估)
/nmap/scripts -
Shodan
全球联网设备的搜索引擎,定期扫描整个互联网 -
Netcraft 站点报告
只用于目标为网站的OSINT
https://sitereport.netcraft.com -
web应用基础架构
目标用户画像数据:直接影响到系统的管理或业务
系统配置:比如数据库3306暴露于公网(比如通过本地文件包含漏洞找到配置文件,泄露了数据库账号密码,再加上数据库又暴露在公网) -
识别 Web 服务器组件
web服务器组件:Web服务器(Apache,IIS,nginx,) ,应用框架(Spring,ASP.NET,),内容管理系统CMS(WordPress,Drupal,Joomla,SharePoint),数据库,其他软件(OpenSSH,FTP,SMB,RDP)
端口扫描
默认网页:强制浏览是识别默认内容的一种方法;多页面中的细微差距比较来确认具体版本号
配置文件:也会间接体现出存在特定的什么组件
管理页面:也会间接体现出存在特定的什么组件 -
测试 HTTP 方法
GET 请求:URI 中的参数可能泄露敏感信息
POST参数:可用于利用漏洞
PUT:将文件上传到网站根目录
TRACE: 识别 Web 服务器前端的负载均衡器或其他设备
DELETE: 从网站根目录中删除文件
https://github.com/OWASP/wstg/blob/master/document/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/06-Test_HTTP_Methods.md -
检查 Web 服务器元文件是否存在信息泄露
robots.txt -
心脏出血
https://heartbleed.com/
CVE-2014-0160
单次请求直接从存在漏洞的 OpenSSL 服务器远程读取 64KB 的内存块:用户名,密码,会话管理,私钥等其他敏感信息
https://github.com/wallarm/heartbleed.py/blob/master/heartbleed.py
内容发现,身份认证,会话管理
170
workbook 767

浙公网安备 33010602011771号