#实验吧整理#拐弯抹角小结

知识点

  • 伪静态:参考资料
  • 关于绕过构造:
    • 构造 /indirection/a/…/ /indirection/./
    • 构造 \ 来代替被过滤的 /
    • 有的系统大小写通用,可以尝试改变大小写
    • 可以用?和#等等的字符绕过
    • 多个 /
    • 加上index.php或者减去index.php都是可以的
    • 在index.php后面加.
wp
  • 进去就是一大段代码,要求改变url访问index.php
	

	<?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;        //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($code, TRUE);
	
	echo '</body></html>'; 
								
  • 这道题主要是考察伪静态技术:构造indirection/index.php/index.php,index.php后的index.php会被当做参数处理
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值