BUUCTF[HCTF 2018]WarmUp 1

1.HCTF2018(代码审计)

分析过程

打开之后看见源代码有source.php,直接看source.php

BUUCTF[HCTF 2018]WarmUp 1_第1张图片

看了一会代码是发现有file等,就想到了文件上传,然后看代码。

首先是有一个checkfile函数

BUUCTF[HCTF 2018]WarmUp 1_第2张图片

先定义了白名单,只有source.php和hint.php。之后是一个判断是否是空和字符串的if,不是就返回false,还有一个判断,是否在白名单里的if。再往下看,
在这里插入图片描述

mb_substr(str1,start,[length][,[str2]]):是在str1从start开始length为长度截取字符串,str2是表示字符编码
mb_strpos(str1,str2):查找str2在str1中出现的位置

所以可以看出_page=page,之后再判断一下 _page是否在白名单中

BUUCTF[HCTF 2018]WarmUp 1_第3张图片

这一步是url解码,将page解码,此时_page就是解码过的page,接下来和上面是一样的,但不同的是对 _page操作,之后又是白名单判断,是就true,不是就false。

最后就是文件上传基本操作
BUUCTF[HCTF 2018]WarmUp 1_第4张图片

同时还有hint.php
BUUCTF[HCTF 2018]WarmUp 1_第5张图片

解题

所以需要考虑的就是如何绕过

首先是有3个true是可以返回的,但只有最后两个是可以的。

此时可以构造第一个payload在第一个地方返回

file=hint.php?/../../../../../../../../ffffllllaaaagggg

第二个payload,这里第二个是进行二次解码的,第一次是发去服务器,服务器解析一次,第二次是urldecode。所以可以逆推回两次前的是%253f

BUUCTF[HCTF 2018]WarmUp 1_第6张图片

file=hint.php%253f/../../../../../../../../ffffllllaaaagggg

最后得解

BUUCTF[HCTF 2018]WarmUp 1_第7张图片

你可能感兴趣的:(BUUCTF[HCTF 2018]WarmUp 1)