一道web入门题
9月27日00:00
这道题是我将hctf_warmup魔改之后得到的,难度比较低,主要还是讲一些web相关的思考方式,所以这篇文章会比较冗长过于详细.(毕竟是给小姑娘入门看的23333).就当M1saka这一次亚萨西了吧
打开题目之后能够得到一张图片和一个可以点击的hint,点开hint之后会转到hint.php,内容如下:
原来题目的界面只有一行短短的提示,告诉你flag在哪个文件里面,在这里我加入了一些其他元素(你想让老爹活不长对不对啊),甚至连按f12这种操作都进行了提示.在这里我们可以将所有信息总结为两个提示:
- flag在一个名字叫M1saka_M1k0t0的文件里
- 我们应该按一下f12试一试
- 有一串奇奇怪怪的字符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入门题的更多相关文章
- 洛谷P1028 数的计算 题解 动态规划入门题
题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- hdu 1465:不容易系列之一(递推入门题)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- POJ3984 BFS广搜--入门题
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20816 Accepted: 12193 Descriptio ...
- 利用简易爬虫完成一道基础CTF题
利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如 ...
- 关于CTFshow中Web入门42-54
0x00前记 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...
- hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)
Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 256000/1280 ...
- poj 2524:Ubiquitous Religions(并查集,入门题)
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23997 Accepted: ...
- 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 ...
随机推荐
- Mysql表,列,库的增删查改
下面是我总结的一些基础的sql知识,主要是为了以后更好的查阅和帮助其他初学的人,同时记录自己的成长,还写了一点稍有难度的sql面试题级别的题目,好了废话不多说,见真题... #创建数据库 CREATE ...
- Spring Cloud:Consul基础知识
一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...
- 用Maven给一个Maven工程打包,使用阿里云镜像解决mvn clean package出错的问题,使用plugin解决没有主清单属性的问题
本来在STS里做了一个极简Maven工程,内中只有一个Main方法的Java类,然后用新装的Maven3.6.3给它打包. 结果,Maven罢工,输出如下: C:\personal\programs\ ...
- github无法访问
打开 C:\Windows\System32\Drivers\etc 找到hosts文件. 添加以下代码 #github 192.30.255.112 github.com git 185.31.16 ...
- CSS 常见样式 特殊用法 贯穿线&徽章&箭头
贯穿渐变线,中间插值 如图: <h3 class="brief-modal-title"> <span>公告</span> </h3> ...
- IOC 原理
SpringIOC实现原理 1. 依赖倒置 假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车.这里就出现了一个“依赖”关系:汽车依赖车身,车 ...
- JAVA之代理1JDK
代理主要有JDK的代理以及CGLIB的代理 代理方式 实现 优点 缺点 特点 JDK静态代理 代理类与委托类实现同一接口,并且在代理类中需要硬编码接口 实现简单,容易理解 代理类需要硬编码接口,在实际 ...
- 一篇带你快速入门ansible和使用
#基本概述 ansible是一款开源自动化工具,基于python paramiko模块开发,分布式,无需客户端 官网网址:https://www.ansible.com 官方文档:https://do ...
- .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- Redis5设计与源码分析读后感(一)认识Redis
一.初识redis 定义 Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的. 高性能的主要原因 1.基于内 ...