XCTF:warmup[WriteUP]

2024-02-01 06:36
文章标签 writeup xctf warmup

本文主要是介绍XCTF:warmup[WriteUP],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Ctrl+U查看页面源码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><!--source.php--><br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>

发现注释处的source.php,复制到地址栏进入

获取新的一堆php代码

 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
?> 

访问hint.php

只有一串文字,考虑flag很有可能就在这个‘ffffllllaaaagggg’文件中

回到source.php代码中

分析这段有包含命令的代码:include $_REQUEST['file'];

if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";} 
  1. !empty($_REQUEST['file']:请求是否非空
  2. is_string($_REQUEST['file']:请求是否为字符串
  3. emmm::checkFile($_REQUEST['file']):能否通过checkFile()函数的判定

当三个条件同时为真时,对文件‘file’执行包含


审计checkFile函数

class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}
  1. !isset($page) || !is_string($page):$page变量不存在或者不是字符串
  2. in_array($page, $whitelist):$page变量存在于$whitelist数组中
  3. $_page = mb_substr:截取出一段字符串并串赋值给$_page
  4. in_array($_page, $whitelist):$_page变量存在于$whitelist数组中
  5. $_page = urldecode($page):对$page进行url解码后赋值给$_page
$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));

在上述代码中,新建了一个$_page变量

截取函数:mb_substr选定$page变量为被截取的字符串

从位置下标0开始进行字符串截取,mb_strpos则是字符串查找函数

mb_strpos($page.'?','?'),代表查找$page变量中的‘?’字符并返回‘?’的位置

如果没找到‘?’,则假设‘?’在$page字符最后一位,以此保证该函数有返回值

所以整个mb_substr函数代表者:如果$page中存在‘?’则截取出‘?’之前的字符串

如果‘?’不存在,则$page整体都将被截取出来,则‘?file=******************’

星号中的所有字符串都会被截取出来赋值给$_page


解题思路

构造payload先确定一个固定的头:url/?file=(这段字符串不会赋值到page中)

使$page在$whitelist中,则必须是source.php或者hint.php才判定为真

所以这里需要直接构造为:url/?file=hint.php

接着需要再判定有没有‘?’,所以变成:url/?file=hint.php?

所以当我们构造的url进入checkFile时,$page和$_page的值就会一直等于‘hint.php?’

无论checkFile判定$page或者$_page都一定会存在于$whitelist中

且经过截取后,问号前面的值也一定还会等于‘hint.php?’

最终checkFile的返回值则为真,满足一开始flag触发的三个条件

图穷匕见,在url/?file=hint.php?后面跟上要包含的文件,此题就结束了


在地址栏中构造payload

直接访问:url?file=hint.php?ffffllllaaaagggg出现的是一个空白页

考虑该文件应该不在hint.php的同目录,所以应该是在根目录

这里唯一的方法就是多加几个‘../’,将相对位置调试到根目录

最后:url/?file=hint.php?../../../../../ffffllllaaaagggg

加了5个../后,回退到了根目录,出现flag


flag{25e7bce6005c4e0c983fb97297ac6e5a}

这篇关于XCTF:warmup[WriteUP]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666363

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web数据安全AI 题解WriteUp

文章首发于【先知社区】:https://xz.aliyun.com/t/15442 Lyrics For You 题目描述:I have wrote some lyrics for you… 开题。 看一下前端源码,猜测有路径穿越漏洞 http://139.155.126.78:35502/lyrics?lyrics=../../../../../etc/passwd 简单看

【CTF Web】BUUCTF Upload-Labs-Linux Pass-04 Writeup(文件上传+PHP+.htaccess绕过)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

鹏城杯 2022 取证writeup

简单取证 我们进去首先使用imageinfo pslist screenshot clipboard filescan 等等插件查看相关信息。 这里找到一个password姑且先留着 然后使用filescan找到了一个jpg文件 我们先dump下来 vol -f file.raw --profile=WinXPSP2x86 dumpfiles -Q 0x000000000207e3d

【CTF Web】CTFShow 协议头信息泄露 Writeup(HTTP协议+信息收集)

协议头信息泄露 10 没思路的时候抓个包看看,可能会有意外收获 解法 按 F12 打开开发者工具,点开网络,刷新网页。 flag 在响应标头。 Flag ctfshow{7fa61c00-ff46-4b3e-8d08-1eaafae521cc} 声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶

实验吧唯快不破writeup

原文链接:http://b.zlweb.cc/shiyanbar-wkbp-writeup.html 题目是这个样子的: 点击解题链接显示如下: 下面来分析这道题目,首先从题目和内容可以看出,要想得到key值,必须要快!所以十之八九是考编程题,因为你再快也快不过机器 接着它题目的提示是看看响应头,可以知道我们想要的在响应头里,于是使用brupsuite拦截,查看响应头可以看到如下内

【pwnable.kr】0x02-collision Writeup

题目描述 解法 拉取文件 scp -P2222 col@pwnable.kr:col .scp -P2222 col@pwnable.kr:col.c . 分析源码 #include <stdio.h>#include <string.h>// hashcode值unsigned long hashcode = 0x21DD09EC;// 返回res,对main函数中传参进

ISCC2024 WriteUp

msic Funzip Funzip writeup解题思路 1.打开题目发现是一个base64 2.看了一遍后发现他不是很全于是写一个脚本进行补全 wf = open("5.txt", "w") with open("1 (2).txt", "r") as f:     data = f.read()     data = data.splitlines() for li

【CTF MISC】XCTF GFSJ0290 reverseMe Writeup(图像处理)

reverseMe 暂无 解法 导入 Photoshop。 水平翻转,得到 flag。 Flag flag{4f7548f93c7bef1dc6a0542cf04e796e} 声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。 博主坚决反对任何形式的非法黑

魔法密文 Writeup| DASCTF Oct X 吉林工师

魔法秘文 这题思路还好吧……但是真的属于把我做吐了的那种……具体见后文 首先给了一个zip文件,解压出来一张魔法少女.png,通过binwalk分析出来隐藏了压缩包。 直接用binwalk -e分离发现压缩包大小有问题。 于是使用 hex 编辑器直接删掉了前面的图片部分,得到一个压缩包。 压缩包中有两个文件,flag.txt是加密的,魔法萝莉简体未加密。 提示内容为:密码为32位