CTF修仙录

CTF通关录-fakebook

打开题目
在这里插入图片描述
两个选项,给我感觉可能就是对注入的利用:
先试试login
这里用sqlmap跑一下:无果
再试试join

这里注册一般都是往数据库插入数据,这种无回显的判断注入,一般都是用时间注入

构建语句:测试了一下时间注入
db.php文件报错了,这里我不想去摸清他的sql语句,因为一旦语句正确,就会为你注册一个账号,又得重新起题目环境,很麻烦
注册一个账号试试
在这里插入图片描述
把御剑放在后台跑后台路径
然后点开了刚注册的账号:
在这里插入图片描述又看到熟悉的注入点了
在这里插入图片描述
在这里插入图片描述还好,没狗,不然祭出打狗棍法伺候!
存在注入数字型注入点:
直接手工爆库和字段:
在这里插入图片描述漂亮!!!你不这样我拿flag还怪不好意思的,测试了一下,过滤了关键字 union select,尝试内联查询绕过:
在这里插入图片描述成了鸭!,后面就是一顿操作了,查看了当前数据库的用户
在这里插入图片描述
root用户,爆出了物理路经,nice鸭,可能有读写文件权利哟
后面查看了有多少个数据库
在这里插入图片描述这个test数据库?被黑了?算了,我是来拿flag的
查看了当前数据库存在哪些表:
在这里插入图片描述
看一下user表中的字段
在这里插入图片描述
这里存放着就是我刚才注册的账号
都看了一遍,data这个字段有点特殊,这里回顾上面还好没有继续探寻插入语句结构
在这里插入图片描述
把我刚才注册的账号信息进行了序列化,那么就可以猜测一定有一个用户类,但注册一名用户时,改类就实例化,传入用户信息数据,序列化实例对象,存入数据库!

但是这里并没有flag的信息!
这里我尝试写入webshell
在这里插入图片描述
漂亮!!!,没有写的权利
在这里插入图片描述
还好可以读!不过线索断掉了,就那么几个文件,看着也无法利用,打开御剑看看结果
flag.php,user.php 这个文件返回的状态码200
在这里插入图片描述
读取flag文件
在这里插入图片描述
flag到手,但还有个user.php,我想看看里面都有啥
在这里插入图片描述好家伙果然有Userinfo这个类
简单代码审计了一下
看一下关键性代码

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

        curl_setopt($ch, CURLOPT_URL, $url);//设置要抓取的网页
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置模式,保存进字符串,还是输出到屏幕,返回原生的(RAW)输出
        $output = curl_exec($ch);//开始执行curl
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);//获取最后一次传输的相关信息。
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);//关闭curl

        return $output;
    }

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

    public function isValidBlog ()//检查blog地址是否为标准形式
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}  

这里的关键点在于get()没有进行任何过滤,我既可以从远程加载网页进来,也可以加载本地文件,有点类似于远程文件包含,和本地文件包含,这里远程加载文件无法利用,因为curl只会抓取数据,并不会执行里面的代码
但是加载本地文件就有用了,我们已经知道flag物理路径!
因为看到了unserialize error,再结合刚才查询的data是一串序列化字符串,
可以想到代码执行逻辑,这里查询语句从数据库拿出序列化字符串,然后再进行反序列化,再输出到屏幕。
就可以利用一下反序列漏洞:
生成反序列化字符串:
‘O:8:“UserInfo”:3:{s:4:“name”;s:1:“1”;s:3:“age”;i:1;s:4:“blog”;s:29:“file:///var/www/html/flag.php”;}’
这里还用到了file://协议,标准本地文件读取
通过查询语句,把反序列化字符串送去反序列化,然后这个字符串就会利用类中的get()方法,就会加载"file:///var/www/html/flag.php"文件里的内容,这样flag就出来了

完美!!!

OK,顺利拿到flag
在这里插入图片描述舒服了,总结一下,信息收集很重要,在漏洞利用中可以打组合拳,这里就的就是ssrf读取本地文件,这里还是好气啊,root居然没有写文件的权利,要是拿个shell
就更好了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0XAXSDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值