拐弯抹角——实验吧
刚刚做了实验吧的题目,现在整理一下
写出解题思路,希望能够帮助到那些需要帮助的人
所有的wp都是以一题一篇的形式写出
主要是为了能够让读者更好的阅读以及查找,
希望你们不要责怪!!共勉!!!
永远爱你们的————新宝宝
拐弯抹角分值:10
- 来源: cwk32
- 难度:易
- 参与人数:7523人
- Get Flag:2936人
- 答题人数:3047人
- 解题通过率:96%
如何欺骗服务器,才能拿到Flag?
格式:CTF{}
解题链接: http://ctf5.shiyanbar.com/indirection/
解题思路:这一题的代码比较有意思,并且一开始看到代码
并没有多少思路,只是看到一些大佬写的解题思路之后就会发现
这个是属于伪静态,现在我们需要了解一下伪静态的知识:
https://baike.baidu.com/item/%E4%BC%AA%E9%9D%99%E6%80%81/2234695?fr=aladdin
就会发现这个百度,好像看的不太懂,我就总结一下下:
伪静态:
url中含有xxxx.php/xx/x,那么.php后的xx就会被当成参数名,x会被当成参数
http://ctf5.shiyanbar.com/indirection/index.php/user/index.php,虽然在index.php后面还加上了一些东西,
但是这个user会被解析成参数名,而index.php则会被解析成user的值
就是这个意思,接下来看看代码就会发现,这个出题人很善良,毕竟解释的很清楚:
<?php
// code by SEC@USTC
echo '<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>';
这个我们可以根据他的要求:
根据这三个要求就会得到:
http://ctf5.shiyanbar.com/indirection/index.php/a/index.php
得到最后答案:CTF{PSEDUO_STATIC_DO_YOU_KNOW}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python常见数据框操作①
import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w #选择表格中的'w'列,使用点属性,返回的是Series类型 data[['w']] #选择表格中的'w'列,返回的是DataFrame类型 data[['w','z']] #选择表格中的'w'、'z'列 data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后 data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式 如果采用data[1]则报错 data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同 data['a':'b']...
- 下一篇
6月13日云栖精选夜读丨阿里巴巴登顶全球企业创新榜,被美国四大互联网公司视为头号对手
在最新发布的毕马威2018年度创新报告中,阿里巴巴被评为地球上最具科技颠覆力的公司。排在阿里巴巴之后的,是Facebook、亚马逊、谷歌等美国科技巨头。 毕马威这份科技创新报告中在科技界和商业界颇有影响力。 热点热议 阿里巴巴登顶全球企业创新榜,被美国四大互联网公司视为头号对手作者:技术小能手真能“穿墙识人”,MIT人体姿态估计系统创历史最高精度!作者:技术小能手每秒处理1000万用户请求…云上架构如何实现高性能和高可用作者:技术小能手 知识整理 Java并发编程之ReentrantLock源码分析 作者: 狂小白 Java类初始化和实例化 作者: classfly Dubbo基本用法-Dubbo Provider配置 作者: 中间件小哥 systemd-journald日志持久化的操作方法 作者: 滇池孤鸿 使用zookeeper实现分布式锁 作者: 加多 美文回顾 “怎么做好云迁移”? 深蓝云海资深架构师给你答案 作者: 云迹九州 亿万小龙虾,准时送到家:天猫新零售激发世界杯“中场经济” 作者: 技术小能手 阿里巴巴为什么不用 ZooKeeper 做服务发现? 作者: 中间件小哥...
相关文章
文章评论
共有0条评论来说两句吧...