PHP-ThinkPhp漏洞学习-MVC模型路由访问模版渲染安全写法版本漏洞(2024小迪安全Day31)
TP框架-开发技术
参考:https://www.kancloud.cn/manual/thinkphp5/118003
1、配置框架-导入使用(入口配置,数据库配置,调试开关等)
2、路由访问-URL访问
参考文档的URL访问板块
ThinkPHP5.0在没有启用路由的情况下典型的URL访问规则是:
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值…]
访问的URL为http://192.168.43.28:83/index.php/index/index/test
原生访问开发
public function test1(){$x=$_GET['x'];return $x;}
访问的URL为http://192.168.43.28:83/index.php/index/index/test1?x=888
这样的开发是不能使用ThinkPHP的访问规则的
不用原来的目录,尝试自己新建功能模块
访问地址http://192.168.43.28:83/index.php/admin/index/login
3、请求变量-数据接受
请求对象,提交方法,助手函数等
4、数据库操作-应用对象
引用DB类,基本查询,助手函数等
5、前端页面渲染-MVC模型
引擎配置,渲染变量,模版输出等
TP框架-写法安全
1、自写代码逻辑
例子1:自己不合规的代码写法
public function testsqlin1(){$con=mysqli_connect('localhost','root','123456','phpstudy','3306');$id=$_GET['id'];$sql="select * from admin where id=$id";$data=mysqli_query($con,$sql);if(mysqli_num_rows($data) > 0){echo "ok";$row = mysqli_fetch_assoc($data);echo 'Username: ' . $row['username'] . '<br>';echo 'Password: ' . $row['password'] . '<br>';//var_dump($data);//exit();}else{//判断用户登录失败echo '<script>alert("登录失败!")</script>';}}
例子2:一半框架一半自写代码(可接收sql语句)
public function testsqlin2(){$id=request()->param('id');$data=Db::query("select * from admin where id=$id");return json($data);}
例子3:框架标准内置代码写法(不可接收)
public function testsqlin3(){$id=request()->param('id');$data=Db::table('admin')->where('id',$id)->select();return json($data);}
2、框架版本安全
如果用的框架标准内置代码写法还有没有办法绕过?有,用版本安全
https://github.com/Mochazz/ThinkPHP-Vuln
用法级别绕过(必须以特定写法才能触发)
开发者按照框架提供的某个 API/模式去写时,若该 API 设计存在缺陷(比如内部未做严格参数校验、在特定上下文拼接 SQL、或错误使用反序列化),攻击者才能利用。换言之:漏洞依赖于“脆弱的编码习惯/特定内置写法”。
版本级别漏洞(通杀某版本)
框架核心或组件在某个版本内存在严重缺陷(如不安全的反序列化入口、命令执行链、路由解析缺陷等),无论开发者是否遵循某特殊写法,只要应用使用该框架版本并暴露入口就可能被利用。
TP框架-代审案例:
WeMall-TP5框架开发(站长之家源码获取)
为伪静态(配置注意按照下面的步骤)