CTF

35C3 Junior CTF WriteUp

2018-12-31  本文已影响166人  Eumenides_62ac

Web

flags

打开给了源码:

<?php
  highlight_file(__FILE__);
  $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'ot';
  $lang = explode(',', $lang)[0];
  $lang = str_replace('../', '', $lang);
  $c = file_get_contents("flags/$lang");
  if (!$c) $c = file_get_contents("flags/ot");
  echo '<img src="data:image/jpeg;base64,' . base64_encode($c) . '">';

主要是控制接收的HTTP_ACCEPT_LANGUAGE
通过....//来绕过str_replace('../', '', $lang);。这样....//会变成../
构造:

把图片另存为1.php后可以得到flag。

Mc Donald

访问robots.txt发现DS.Store泄露。


使用工具得到:

图片.png

Logged In

首先登录。


抓包得到验证码。

这里有一个功能,能创建小程序玩。

访问http://35.207.132.47/pyserver/server.py得到源码。
看得出是拿flask写的。
通过阅读源码知道了管理员是admin。尝试用admin登录:

cookie里给了flag:

saltfish

给了源码:

<?php
  require_once('flag.php');
  if ($_ = @$_GET['pass']) {
    $ua = $_SERVER['HTTP_USER_AGENT'];
    if (md5($_) + $_[0] == md5($ua)) {
      if ($_[0] == md5($_[0] . $flag)[0]) {
        echo $flag;
      }
    }
  } else {
    highlight_file(__FILE__);
  }

第一个条件:md5($_) + $_[0] == md5($ua)。绕过方法:


第二个条件:$_[0] == md5($_[0] . $flag)[0]。这里两个字符串的第一个字符必须要一样。
使用python:
from hashlib import md5
import string
import itertools

good = string.ascii_letters + string.digits
for i in itertools.product(good, good, good, good, good):
    hashed = md5("".join(i).encode('utf-8')).hexdigest()
    if hashed[:2] == "0e" and hashed[2:].isdigit():  # 需要字符串0e开头且后面都要是数字
        print(hashed,("".join(i)))

得到byGcY


最后payload:
上一篇下一篇

猜你喜欢

热点阅读