百度杯CTF二月Web专场writeup

i春秋上的百度杯CTF

Misc Web 1

题目是爆破,简直就是坑,题目提示flag储存在6位变量里,初步猜测要爆破6位变量

打开网页看到源码

通过hello参数专递输入,正则匹配输入是否只有字符或者下划线。否则报错接着一个eval函数输出$$a。两个$符号代表把我们的输入作为变量名,对PHP不熟悉的就直接开始写脚本爆破了,但是实际上PHP有超全局变量的存在,直接把GLOBALS作为参数输入就可以返回可用的全部变量。

Misc Web 2

又是爆破,提示flag不在变量中,做过了第一题以后开始留个心眼

打开网页看到源码

这次是直接输出hello参数的值,很明显爆破是行不通的,题目提示flag也不在变量中,所以超全局变量也没什么作用,但是为了保险起见还是丢个$GLOBALS进去看下,变量flag的值为too young too simple,明显是错误的。因为对输入没有过滤,考虑闭合var_dump($a)函数并构造其他语句,因为flag存在flag.php里,于是考虑打印整个flag.php页面。构造语句?hello=);var_dump(file(“flag.php”));//即可得到flag

Misc Web 3

提示真的是爆破,打开网页得到源码

要想得到flag需要session的nums值大于等于10,只有当value参数的前两位等于whoami的值并且value参数MD5加密后的值的5-9位都要是0才能让nums加1,nums初始为0,session超时时间为120s,除了第一次以外每次请求都会得到下一次的whoami。因此可以得到爆破思路:根据得到的whoami值爆破得到md5加密后5-9位都为0的value值并提交得到下一个whoami值,直到10次以后输出flag。

python脚本如下:

Web include

文件包含漏洞,

打开页面得到源码

学习了一下文件包含的姿势,从phpinfo页面发现启用了allow_url_include函数,可以用php://input输入流执行postdata里的php语句,构造url:?path=php://input,postdata里构造<?php $a=scandir(“./”);print_r($a); ?>,得到页面返回 Array ( [0] => . [1] => .. [2] => dle345aae.php [3] => index.php [4] => phpinfo.php ),继续用php://input,构造postdata:<?php print_r(file(“dle345aae.php”)); ?>,即可得到flag。

Web zone

打开页面提示需要登陆,查看cookie发现有个login=0,改成1之后登陆成功,进去后有个manage页面,URL为*.ctf.game/manages/admin.php?module=index&name=php,像是读取文件,应该可以路径遍历,直接在当前目录读取flag.php,发现flag_is_here,但是无法直接读取到flag。验证是否存在路径遍历,../index后发现页面无变化,进一步测试in../dex发现../被过滤,构造….//index成功绕过。因为无法直接读取到flag,考虑路径遍历+任意命令执行或者路径遍历+任意文件下载。