[HCTF 2018]WarmUp

打开题目

image 30 - [HCTF 2018]WarmUp

查看源代码

image 31 - [HCTF 2018]WarmUp

访问这个文件 发现大串代码

image 32 - [HCTF 2018]WarmUp

这题不弹出图片的条件有三个

image 33 - [HCTF 2018]WarmUp

1.file输入的内容不为空

2.file输入的内容为字符串

3.file输入的内容必须满足class类中的checkFile函数返回值为true

否则就输出图片

image 34 - [HCTF 2018]WarmUp

这段代码从上往下看

定义了一个class类 名字叫emmm

函数名为checkFile 白名单whitelist中有source和hint

image 36 - [HCTF 2018]WarmUp

先查看前两个if语句

image 37 - [HCTF 2018]WarmUp

第一个if的意思是 $page不能为空 并且$page为字符串也不能为空

否则返回flase

第二个if的意思是$page中的内容存在于白名单中 也就是说 file输入的内容包含hint 和 source

然后返回true

$_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')

这段代码的意思是将$page进行筛选从第0位开始一直到第一次问号出现的位置结束进行截取传值给$_page

mb_substr用法:
mb_substr( str, start[, length[, encoding]] );
mb_substr 执行一个多字节安全的substr()操作基础上的字符数。从str的开始位置计算。第一个字符的位置为0。第二个字符的位置是1,依此类推。
str 被截取的母字符串。
start开始位置。
length 返回的字符串的最大长度,如果省略,则截取到str末尾。
encoding 参数为字符编码。如果省略,则使用内部字符编码。
例子mb_substr(1234567890,0,7,utf-8)
输出的结果为 1234567
mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
语法:
mb_strpos (haystack ,needle )
haystack:要被检查的字符串。
needle:要搜索的字符串。
例
mb_strpos(1234567890,9)
输出的结果为 8

第三个if是对$_page的内容进行判断 判断$_page的内容的值是否存在于白名单中

 $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );

这段代码是对$page进行url解码然后赋值给$_page

然后将$_page进行筛选从第0位开始一直到第一次问号出现的位置结束进行截取传值给$_page

最后一个if的意思是判断$_page的内容的值是否存在于白名单中

思路

使用file进行传值 传入的值必须不为空 hint.php或source.php放到第一位后面要跟上问号

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

payload2=source.php%3F%2F..%2F..%2F..%2F..%2Fffffllllaaaagggg

payload3=source.php%253f/../../../../ffffllllaaaagggg(因为浏览器会自动进行url解码而php文件里面会再次解码所以我们需要对?进行两次url加密 )

得到payload

image 39 - [HCTF 2018]WarmUp

Thinkphp漏洞复现

上一篇

[极客大挑战 2019]Havefun

下一篇
评论
发表评论 说点什么
还没有评论
33