基于PHP开源项目的代码审计
PHP开源项目在线银行系统(online-banking-system)的代码审计
| 项目信息 | 内容 |
|---|---|
| 报告名称 | 在线银行系统审计报告 |
| 审计对象 | online-banking-system |
| 审计日期 | 2025年11月6日 - 2025年11月7日 |
| 审计人员 | MosHSasA |
| 报告日期 | 2025年11月7日 |
1.1 执行摘要
- 审计概述:本次审计挑选了该项目里三个漏洞来进行分析,所用到的审计工具为——“rips”。
- 漏洞统计
风险等级 漏洞数量 严重 3 - 整体风险评估:因为只挑选了部分漏洞进行分析,这里不做整体评估。
- 修复建议摘要:立即修复上述所有漏洞。
1.2 漏洞详情
1.2.1 VULN - 001 - 反射型XSS漏洞 - /edit_customer.php?cust_id=n
漏洞名称:反射型XSS
风险等级:严重
漏洞文件:
/edit_customer.php相关函数/代码行:
- 第16行:
$_SESSION['cust_id'] = $_GET['cust_id']; - 第68行:
<?php echo $_SESSION['cust_id'] ?>
- 第16行:
漏洞描述:在当前文件中,代码直接从$_GET超全局数组中获取id参数,并为经过任何过滤就在第68行通过
echo函数输出。攻击者可以通过修改URL传入的参数来执行任意XSS的Payload。漏洞验证步骤:
- 访问正常URL:
http://该项目部署的IP:端口/edit_customer.php?cust_id=1。
- 构造攻击URL:
http://该项目部署的IP:端口/edit_customer.php?cust_id=<script>alert("XSS")</script>。
- 观察页面返回,成功弹窗。
- 访问正常URL:
修复建议:建议对输出进行HTML实体编码。
修改第68行的代码,对输出的内容使用PHP内置函数
htmlspecialchars()进行转义。修改后的代码如下:
1
echo htmlspecialchars($_SESSION['cust_id'], ENT_QUOTES, 'UTF-8');
原理:这个函数的作用是会将特殊字符(例如
<、>、"、'、&)转换为HTML实体(例如:<、>)。这样即使攻击者输入<script>alert("XSS")</script>,它也会被原样显示为文本,而不会被执行。
1.2.2 VULN - 002 - 存储型XSS漏洞 - /post_news.php
漏洞名称:存储型XSS
风险等级:严重
漏洞文件:
/post_news_action.php相关函数/代码行:
- 第22行:
$headline = mysqli_real_escape_string($conn, $_POST["headline"]); - 第23行:
$news_details = mysqli_real_escape_string($conn, $_POST["news_details"]); - 第38行:
echo "Error: " . $sql0 . "<br>" . $conn->error . "<br>"; - 第39行:
echo "Error: " . $sql1 . "<br>" . $conn->error . "<br>";
- 第22行:
漏洞描述:在当前文件中,代码直接从先是从表单中获取需要插入进数据库中的数据,但是并未做任何的过滤,再看第38、39行当攻击的输入中包含了
<script>时,导致插入操作失败,在浏览器回显的错误信息中会包含用户刚刚输入的内容,那么JS代码将会在浏览器执行。漏洞验证步骤:
- 访问正常页面:
http://该项目部署的IP:端口/post_news.php
- 在正常的新闻发布页面,我们可以直接构造恶意JS代码为标题或者内容。
- 在提交之后,当我们访问
/news.php页面(新闻浏览页面)时,就会看到弹窗。
- 访问正常页面:
修复建议:和上个漏洞一样对错误回显进行HTML实体编码。
1.2.2 VULN - 003 - SQL注入漏洞 - /send_funds.php
漏洞名称:SQL注入漏洞
风险等级:严重
漏洞文件:
/send_funds.php相关函数/代码行:
- 第12行:
$sql0 = "SELECT * FROM customer WHERE cust_id=".$id;
- 第12行:
漏洞描述:将从$_GET超全局数组中获取id参数未加任何过滤直接拼接在SQL语句之后。这导致攻击者可以直接进行SQL语句注入。
漏洞验证步骤:
- 进入正常的页面。
- 在请求参数中注入恶意SQL代码(已经尝试过联合注入和报错注入均未得到结果,所以这里直接演示盲注)。
- 由此攻击者可以得到更多的数据库信息。
修复建议:使用预处理语句。









