Web 应用漏洞攻防
实验目的
- 了解常见 Web 漏洞训练平台;
- 了解 常见 Web 漏洞的基本原理;
- 掌握 OWASP Top 10 及常见 Web 高危漏洞的漏洞检测、漏洞利用和漏洞修复方法;
实验环境
- WebGoat
- Juice Shop
实验要求
- [ ] 每个实验环境完成不少于 5 种不同漏洞类型的漏洞利用练习;
- [ ] (可选)使用不同于官方教程中的漏洞利用方法完成目标漏洞利用练习;
- [ ] (可选)最大化 漏洞利用效果实验;
- [ ] (可选)编写 自动化 漏洞利用脚本完成指定的训练项目;
- [ ] (可选)定位缺陷代码;
- [ ] (可选)尝试从源代码层面修复漏洞;
WebGoat 训练平台与其他常见漏洞训练平台横向对比
漏洞类型 | WebGoat 7.1 | WebGoat 8.0 | DVWA | Vulhub |
---|---|---|---|---|
未验证的用户输入 | Parameter Tampering->Bypass HTML Field Restrictions / Bypass Client Side JavaScript Validation | Client side | Weblogic 常规渗透测试环境 | |
CSRF | Cross-Site Request Forgeries | ✓ | ||
缓冲区溢出 | Buffer OverFlaws->Off-by-One OverFlaws | |||
文件上传漏洞 | Malicious Execution | ✓ | CVE-2018-2894 | |
文件包含 | ✓ | PHP文件包含漏洞(利用phpinfo) | ||
XXE | Parameter Tampering->XXE | XXE | ||
反序列化 | Insecure Deserialization | CVE-2015-5254, CVE-2017-3066, fastjson 反序列化导致任意命令执行漏洞 | ||
第三方组件缺陷 | Vulnerable Components | CVE-2017-12794, CVE-2018-14574, CVE-2014-3120, CVE-2015-5531, fastjson 反序列化导致任意命令执行漏洞, Flask(Jinja2) 服务端模板注入漏洞, S2-系列漏洞一箩筐, Imagetragick 命令执行漏洞(CVE-2016–3714) | ||
SQL 注入 | Injection Flaws->SQL Injection | Injection Flaws->SQL Injection | CVE-2014-3704 | |
命令注入 | Injection Flaws->Command Injection | ✓ | CVE-2017-12636 | |
SSRF | CVE-2016-1897/CVE-2016-1898, Weblogic SSRF漏洞 | |||
XSS | Cross Site Scripting | ✓ | CVE-2017-12794 | |
信息泄漏 | ThinkPHP5 SQL注入漏洞 && 敏感信息泄露 | |||
Web 服务器 URI 解析类漏洞 | CVE-2017-15715 / Apache HTTPD 未知后缀解析漏洞 / HTTPoxy漏洞(CVE-2016-5385) | |||
不当配置缺陷 | Nginx 配置错误导致漏洞 / Nginx 解析漏洞复现 | |||
脆弱的访问控制 | Session Management Flaws | Authentication Flaws / Access Control Flaws | Weak Session IDs | CVE-2017-12635 |
WebGoat 7.0.1 实验
- Authentication Flaws ( 6.脆弱的访问控制 )
- Forgot Password
- Multi Level Login 2
- Cross-Site Scripting
- Stored XSS Attacks ( 4.跨站点脚本(XSS) )
- Cross Site Request Forgery (CSRF) ( 11.跨站点请求伪造 )
- Injection Flaws ( 3. 注⼊缺陷 )
- Command injection
- LAB: SQL Injection
- Malicious Execution
- Malicious File Execution ( 13. ⽂件上传漏洞 )
- Parameter Tampering ( 1. 未验证的用户输⼊ )
- Bypass HTML Field Restrictions
- Exploit Hidden Fields
- Session Management Flaws ( 7.脆弱认证和会话管理 )
- Session Fixation
修改WebGoat 7.0.1的默认监听IP地址
编辑 .extract/webapps/WebGoat/WEB-INF/web.xml
,将其中的所有localhost替换成你想要让WebGoat内置Web服务器监听的IP地址。修改后的相关行配置类似如下:
http://192.168.56.101:8080/{context-path}/servlet/{classname}
http://192.168.56.101:8080/{contextpath}/graph
http://192.168.56.101:8080/{contextpath}/saveCustomer.mvc
真实 Web 应用训练平台
OWASP Juice Shop : Probably the most modern and sophisticated insecure web application
项目特色
- 使用现代 Web 开发技术 开发的
富互联网应用
( Rich Internet Application, RIA )或单页应用
( Single Page Application, SPA )。
- 相比较于现有的其他「漏洞训练」项目,本项目在产品「仿真」程度上更贴近一个「真实」应用:电商系统。
- DevOps 最佳实践: Automated Build, CI/CD & Code Analysis
- 支持
CTF
模式运行:官方支持集成到 CTFd 或 FBCTF - 教程完备
包含漏洞类型
根据 官方项目介绍 PPT ,本项目包含超过 85 个安全挑战,包含的漏洞类型如下图:
Category | OWASP | CWE |
---|---|---|
注入 | A1:2017 | CWE-74 |
身份认证失效 | A2:2017 | CWE-287, CWE-352 |
遗忘信息 | OTG-CONFIG-004 | |
自身安全加固 | A10:2017 | CWE-326, CWE-601 |
敏感数据曝光 | A3:2017 | CWE-200, CWE-327, CWE-328, CWE-548 |
XXE | A4:2017 | CWE-611 |
输入校验不当 | ASVS V5 | CWE-20 |
访问控制失效 | A5:2017 | CWE-22, CWE-285, CWE-639 |
安全配置缺陷 | A6:2017 | CWE-209 |
XSS | A7:2017 | CWE-79 |
反序列化漏洞 | A8:2017 | CWE-502 |
缺陷组件(供应链安全) | A9:2017 | |
混淆不等于安全 | CWE-656 | |
条件竞争 | OWASP-AT-010 | CWE-362 |
Kali 上安装 Docker 注意事项
以本书写作时使用 Kali 系统版本为例,如下所示:当前 Kali 版本为 2019.2
,注意到其中的 Codename
字段为 n/a
,即不可用。
lsb_release -a
# No LSB modules are available.
# Distributor ID: Kali
# Description: Kali GNU/Linux Rolling
# Release: 2019.2
# Codename: n/a
# 当前 Kali 版本自带的 Docker 最新版软件包名为 docker.io
apt-cache policy docker.io
# docker.io:
# Installed: (none)
# Candidate: 19.03.4+dfsg2-2
# Version table:
# 19.03.4+dfsg2-2 500
# 500 http://http.kali.org/kali kali-rolling/main amd64 Packages
# Docker 官方当前使用的软件包名为 docker-ce ,但在 Kali 上没有使用这个软件包名
apt-cache policy docker-ce
# docker-ce:
# Installed: (none)
# Candidate: (none)
# Version table:
根据 Kali
官方的介绍,Kali
是基于 Debian Testing 版本进行二次构建的,因此绝大部分 Kali
上的软件包都是来自 Debian Testing
版本。在某些情况下,一些较新版本的软件甚至是来自于 Debian Unstable
或者 Debian Experimental
版本。
以下命令是在 Debian buster
版本上执行 lsb_release -a
的结果,注意到其中的 Codename
字段值为:buster
。当我们在执行 lsb_release -cs
的时候输出的值就是这里的 Codename
,记住这里 lsb_release -cs
的输出结果差异对于理解后续 Docker 官方的安装指南中 的安装指令为什么不能直接在 Kali
上执行是有帮助的。
lsb_release -a
# No LSB modules are available.
# Distributor ID: Debian
# Description: Debian GNU/Linux 10 (buster)
# Release: 10
# Codename: buster
推荐按照 Docker 官方的安装指南 在 Kali 上安装 Docker
,但需要注意的是:不能在 Kali 上直接使用以下命令去添加 Docker
官方的 apt 镜像源地址:
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
一来,在 Kali
上 lsb_release -cs
的输出结果是 n/a
,这是一个非法的 Debian
发行版代号。所以,此处应该替换成当前最新的 Debian
稳定版代号(Docker
官方通常不支持 Debian Testing
版本,例如 buster
是当前 Debian
系列最新的稳定版本,此时的 Testing
版本代号为 bullseye
),例如当前是 buster
。
二来,建议用浏览器打开 https://download.docker.com/linux/debian/dists/ 确认存在 buster
子目录(当前确实不存在 bullseye
子目录,证明 Docker
官方确实还不支持 Debian Testing
版本)。
需要注意的是,以下修改后添加 apt 镜像源地址的方法执行依然会报错:
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
buster \
test"
# Traceback (most recent call last):
# File "/usr/bin/add-apt-repository", line 95, in <module>
# sp = SoftwareProperties(options=options)
# File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 109, in __init__
# self.reload_sourceslist()
# File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 599, in reload_sourceslist
# self.distro.get_sources(self.sourceslist)
# File "/usr/lib/python3/dist-packages/aptsources/distro.py", line 93, in get_sources
# (self.id, self.codename))
#aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Kali/n/a
可以使用以下单行命令在 /etc/apt/sources.list
中添加 Docker
官方的 apt 镜像源地址:
if [[ $(grep -c "docker.com" /etc/apt/sources.list) -eq 0 ]];then echo "deb https://download.docker.com/linux/debian buster stable" >> /etc/apt/sources.list;fi
在执行 apt update
之前应先添加 Docker
官方的 GPG 公钥到系统受信任公钥数据库,如下操作:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
apt update
此时再执行 apt-cache policy docker-ce
就能看到是由 Docker
官方 apt 镜像源提供的最新 Docker
社区稳定版了。
apt-cache policy docker-ce | head
# docker-ce:
# Installed: (none)
# Candidate: 5:19.03.5~3-0~debian-buster
# Version table:
# 5:19.03.5~3-0~debian-buster 500
# 500 https://download.docker.com/linux/debian buster/stable amd64 Packages
# 5:19.03.4~3-0~debian-buster 500
# 500 https://download.docker.com/linux/debian buster/stable amd64 Packages
# 5:19.03.3~3-0~debian-buster 500
# 500 https://download.docker.com/linux/debian buster/stable amd64 Packages
接下来的 Docker
安装就可以使用 apt install docker-ce
完成了。docker-compose
的安装依然建议按照 Docker 官方文档的安装指南 进行操作。