adityaax/source-Code-Review
GitHub: adityaax/source-Code-Review
这是一个通过真实脆弱代码片段练习源代码审计的仓库,旨在提升手动漏洞识别和安全理解能力。
Stars: 0 | Forks: 0
# 源代码审计
通过真实的脆弱代码片段实践源代码审计。
源代码审计专为安全研究人员、漏洞赏金猎人和希望通过**阅读和理解源代码**来提升漏洞识别能力的学习者而设计。
本仓库并非侧重于漏洞利用的实验环境,而是帮助构建许多研究人员容易忽视的核心技能:
**手动源代码审计。**
## 本仓库存在的意义
许多学习者过度关注攻击载荷和自动化工具。
但强大的安全研究人员往往通过简单地审查代码并发现以下问题来发现影响深远的漏洞:
- 被破坏的信任假设
- 授权缺陷
- 逻辑错误
- 不安全的输入处理
本仓库有助于培养这种审计思维。
## 你将学到什么
通过这些挑战,你将练习识别:
- 越权访问
- 认证绕过
- IDOR
- SQL 注入
- 会话管理问题
- 权限提升
- 业务逻辑缺陷
- 令牌验证错误
- 信任边界失效
## 运作方式
每个挑战遵循一个简单的审查流程。
### 1. 阅读代码
审查提供的脆弱源代码片段。
### 2. 自行分析
在揭示答案之前,请思考:
- 哪些输入是攻击者可控的?
- 信任在何处被授予?
- 授权是否被正确执行?
- 应用程序状态是否可能被操纵?
- 这段代码做了哪些假设?
### 3. 揭示答案
每个文件包含一个隐藏的答案部分,解释:
- 漏洞是什么
- 为何存在
- 安全影响
- 审查者思维
## 挑战格式
每个挑战作为独立的 Markdown 文件上传。
```
code-1.md
code-2.md
code-3.md
...
```
每个文件包含:
- 脆弱的源代码
- 解决方案详解
## 示例
```
from flask import Flask, request, session, jsonify
import sqlite3
app = Flask(__name__)
app.secret_key = "secret"
def get_db():
conn = sqlite3.connect("users.db")
conn.row_factory = sqlite3.Row
return conn
@app.route("/profile")
def profile():
if "user_id" not in session:
return "Unauthorized", 403
uid = request.args.get("id", session["user_id"])
db = get_db()
user = db.execute(
"SELECT id, username, email FROM users WHERE id=?",
(uid,)
).fetchone()
return jsonify(dict(user))
```
揭示答案
## 发现 **不安全的直接对象引用 (IDOR)**\ 应用程序检查用户是否已通过认证: ``` if "user_id" not in session: ``` 然而,它并未验证所请求的用户资料是否属于已认证的用户。已认证的攻击者可以通过更改 ID 来访问其他用户的资料:/profile?id=2标签:JS文件枚举, 业务逻辑漏洞, 代码安全, 代码审查工具, 会话管理, 信任边界, 协议分析, 学习资源, 安全培训, 安全研究人员, 安全编码, 实践练习, 手动代码审查, 数据可视化, 权限提升, 源代码审查, 漏洞分析, 漏洞枚举, 漏洞识别, 访问控制缺陷, 路径探测, 身份验证绕过, 逆向工具