拐弯抹角FALSE-实验吧
<?php
// code by SEC@USTCecho '<html><head><meta http-equiv="charset" content="gbk"></head><body>';$URL = $_SERVER['REQUEST_URI'];
//echo 'URL: '.$URL.'<br/>';
$flag = "CTF{???}";$code = str_replace($flag, 'CTF{???}', file_get_contents('./index.php'));
$stop = 0;//这道题目本身也有教学的目的
//第一,我们可以构造 /indirection/a/../ /indirection/./ 等等这一类的
//所以,第一个要求就是不得出现 ./
if($flag && strpos($URL, './') !== FALSE){$flag = "";$stop = 1; //Pass
}//第二,我们可以构造 \ 来代替被过滤的 /
//所以,第二个要求就是不得出现 ../
if($flag && strpos($URL, '\\') !== FALSE){$flag = "";$stop = 2; //Pass
}//第三,有的系统大小写通用,例如 indirectioN/
//你也可以用?和#等等的字符绕过,这需要统一解决
//所以,第三个要求对可以用的字符做了限制,a-z / 和 .
$matches = array();
preg_match('/^([0-9a-z\/.]+)$/', $URL, $matches);
if($flag && empty($matches) || $matches[1] != $URL){$flag = "";$stop = 3; //Pass
}//第四,多个 / 也是可以的
//所以,第四个要求是不得出现 //
if($flag && strpos($URL, '//') !== FALSE){$flag = "";$stop = 4; //Pass
}//第五,显然加上index.php或者减去index.php都是可以的
//所以我们下一个要求就是必须包含/index.php,并且以此结尾
if($flag && substr($URL, -10) !== '/index.php'){$flag = "";$stop = 5; //Not Pass
}//第六,我们知道在index.php后面加.也是可以的
//所以我们禁止p后面出现.这个符号
if($flag && strpos($URL, 'p.') !== FALSE){$flag = "";$stop = 6; //Not Pass
}//第七,现在是最关键的时刻
//你的$URL必须与/indirection/index.php有所不同
if($flag && $URL == '/indirection/index.php'){$flag = "";$stop = 7; //Not Pass
}
if(!$stop) $stop = 8;echo 'Flag: '.$flag;
echo '<hr />';
for($i = 1; $i < $stop; $i++)$code = str_replace('//Pass '.$i, '//Pass', $code);
for(; $i < 8; $i++)$code = str_replace('//Pass '.$i, '//Not Pass', $code);echo highlight_string($code, TRUE);echo '</body></html>';
<?php
if (isset($_GET['name']) and isset($_GET['password'])) {if ($_GET['name'] == $_GET['password'])echo '<p>Your password can not be your name!</p>';else if (sha1($_GET['name']) === sha1($_GET['password']))die('Flag: '.$flag);elseecho '<p>Invalid password.</p>';
}
else{echo '<p>Login first!</p>';
?>
拐弯抹角FALSE-实验吧相关推荐
- Python实验及注意点总结
第一次上机 实验一 # 随机生成两个小于100的整数,打印其中一个数的数据类型和存储地址, 求这两个数的和.差.积.商.幂运算. import randomx = random.randint(1, ...
- 可视化文本数据—词云
"词云"这个概念由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)于提出,词云是一种可视化描绘单词或词语出现在文本数据中频率的方式,它主要是由随机分布在 ...
- hasattr判断是不是可迭代类型的方法
实验一.print(hasattr(1,"len")) print(hasattr(list,"len")) print(hasattr("dddd& ...
- IOC容器和Bean的配置实例
实验1: <!--实验1:通过IOC容器创建对象,并为属性赋值 --> <!-- 需要由IOC容器创建对象的全类名 --> <!-- 为了便于从IOC容器中获取book对 ...
- spark 写本地文件_(纯干货建议收藏)一次GC引发的Spark调优大全
上一篇Tungsten On Spark-内存模型设计总结了Spark内存设计相关的知识点,本篇会快速为读者复习一下JVM相关的知识点,然后基于线上的GC调优对spark整体的调优做一个汇总,希望能让 ...
- es 创建索引_es的基本原理和操作文档
来源:https://blog.csdn.net/wanbf123/article/details/81504097 一.背景知识 1.搜索的分类 我们想要寻找某些信息的时候,一般会直接去百度.谷歌. ...
- python3、pycharm的安装以及python基本语法
一.python的安装和环境编译 1.先下载安装包,可以去官网下载源码安装包,并进行解压 2.解决编译过程中需要的依赖包:gcc.zlib.zlib-devel.openssl-devel yum i ...
- torch.Tensor.requires_grad属性的使用说明
参考链接: torch.Tensor.requires_grad 原文及翻译: requires_grad() 方法: requires_grad()Is True if gradients need ...
- Android热修复之Tinker集成最新详解
前言 该文章属于初级集成详解,侧重Tinker的使用,如若想深入了解其原理请自行查阅相关文档Tinker相关文档 当前市面的热补丁方案有很多,其中比较出名的有阿里的 AndFix.美团的 Robust ...
- Android 集成Thinker 教程
集成地址:https://blog.csdn.net/Blog_Sun/article/details/88035496 thinker 后台地址: http://www.tinkerpatch.co ...
最新文章
- linux下java调用matlab程序,linux_java调用windows_matlab程序
- wechall.net/stegano 解题心得
- [云炬Mysql数据库笔记] 第2章 数据库设计
- 06 使用VS2012开发简单控制器程序 1214
- OpenGL第六节:加载png图片
- 你看那个人他像一条狗
- python训练聊天机器人词库_[ ChatterBot聊天机器人 ] ChatterBot训练数据以及使用三方语料库训练数据 - pytorch中文网...
- 五笔字根表识别码图_五笔字根表键盘图下载|8698版五笔字根表键盘图高清大图_ - 极光下载站...
- week7-学习写技术交底书的所得
- 计算机考研408每日一题 day158
- [转]Oracle数据库逻辑增量备份之exp/imp
- 2021年系统架构设计师考试上午真题与答案
- 不用ps如何批量修改图片尺寸?教你一个方法
- 巴塞尔iii_巴塞尔协议——银行风控实施的超级系统工程 之二
- airvideo_如何免费获取Android中的AirVideo功能
- 关于线性空间和线性映射
- 如此美妙,Python 处理CSV、JSON和XML数据的方法真简便
- 使用阿里云服务器搭建代理服务器
- dvt高危患者的护理措施_DVT的预防措施
- C和C++中的register变量和volatile变量理解