[HCTF 2018]WarmUp

做题

小白的起始第一步,打开网页先F12看下源码,以后无论什么网页,没头绪就F12
在这里插入图片描述这里有个注释说要看source.php,html文档里面注释符号是用如上方式使前端不显示该信息,初阶web题一般采用这种方式进行提示,那我们就访问一下source.php
在这里插入图片描述直接是源码,那就审计就完事了,这里刚刚入门的小白一定要注意,遇到不懂的函数一定要百度,这可不是高考英语完形填空,你看上下文就能明白的,多积累以后自然有用,这里is开头的函数就是字面意思,意思就是是不是后面的类型,注意前面的是函数,调用从后面的主函数开始,不要开始傻傻的看函数不明所以(就是我),先看下面的变量定义
在这里插入图片描述观察发现这里接受了一个变量,$_REQUEST忘记了,查一查如下

request_order:这个配置项设置 PHP 将 GET, POST 和 Cookie 中的哪些添加到 $_REQUEST 中,并且指定了填充时的顺序。如果 request_order 设置为空,则填充的顺序会以 variables_order 配置项中的顺序为准。例如,设置为 request_order = “GP” 时,代表 $_REQUEST 将包含 $_GET 和 $_POST 的值,并且当 $_GET 和 P O S T 中 的 键 相 同 时 , _POST 中的键相同时, POST_POST的值将覆盖 $_GET 的值。

所以这里就先传GET值试一试,毕竟简便一些,这里传什么呢,打开hint.php看一下
在这里插入图片描述

发现该信息,再审计整体函数,传一个参,必须要有且是字符串,通过checkfile检验才能包含,而这个checkfile是一个白名单,只能包含两个php文件,贴两个忘记用法的函数,也就是截取你的输入看是不是白名单里的,三次检查只要有一次是对的就行了,这里出题人考虑的很周到,所以你输入url编码还是直接输入都行

mb_strpos (haystack ,needle ):返回要查找的字符串needle在别的字符串hayback中首次出现的位置
string mb_substr( string s t r , i n t str, int str,intstart[, int l e n g t h [ , s t r i n g length[, string length[,stringencoding]] );截取字符。从str的开始位置计算。第一个字符的位置为0。第二个字符的位置是1,依此类推。

这里为什么mb_strpos函数后面有两个问号呢,经过同学的好心提醒,发现前面那个.?是拼接一个?在输入之后,这样就保证了当你仅仅只输入source.php时也能正常解析,当你输入?后在后面加上问号也不影响第一个问号的解析,该函数是返回第一个出现的位置,这里是不是也变相提醒是使用远程包含了呢。
但是这实在是不好绕过,原来自己这么菜,百度启动,经过查阅资料,得到这是phpmyadmin 4.8.1的一个远程文件包含的漏洞,仔细一想,其实也能分析出来,按照问号截取,检查问号前面的字符串,我问号前面给一个合法输入source.php然后后面写一个我想要的东西不就行了嘛,这里的漏洞就是你可以使用…/…/访问web目录上级文件夹,一般是不行的,所以构造payload
在这里插入图片描述
成功文件包含得到flag
在这里插入图片描述

验证

这个地方还是有难度,后来发现主要是在于环境问题,首先一样,phpstudy直接起一个环境,里面放如下文件
在这里插入图片描述1.php就是我们看到的源码,2.php用来包含,source里面什么都不用写,避免报错而已,flag.txt随便写个flag,我们在这里加一个包含路径方便验证
在这里插入图片描述

注意,这里环境最好在Linux虚拟机上配置,在本机上配置会出现各种错误
例如:在这里插入图片描述
尝试了很久未解决,估计是编码的问题,按照上文分析应该是一重两重和不url编码应该都可以,但是在Windows上只能双重编码,所以转移阵地,成功包含在这里插入图片描述这里也就是把source.php/当成一个路径再…/回退读取flag.txt,没有漏洞的正常情况是这样,但是试一试就知道这里如果再输入…/就会报错,这就是没有远程包含的漏洞,但是利用上文漏洞就可以一直读取到根目录,具体该漏洞成因可以自行百度。

这里解释一下,有些术语可能刚刚入门看不懂也没事,例如上文的文件包含,但是诸如url,html之类非常基础的东西,还是需要先学一下,不然后面学习会有点困难

posted @ 2021-08-15 11:34  pinfu  阅读(309)  评论(0)    收藏  举报