c11056-福建-许荣煌-7.12
1、复习ThinkPHP框架基础知识,重点掌握url传参方式以及获取用户参数的写法
url传参
ThinkPHP 5.0 在没有启用路由的情况下典型的URL访问规则:
http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...]
这种方式也称为PATH_INFO方式,例如:
http://serverName/index.php/index/index/hello/val/value
如果环境只能支持普通方式的URL参数访问,那么必须使用兼容模式访问,如下:
http://serverName/index.php(或者其他应用入口文件)?s=/模块/控制器/操作/[参数名/参值...]
获取用户参数
使用 Request 类
可以通过 Request 对象完成全局输入变量的检测、获取和安全过滤。格式如下:Request::instance()->变量类型('变量名/修饰符');
use think\Request;
public function hello() {
// 获取单个参数(自动识别GET/POST)
$id = Request::instance()->param('id');
// 获取所有参数(过滤后数组)
$params = Request::instance()->param();
// 指定来源(如仅GET)
$name = Request::instance()->get('name');
}
使用助手函数 input()
input('变量类型.变量名/修饰符');
php
// 自动识别请求类型
$id = input('id');
// 指定来源(POST)
$email = input('post.email');
// 带默认值和类型修饰符
$page = input('page/d', 1); // 强制转为整数,默认值1
2、复习ThinkPHP框架漏洞,重点掌握框架代码执行漏洞及工具使用,了解sql注入漏洞及常见不安全写法
代码执行漏洞:
漏洞原理:代码执行漏洞允许攻击者通过特定的输入或参数,在服务器上执行任意PHP代码。这通常发生在当用户输入被直接或间接地用于构建并执行PHP代码时,例如使用eval()、assert()等函数。
常见不安全写法:
使用 eval() 或类似的函数:如果传入的数据包含用户输入,则可能导致代码执行。
动态调用控制器方法:如果方法名来源于用户输入且未经过严格验证,可能会被执行恶意代码。
反序列化不可信数据:如果应用对来自用户的序列化数据进行反序列化操作,可能触发对象内的魔术方法,从而执行任意代码。
SQL注入漏洞原理:
SQL注入漏洞发生在当用户输入没有被正确验证或转义,并直接嵌入到SQL查询中时,使得攻击者能够操纵SQL语句逻辑。
不安全写法:直接拼接用户输入到SQL语句中$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "' AND password = '" . $_GET['password'] . "'";
3、搭建部署脱单交友平台并审计复现任意文件写入漏洞。
环境搭建:
1.上传源码到⽹站根⽬录并解压
2.创建数据库you并导⼊数据库⽂件到数据库
3.修改数据库链接⽂件:config\database.php
文件上传漏洞
审计代码
application\app\controller\Upload.php文件
下面代码通过input函数接收data参数,类型是数组,然后调用base64image函数进行处理
在base64image函数中,直接将上传内容进行base64解码后并保存,没有过滤文件后缀
漏洞复现
根据代码分析,构造payload:
传入文件为以php结尾,内容
符合base64image函数条件:data=data:image/php;base64,PD9waHAgcGhwaW5mbygpOz8+(这里base64编码为PD9waHAgcGhwaW5mbygpOz8+)
防止浏览器对传入+解析掉,需要对传入参数data经过一次url编码。
4、预习phar反序列化漏洞及编号申请
反序列化漏洞原理:
当PHP应用对来自用户的PHAR文件进行反序列化操作时,如果这些文件被恶意构造,则可能触发对象内的魔术方法(如__wakeup()或__destruct()),从而导致任意代码执行。这是因为PHAR文件中的元数据可以包含序列化的PHP对象,而反序列化过程中会尝试实例化这些对象。
CVE编号申请流程:
1.确认漏洞:首先确认发现的是一个新的、未公开的安全漏洞。
2.准备详细信息:准备好漏洞的详细描述,包括影响范围、复现步骤、修复建议等。
3.联系厂商:通常应该先私下通知相关软件的开发商或维护者,以便他们有机会发布补丁。
4.申请CVE编号:
如果漏洞的发现者并且希望获得一个CVE编号,可以通过访问CVE Numbering Authorities (CNAs)列表来找到合适的CNA。
一些大型公司和技术社区如Google、Mozilla、Apache基金会等都是CNAs,可以直接向它们申请。
对于个人研究者来说,也可以通过MITRE Corporation直接申请CVE编号,但需要提供足够的信息证明这是一个新的漏洞。
5.提交报告:根据所选CNA的要求填写表格并提交漏洞报告。
6.等待审批:CNA会对申请进行审核,并决定是否分配CVE编号。
7.公开披露:一旦漏洞被修复并且CVE编号已经分配,可以选择公开披露相关信息,帮助其他用户了解并保护自己免受该漏洞的影响。