博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验吧之【拐弯抹角】(url伪静态)
阅读量:4964 次
发布时间:2019-06-12

本文共 2267 字,大约阅读时间需要 7 分钟。

题目地址:http://ctf5.shiyanbar.com/indirection/

打开后给了源码 

'; $URL = $_SERVER['REQUEST_URI']; //echo 'URL: '.$URL.'
'; $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 '

'; 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 '';

简单分析:

分7个步骤判断URL是否满足条件,如果不满足就把$flag弄掉,当你不满足条件就会看到Not Pass。

如果是正常访问,$URL = $_SERVER['REQUEST_URI']; 这里$URL一般会得到/indirection/或者/indirection/index.php
需要满足不能出现./\大写或者其他符号、//、p.,而且要求末尾是/index.php,这6个步骤对于/indirection/index.php都可以满足,但是最后一条又告知不能等于/indirection/index.php

 

 

这种其实就是伪静态技术(pseudo-static),又名URL重写(URL rewriting)。举个最简单的应用,例如你原本想弄的是index.php?id=123,但你想隐藏其真实的文件路径,你通过URL重写技术,可以达到访问test/123.html而实际上在访问index.php?id=123

 

 

 

 

这题的关键在于伪静态,比如url中含有xxxx.php/xx/x,那么.php后的xx就会被当成参数名,x会被当成参数

所以这里的payload可以这么构造:http://ctf5.shiyanbar.com/indirection/index.php/x/index.php

 

 

转载于:https://www.cnblogs.com/-qing-/p/11077437.html

你可能感兴趣的文章
GC roots
查看>>
DevExpress之XtraReport 学习
查看>>
php 获取mac地址
查看>>
斐波那契数列(升级版)
查看>>
题目1434:今年暑假不AC (项目安排类:结束时间快排,判断开始时间)
查看>>
关于new
查看>>
同步异步阻塞非阻塞可中断的睡眠不可中断的睡眠
查看>>
python-内置函数-callable,chr,ord,bytes,随机验证码生成
查看>>
数据分析与展示---Pandas库数据特征分析
查看>>
二叉搜索树、B树
查看>>
cf里的一些简单组合数题
查看>>
iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建...
查看>>
竞争性需求分析
查看>>
js读取解析JSON数据
查看>>
swift 获取Appstore版本号并与本地版本比较 更新跳转到Appstore
查看>>
51Node 1065----最小正子段和
查看>>
特殊乘法(数位拆解)
查看>>
【洛谷 P4342】[IOI1998]Polygon(DP)
查看>>
【洛谷 P1651】 塔 (差值DP)
查看>>
【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
查看>>