实验吧 web 拐弯抹角

<?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('/^([a-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;        //Pass
}

//第六,我们知道在index.php后面加.也是可以的
//所以我们禁止p后面出现.这个符号
if($flag && strpos($URL'p.') !== FALSE){
    
$flag "";
    
$stop 6;        //Pass
}

//第七,现在是最关键的时刻
//你的$URL必须与/indirection/index.php有所不同
if($flag && $URL == '/indirection/index.php'){
    
$flag "";
    
$stop 7;        //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($codeTRUE);

echo '</body></html>'



地址栏http://ctf10.shiyanbar.com:8888/indirection/

题目的意思就是通过改变地址栏访问index.php,但是限制了条件不能使用 ./  ../ \\ 而且只能使用小写字母,不可以在php后加点,这里我们可以利用伪静态技术,使用http://ctf10.shiyanbar.com:8888/indirection/index.php/index.php,index.php后的index.php会被当做参数处理,所以服务器只会解析第一个index.php,满足条件成功绕过。

URL重写,其实就是把带一大堆参数的url,变成一个看上去很规矩的url,主要目的是为了搜索引擎。

举例

/viewthread.jsp?id=1234
/viewthread.jsp?id=1235
/viewthread.jsp?id=1236

重写后,可以用

/viewthread/1234.htm
/viewthread/1235.htm
/viewthread/1236.htm


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值