9月27日00:00

  这道题是我将hctf_warmup魔改之后得到的,难度比较低,主要还是讲一些web相关的思考方式,所以这篇文章会比较冗长过于详细.(毕竟是给小姑娘入门看的23333).就当M1saka这一次亚萨西了吧

  打开题目之后能够得到一张图片和一个可以点击的hint,点开hint之后会转到hint.php,内容如下:

   原来题目的界面只有一行短短的提示,告诉你flag在哪个文件里面,在这里我加入了一些其他元素(你想让老爹活不长对不对啊),甚至连按f12这种操作都进行了提示.在这里我们可以将所有信息总结为两个提示:

  1. flag在一个名字叫M1saka_M1k0t0的文件里
  2. 我们应该按一下f12试一试 
  3. 有一串奇奇怪怪的字符QWN0dWFsbHkgSSBraW5kIG9mIGxpa2UgdGhpcyBnaXJs

  首先我应该解释一下为什么要按f12:  f12的效果和右键并点击查看页面源代码的功能都是一样的,能够读取到执行当前页面的php或者html,css,JavaScript文件的源码,能够看到一些有效的信息.我知道某个人看到这里一定会产生疑问:php是啥,html是啥,css是啥JavaScript又是啥.......我用自己的语言去解释可能会模糊,还不如照搬百度:

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域;

HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字图形动画声音表格链接等。

css:层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。

  其中PHP是我们需要重点学习并且掌握的一种语言,是一种存在并且作用于服务端(服务器)的后端语言;html,css和JavaScript都是前端语言,进行客户端(即你所看到的浏览器页面)的显示以及数据处理.举个栗子:你所看到的我的博客界面,有很多的专栏,很多的图片,各种颜色的文字,这些都是html,css以及JavaScript的效果.(比如你在我的文章空白处点击会有社会主义核心价值观字幕出现的效果,这就是一段JavaScript代码实现的.)而你去登录一个网站,输入用户名密码或者查询一条信息时,你所输入的数据会传送到服务器上面,由PHP进行处理并且返回登陆结果或者查询结果.我觉得这一段看完之后你应该对这几个以前从来都没有听说过的东西稍微有一点了解了.

  那一串奇奇怪怪的字符是一个base64加密之后的字符串,你可以百度一个在线解密base64网站,把上面那一串东西扔进去看看结果是什么.(这段文字自动变色)

  于是我们回到刚开始的界面,按下f12能看到源码里面有一段注释:

  提醒了一个奇奇怪怪的东西:source.php,如果你联想能力足够丰富的话大概能够明白这是一个PHP类型的文件.source在英文中的意思是源,所以这是源文件,在任何web服务中源文件是最重要文件.但是我们如何去读取他呢?

  你在打开hint时有没有注意到,hint界面的网址与最开始有一些不同,多了一个?file=hint.php .显然这是一个文件读取的方式.在web中我们称之为GET传参,即我们使用GET方式向file这个参数传递一个值,提交到服务器去检查并且执行.GET方式比较简单,直接在url(即你所理解的网址)最后加一个英文问号"?"(中文的不要,岂可休)并且接上参数以及等号直接进行赋值.如果赋值多个参数就使用"&"进行拼接,从而达到一次性传递多个参数的目的.举个例子如果我们百度一个漂亮姐姐的名字会在url里面看到:

  在url的位置我们看到wd(盲猜是word的意思)这个参数是漂亮小姐姐的名字,后面跟了一堆我们无法得知是什么东西的参数(我要是知道我早就把百度给黑了).

  到这里我们可以将刚才的url改成http://47.114.56.100:7777/index.php?file=source.php,从而读取到source.php的内容:

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

  写到这里已经够你看一会儿的了,有什么看不懂的来问我吧,我先睡了23333,剩下的过两天写。

  九月二十九日,院科协帐篷,开始用爱发电。

  

  

  

一道web入门题的更多相关文章

  1. 洛谷P1028 数的计算 题解 动态规划入门题

    题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...

  2. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

  3. hdu 1465:不容易系列之一(递推入门题)

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. POJ3984 BFS广搜--入门题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20816   Accepted: 12193 Descriptio ...

  5. 利用简易爬虫完成一道基础CTF题

    利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如 ...

  6. 关于CTFshow中Web入门42-54

    0x00前记 ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...

  7. hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  8. poj 2524:Ubiquitous Religions(并查集,入门题)

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23997   Accepted:  ...

  9. hdu 1754:I Hate It(线段树,入门题,RMQ问题)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. MPL心得

    1.右值引用变量是个左值,把一个右值引用参数继续传递给其他函数调用时,需要使用std::forward否则会按照左值匹配 2.const T和T const在匹配模板参数的时候是相同的,而const ...

  2. Mac本地生成SSHKey的方法

    1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除,   也可以直接删除, 2.生成新的秘钥, 命令如下 $ssh-keygen ...

  3. leetcode刷题-83删除排序链表中的重复元素

    题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 实现 # Definition for singly-li ...

  4. Spring的循环依赖,学就完事了【附源码】

    目录 啥是循环依赖? Spring可以解决循环依赖的条件 Spring如何去解决循环依赖 SpringBean的创建流程 Spring维护的三级缓存 getSingleton getSingleton ...

  5. oracle数据处理之sql*loader(二)

    目录 SQL*Loader对不同文件及格式的处理方法 2.1 Excel文件 一般的Excel文件最大行数不超过65536行,说明数据处理量并不大,处理Excel的方式是将其另存为CSV格式文件,然后 ...

  6. [LeetCode]322. 零钱兑换(DP)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coin ...

  7. asp.net core 从 3.1 到 5.0

    asp.net core 从 3.1 到 5.0 Intro 就在前几天,微软宣布了 .NET5 发布了 RC1 版本,这也意味着 .NET5 的开发基本稳定了,正式发布之前,不会再新增新的 Feat ...

  8. 可以定时的FTP FTP如何实现每天定时上传文件

    FTP上传一般都是一次性上传,我们在工作中总有一些文件,需要每天上传一次.有这么一款ftp上传工具是具有定时功能的.每天自动定时上传省时省力还操作简单. 工具名称:服务器管理工具(下载地址:http: ...

  9. 【性能优化】面试官:Java中的对象都是在堆上分配的吗?

    写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...

  10. 容器云平台No.9~kubernetes日志收集系统EFK

    EFK介绍 EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案. 通过EFK,可以把集群的所有日志收集到El ...