拐弯抹角

http://www.shiyanbar.com/ctf/1846
拐弯抹角
如何欺骗服务器,才能拿到Flag?
格式:CTF{}
解题链接: http://ctf5.shiyanbar.com/10/indirection/ 
解:
<?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/./ µÈµÈÕâÒ»ÀàµÄ 
//ËùÒÔ£¬µÚÒ»¸öÒªÇó¾ÍÊDz»µÃ³öÏÖ ./ 
if($flag && strpos($URL, './') !== FALSE){ 
    $flag = ""; 
    $stop = 1;        //Pass 
} 

//µÚ¶þ£¬ÎÒÃÇ¿ÉÒÔ¹¹Ôì \ À´´úÌæ±»¹ýÂ赀 / 
//ËùÒÔ£¬µÚ¶þ¸öÒªÇó¾ÍÊDz»µÃ³öÏÖ ../ 
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 
} 

//µÚËÄ£¬¶à¸ö / Ò²ÊÇ¿ÉÒ﵀ 
//ËùÒÔ£¬µÚËĸöÒªÇóÊDz»µÃ³öÏÖ // 
if($flag && strpos($URL, '//') !== FALSE){ 
    $flag = ""; 
    $stop = 4;        //Pass 
} 

//µÚÎ壬ÏÔÈ»¼ÓÉÏindex.php»òÕß¼õÈ¥index.php¶¼ÊÇ¿ÉÒ﵀ 
//ËùÒÔÎÒÃÇÏÂÒ»¸öÒªÇó¾ÍÊDZØÐë°üº¬/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>';



mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。


$code = str_replace($flag, 'CTF{???}', file_get_contents('./index.php'));所以从这句话就知道结果
在url后面添加/index.php
得到Flag: CTF{PSEDUO_STATIC_DO_YOU_KNOW}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值