<!--
A 'Thank you' from us / YesWeHack
MC0tPjAvJy8qPiovLTAtLyItMS8tMS0wLS8qPjxpbWcvc3JjLyUwYW9uZXJyb3I9LyoqLy1hbGVydCgxKTtvbmVycm9yLy8+
Test it:
https://dojo-yeswehack.com/Playground#eyJkZXNjcmlwdGlvbiI6IldvcmtzIGluIG1vc3Qgb3V0YnJlYWsgc2VuYXJpb3MgKyBzdGFuZGFyZCBET00gWFNTLCB5dyIsInNvbHV0aW9uIjpudWxsLCJoaW50cyI6W10sInF1ZXJ5Ijp7ImJhY2tlbmQiOiJYU1MiLCJ0ZW1wbGF0ZSI6IlxuPGRpdiB2YWx1ZT1cIiRwYXlsb2FkXCI+XG48ZGl2IHZhbHVlPSckcGF5bG9hZCc+XG5cbjxwIGlkPVwiZG9tXCI+Li4uPC9wPlxuPHNjcmlwdD5cbi8qJHBheWxvYWQqL1xueCA9IFwiJHBheWxvYWRcIjtcbnkgPSAnJHBheWxvYWQnO1xuXG4vL0RPTSBYU1MgUE9DOlxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvbScpLmlubmVySFRNTD0gYCRwYXlsb2FkYFxuXG4vLyRwYXlsb2FkXG48L3NjcmlwdD4tLT5cbiIsImZpbHRlcnMiOnsiJHBheWxvYWQiOlt7ImZ1bmMiOiJVUkwgZGVjb2RlIiwiYXJncyI6W119XX19fQ==
-->
<div align="center">
<h1><img src="https://assets.kitploit.com/production/public/readmes/48008/f84ecb608ca8909443d56f62f2cfa2071636dd5f603b0a12740aa24d46b6a3ba.png" alt="YWH 标志" width="24" height="auto"> 易受攻击的代码片段</h1>
<img src="https://raw.githubusercontent.com/yeswehack/vulnerable-code-snippets/HEAD/img/VsnippetBanner.gif" alt="易受攻击的代码片段 (Vsnippet) 横幅 YesWeHack Github 仓库" >
</div>
<p align="center">
<a href="#vulnerabilities">漏洞</a> |
<a href="#programming-languages">编程语言</a> |
<a href="#run-a-vulnerable-code-snippet">运行易受攻击的代码片段</a> |
<a href="#installation">安装</a> |
<a href="#update">更新</a>
</p>
[YesWeHack](https://www.yeswehack.com/) 提供了包含多种不同漏洞的代码片段,让你能在安全的 Docker 化环境中练习代码分析。这些易受攻击的代码片段适合所有技能水平。
~ **每周五**在 Twitter [@yeswehack](https://twitter.com/yeswehack) 上发布新的**易受攻击的代码片段**!🗒
> 如果你想看到一些特别的内容,或者你只是对易受攻击的代码片段有一个想法,欢迎创建一个「[新建 Issue](https://github.com/yeswehack/vulnerable-code-snippets/issues)」来阐述你的想法,**没有想法是愚蠢的**。
---
⚠️ **请注意**
> 请务必在安全的环境中运行这些代码,因为代码本身存在漏洞,仅供学习代码分析之用!
默认情况下,所有易受攻击的代码片段都包含一个 Docker 配置,可将代码与你的主机系统隔离,使其可以安全运行(*更多信息请参阅“运行易受攻击的代码片段”一节*)。
## Twitter (X) 帖子
我们在 Twitter 上发布的所有易受攻击的代码片段合集 📂
| ID | 漏洞 | 描述 |
|---|---|---|
📜[#1](https://twitter.com/yeswehack/status/1570757831468679169) | **SQLi & XSS** | 反斜杠过滤器冲突
📜[#2](https://twitter.com/yeswehack/status/1573303741310271490) | **文件访问不当 & XSS** | 无效字符和正则表达式验证
📜[#3](https://twitter.com/yeswehack/status/1575839882269818881) | **日志伪造注入、路径遍历 & 代码注入** | 过滤器不佳以及不正确的 `include()` 处理
📜[#4](https://twitter.com/yeswehack/status/1578370258230194177) | **XSS** | 无效的用户输入过滤器
📜[#5](https://twitter.com/yeswehack/status/1580911299382296576) | **SSRF & 失效的授权** | 信任用户输入以及来自请求头的客户端 IP
📜[#6](https://twitter.com/yeswehack/status/1583445497687130114) | **SSTI** | 混合输入格式
📜[#7](https://twitter.com/yeswehack/status/1585979707522134017) | **SQLi** | 在语句中使用无效变量
📜[#8](https://twitter.com/yeswehack/status/1588531516665171969) | **CSRF** | 未包含 CSRF token
📜[#9](https://twitter.com/yeswehack/status/1591068243439009798) | **开放重定向** | 无效的正则表达式处理器
📜[#10](https://twitter.com/yeswehack/status/1593604941897236485) | **DOM XSS** | 后端过滤器与客户端 JavaScript 冲突
📜[#11](https://twitter.com/yeswehack/status/1596141663075926017) | **CORS** | 错误配置的 `Access-Control-Allow` 请求头
📜[#12](https://twitter.com/yeswehack/status/1598678380072902660) | **CSRF/点击劫持** | 通过不安全的删除流程实现的 GET 请求 CSRF / 点击劫持 - 在 HTML meta 标签中设置 `X-Frame-Options`
📜[#13](https://twitter.com/yeswehack/status/1601230194035105797) | **路径遍历/不受限制的文件上传** | 薄弱的路径遍历和文件上传防护导致代码注入
📜[#14](https://twitter.com/yeswehack/status/1603751408678969347) | **DOS** | 'for 循环'中的运算符处理不正确
📜[#15](https://twitter.com/yeswehack/status/1606288516744347648) | **忘记密码时脆弱的密码恢复机制** | 密码恢复使用弱哈希
📜[#16](https://twitter.com/yeswehack/status/1608822361419321350) | **IDOR** | 不安全的 if 语句导致不适当的访问控制
📜[#17](https://twitter.com/yeswehack/status/1611361951644368898) | **不安全的反序列化** | 在 pickle 函数 `loads()` 中执行受信任的用户输入
📜[#18](https://twitter.com/yeswehack/status/1614985966178996225) | **路径遍历** | 对用户提供的文件名验证不当
📜[#19](https://twitter.com/yeswehack/status/1616435388507201536) | **开放重定向** | 对用户可控输入 "*location.hash*" 的处理不当
📜[#20](https://twitter.com/yeswehack/status/1618972101943107584) | **SQL 注入** | 函数 `replace()` 的使用无效,字符仅被替换一次
📜[#21](https://twitter.com/yeswehack/status/1621508813177212930) | **PostMessage DOM XSS** | 未验证 origin,导致 PostMessage DOM XSS
📜[#22](https://twitter.com/yeswehack/status/1626582253215318016) | **XSS/开放重定向** | 过滤器防护并未过滤所有可用于利用漏洞的特殊字符
📜[#23](https://twitter.com/yeswehack/status/1631655669244784640) | **缓冲区溢出** | 使用 `gets()` 函数接收用户的 STDIN 输入,且未检查缓冲区大小
📜[#24](https://twitter.com/yeswehack/status/1636725322447220739) | **SQL 注入** | 错误使用 PHP 函数 `addslashes()`
📜[#25](https://twitter.com/yeswehack/status/1639253229203599361) | **XSS - CSP 绕过** | 未验证用户输入,同时 nonce 的处理不安全
📜[#26](https://twitter.com/yeswehack/status/1641776354315190272) | **路径遍历** | PHP 函数 "preg_replace()" 提供的过滤器仅限于过滤前 10 个字符
📜[#27](https://twitter.com/yeswehack/status/1646854408196456448) | **Web 缓存投毒** | HTTP 请求头 `Referer` 未经过滤即被反射到缓存的响应体中
📜[#28](https://twitter.com/yeswehack/status/1649394393374248963) | **业务逻辑漏洞** | 攻击者可以提取负金额来增加其账户的总余额
📜[#29](https://twitter.com/yeswehack/status/1651933932198285314) | **IDOR** | 攻击者可以通过执行*强制浏览*攻击来获取其他用户的敏感数据
📜[#30](https://twitter.com/yeswehack/status/1654465424560365568) | **不安全的反序列化** | 使用用户可控的危险函数 (`exec`),从而导致 RCE
📜[#31](https://twitter.com/yeswehack/status/1659568814609117185) | **LFI** | 没有进行适当的字符转义或过滤器验证。`include()` 函数会执行给定文件中的所有 PHP 代码,无论文件扩展名是什么,从而导致代码注入
📜[#32](https://twitter.com/yeswehack/status/1669693673846591488) | **格式注入!** | 对包含客户端提供值的字符串进行格式化,导致格式注入
📜[#33](https://twitter.com/yeswehack/status/1678378536015372288) | **SQL 注入 (二阶)** | 除最后一个查询外,所有 SQL 查询都使用预编译语句。该语句从数据库中提取一个曾受用户控制的值,并将其添加到 SQL 查询中,从而导致 SQL 注入 (二阶)
📜[#34](https://twitter.com/yeswehack/status/1680877622685843456) | **正则表达式拒绝服务 (ReDoS)** | 用于过滤用户输入的正则表达式模式配置不当
📜[#35](https://twitter.com/yeswehack/status/1691057079996350464) | **XSS** | 信任 GET 参数中的用户输入
📜[#36](https://twitter.com/yeswehack/status/1696130513038418312) | **不受限制的文件上传** | 对上传文件的扩展名验证不足,并且遗漏了对文件内容的验证
📜[#37](https://twitter.com/yeswehack/status/1705190707768479828) | **SSRF** | 对代理头 `X-Forwarded-Host` 和 cURL 的不安全处理导致完整的 SSRF
📜[#38](https://twitter.com/yeswehack/status/1709124683377885530) | **代码注入** | 用户可以将自定义内容写入所选文件,然后在易受攻击的系统上启动该文件
📜[#39](https://twitter.com/yeswehack/status/1717202895701954626) | **LFI** | 利用 LFI 可以运行工具 *pearcmd*,从而实现远程代码执行
📜[#40](https://twitter.com/yeswehack/status/1745074482522243552) | **不受限制的文件上传** | 由于 Apache 代理中的配置,`php3` 扩展名可用于执行 php 代码。
📜[#41](https://twitter.com/yeswehack) | **命令注入** | escapeshellcmd 的错误使用导致命令注入漏洞
📜[#42](https://x.com/yeswehack/status/1801619463097274624) | **命令注入** | 未对用户输入进行验证,导致命令注入漏洞
📜[#43](https://x.com/yeswehack/status/1775179767412593021) | **SSTI** | 模板引擎使用不当导致 SSTI,进而造成 RCE
## 漏洞
- [失效的访问控制](https://owasp.org/www-community/Broken_Access_Control) - CWE-284
- [代码注入](https://owasp.org/www-community/attacks/Code_Injection) - CWE-94
- [跨站请求伪造 (CSRF)](https://owasp.org/www-community/attacks/csrf) - CWE-352
- [SQL 注入 (SQLi)](https://owasp.org/www-community/attacks/SQL_Injection) - CWE-89
- [跨站脚本 (XSS)](https://owasp.org/www-community/attacks/xss/) - CWE-79
- [开放重定向](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) - CWE-601
- [服务端模板注入 (SSTI)](https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/18-Testing_for_Server_Side_Template_Injection) - CWE-1336
- [服务端请求伪造 (SSRF)](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) - CWE-918
- [跨源资源共享 (CORS)](https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny) - CWE-942
- [点击劫持](https://owasp.org/www-community/attacks/Clickjacking) - CWE-1021
- [不受限制的文件上传](https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload) - CWE-434
- [路径遍历](https://owasp.org/www-community/attacks/Path_Traversal) - CWE-35
- [拒绝服务](https://owasp.org/www-community/attacks/Denial_of_Service) - CWE-400
- [忘记密码时脆弱的密码恢复机制](https://cwe.mitre.org/data/definitions/640.html) - CWE-640
- [不安全的直接对象引用 (IDOR)](https://cwe.mitre.org/data/definitions/639.html) - CWE-639
- [不可信数据的反序列化](https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data) - CWE-502
- [本地文件包含](https://cwe.mitre.org/data/definitions/98.html) - CWE-98
- [缓冲区溢出](https://cwe.mitre.org/data/definitions/120.html) - CWE-120
- [接受多余不可信数据与可信数据 ("缓存投毒")](https://cwe.mitre.org/data/definitions/349.html) - CWE-349
- [业务逻辑错误](https://cwe.mitre.org/data/definitions/840.html) - CWE-840
- [格式注入](https://cwe.mitre.org/data/definitions/134.html) - CWE-134
- [命令注入](https://cwe.mitre.org/data/definitions/77) - CWE-77
## 编程语言
- [PHP](https://www.php.net/)
- [Python](https://www.python.org/)
- [Golang](https://go.dev/)
- [Java](https://www.java.com/)
- [JavaScript](https://www.javascript.com/)
- [C](https://en.wikipedia.org/wiki/C_(programming_language))
__其他还包括__
- SQL ([MySQL](https://www.mysql.com/))
- HTML
- CSS
---
## 运行易受攻击的代码片段
在每个易受攻击的代码片段 (Vsnippet) 文件夹中都有一个 `docker-compose.yml` 文件。要在隔离的 Docker 环境中启动一个 Vsnippet,只需运行以下命令:
```
docker compose up --build
```
或
```
docker-compose up --build
```
## 安装
```bash
git clone https://github.com/yeswehack/vulnerable-code-snippets.git
```
## 更新
要获取最新的易受攻击的代码片段,请运行:
```bash
git pull
```
~ **你找到复活节彩蛋了吗?** 🐇🪺
如有问题、需要帮助,或者你发现了代码中的问题,请通过 Twitter 联系我们:[@yeswehack](https://twitter.com/yeswehack) 📬