BUUCTF------[HCTF 2018]WarmUp

2024-03-05 04:28
文章标签 buuctf 2018 ------ hctf warmup

本文主要是介绍BUUCTF------[HCTF 2018]WarmUp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开局一个表情,源代码发现source.php

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
?>

在这里插入图片描述

知识点

1.函数

empty:检查变量是否为空,存在值返回true,反之falseisset:检查变量是否设置,且不为空,存在值返回true,反之falseis_string:检查一个变量是否是字符串。如果是字符串,则返回 true;否则返回 false。in_array:检查一个值是否存在于数组中。如果值存在于数组中,则返回 true;否则返回 falsemb_strpos:在字符串中查找另一个字符串的首次出现位置mb_substr:返回字符串截取的一部分
$subStr = mb_substr($str, 0, 3, 'UTF-8'); // 从索引 0 开始,截取长度为 3 的子串  

分析源码

if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  

这段代码表示:变量file要满足三个条件,三个都返回True,才能进行文件包含include,第一个和第二个容易满足;第三个分析chekFile方法。

代码1.

 $whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;

创建$whitelist列表,给source和hint分别赋值给source.php和hint.php,满足变量$page既不能为空,又必须是字符串

代码2.

            if (in_array($page, $whitelist)) {return true;}

判断变量$page的值是否在$whitelist列表中,如果在则返回true,反之false。

代码3.

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

这段代码表示:在$page中,从最开始的位置去匹配?,然后返回?前的所有字符串(不包括?)
在这里插入图片描述

代码4.

            $_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}

将$page进行url解码,然后进行?截取,判断是否在列表中

payload

通过上面的代码分析,payload中必须有hint.php或source.php,(参考上面的代码1和代码2)和,因为有?,才能进行if判断。
它还要进行url解码,但是传进的值,经过url解码后,还是它本身。

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

在这里插入图片描述

这篇关于BUUCTF------[HCTF 2018]WarmUp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775329

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrl+z 如果不小心撤销多了,可以用 Ctrl+Shift+Z 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c++的标准程序库中的string,头文件是#include<string> 这是base64的加密函数 std::string

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

vulhub GhostScript 沙箱绕过(CVE-2018-16509)

1.执行以下命令启动靶场环境并在浏览器访问 cd vulhub/ghostscript/CVE-2018-16509 #进入漏洞环境所在目录   docker-compose up -d #启动靶场   docker ps #查看容器信息 2.访问网页 3.下载包含payload的png文件 vulhub/ghostscript/CVE-2018-16509/poc.png at

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间 方法1 import datetimeorigin_date_str= "2019-07-26T08:20:54Z"utc_date = datetime.datetime.strptime(origin_date_str, "%Y-%m-%dT%H:%M:%SZ")loca

redis 实现单位时间内错误记录 时间到key值就被清除------最近脑子不好使觉得还是写个博客试试

直接在客户端操作的, 所以需要redis的简单命令  去对比JAVA客户端jedis的命令就行   添加---set     格式 set  key  value  EX time(秒)   如果这个time不添加的话 ,那默认就是 永久 获取--get    格式 get key  ---查看剩余时间    格式 TTL key ---实现key实现自增: inrc key

【数据结构】LinkedList ------ java实现

知识框架图:   LinkedList是一种常用的数据结构。底层是一个双向链表。每个节点包含数据以及指向前一个节点和后一个节点的引用。    一:LinkedList的使用    1.1 LinkedList的构造方法 方法 解释LinkedList() 无参构造public LinkedList(Collection<? extends E> c) 使用其他集合容器中