parse_url-的一些tricks
2019-05-05 22:40:50
无协议报错
<?php
$url = $_GET['url'];
$data = parse_url($url);
var_dump($data);
?>
该函数在URL没有协议的时候,加上端口会报错
不加端口会正常进行解析
其他情况下可以正常解析
当端口有字母时,依然会正常解析
端口错误解析
url为
http://127.0.0.1/demo1.php?url=//yml-sec.top/index:80
我们期望的解析结果是这样的
而实际的解析结果是这样的
路径解析错误
http://127.0.0.1/demo1.php?url=//yml-sec.top?/index/config.php
解析结果
http://127.0.0.1/demo1.php?url=/yml-sec.top?/index/config.php
解析结果
///解析返回false
如ciscn题目部分源码
<?php
$payload= $_GET['url'];
if(isset($payload)){
$url = parse_url($_SERVER['REQUEST_URI']);
var_dump($url);
parse_str($url['query'],$query);
foreach($query as $value){
if (preg_match("/flag/",$value)) {
die('stop hacking!');
exit();
}
}
$payload = unserialize($payload);
}else{
echo "Missing parameters";
}
?>
正常输入会拦截
使用///时会成功的绕过