前言:
这次的比赛一共有六道web题,接下我会详细介绍解题的步骤以及思路,以便让小白和没有接触过这类题型的小伙伴们能读懂。
第一题,nani
1、打开网页啥都没有,内容一片空白啥。这时候我们应该按F12去查看网页源码。往往很多提示和关键性信息都藏在这里。如图所示:
2、得到提示:./index.php?file=show.php ;看到关键字file,下意识想会不会存在文件包含呢?不急,我们先去访问一下这个链接。如图所示:
3、得知user.php的提示,我们接着再去访问user.php会发现又得到空白页面。不急,我们回头研究一下./index.php?file=show.php,检测是否存在文件包含漏洞。
构造一下payload:
/index.php?file=php://filter/read=convert.base64-encode/resource=user.php
4、成功返回了base64加密后user.php的源代码,说明思路是正确的,我们继续往下走。
base64解密后得到如下代码:
5、开始代码审计,主要有两个要注意的地方,wakeup()函数和unserialize()函数。之所以关注他们,是因为这两个函数在一起容易引发__wakeup()函数漏洞。构造payload:cmd=O:7:“convent”:3:{s:4:“warn”;s:13:“system(“ls”);”;}
解释一下payload吧:
传入的参数是cmd,是post类型的;
O:后面的数字7表示类"convent"的长度
3:表示的是错误的变量的数量
s: 表示的是字符串的长度
6、在hackbar执行构造好的payload:
7、成功执行了ls命令,返回了目录信息。所以我们用同样的方法构造payload得到flag
第二题,random
1、代码审计后,可以知道代码可以传入三个参数:hello,seed,key;
hello参数作用:调用文件flag.php;
seed参数的作用:为mt_scrand()函数选定种子。种子确定了,mt_rand()就可以生成相应的随机数了。
key参数作用:传入的值要等于mt_rand()生成后的随机数。
2、可以利用php伪随机数漏洞,我们通过如下编写脚本:
3、通过这几行代码就可以把我们选定的种子数(123456)对应的随机数打印出来,然后就可以构造我们payload了。(提醒一下小白,php文件可以放到我们的虚拟机的靶机服务器,然后去访问它就会输出结果了。。。)
4、访问网页得到:1863022934
5、构造payload:/?hello=file(‘flag.php’)&seed=123456&key=1863022934
得到flag: