免费做网站平台,注册一个有限公司需要多少钱,友情链接交换要注意哪些问题,域名在哪里申请0x01 引言
我发现我其实并不是很明白这个东西#xff0c;有些微妙#xff0c;而且记忆中也就记得Gopherus这个工具了#xff0c;所以重新学习了一下#xff0c;顺便记录一下吧
0x02 辨别
我们拿到一个题目#xff0c;他的名字可能就是题目类型#xff0c;但是也有可能…0x01 引言
我发现我其实并不是很明白这个东西有些微妙而且记忆中也就记得Gopherus这个工具了所以重新学习了一下顺便记录一下吧
0x02 辨别
我们拿到一个题目他的名字可能就是题目类型但是也有可能是个note或者是blog等等网站那么下面讲一些常见的后端响应
file_get_contents
这个函数非常常见 用于读取文件
file_get_contents(string $filename, bool $use_include_path false, resource $context null, int $offset 0, int $maxlen -1)$filename: 必需参数指定要读取的文件路径。
$use_include_path: 可选参数默认为 false。如果设为 true则会在 PHP 的 include 路径中搜索文件。
$context: 可选参数是一个资源类型通常用于指定文件句柄的上下文。例如可以用来设置 HTTP 请求头当读取远程文件时。
$offset: 可选参数指定从文件的哪个字节开始读取。
$maxlen: 可选参数指定要读取的最大字节数。默认为 -1表示读取到文件末尾fsockopen()
这个东西就和python中的socket一样
fsockopen(string $hostname, int $port -1, int $errno null, string $errstr null, float $timeout ini_get(default_socket_timeout))$hostname: 必需指定要连接的主机名或 IP 地址。
$port: 可选默认为 -1。指定要连接的端口号。
$errno: 可选输出变量用于存储发生错误时的错误号。
$errstr: 可选输出变量用于存储发生错误时的错误信息。
$timeout: 可选默认使用 PHP 配置中的默认超时设置default_socket_timeout。指定连接超时时间秒。?php
$afsockopen(ip,port);
if($a){echo 1;
}else {echo 0;
}
?直接就弹shell还是行
curl_exec() 成功时返回执行请求后得到的数据通常是服务器响应的内容格式依据请求和响应如 HTML、JSON、图像数据等。 失败时返回 false。可以通过 curl_error() 获取错误信息。 怎么说呢相当于一个体系中的一个环节然后返回响应curl http://ceye
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0); //不要header值
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回数据为字符串
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
?POST:
urlhttp://127.0.0.1/flag.php在这里顺便说说curl_setopt
curl_setopt(resource $ch, int $option, mixed $value)
$ch: 必需由 curl_init 返回的 cURL 会话资源。
$option: 必需要设置的选项常量。这些常量通常以 CURLOPT_ 开头例如 CURLOPT_URL、CURLOPT_RETURNTRANSFER 等。
$value: 必需要赋予选项的值。这个值的类型取决于所设置的选项。很有可能是个布尔值 1||00x03 绕过
前面看那几个函数看出来之后基本上就是技巧了
0x01 思路
首先思路要立正我们是根据ssrf的漏洞去带出文件内容 所以我们传参肯定是传路径并且是本地
0x02 本地
127.0.0.1
localhost
0
0.0.0.0
127.0.0
127。0。0。1
127\.0\.0\.1
127.1
sudo.cc
0x7F000001 16进制
2130706433 十进制
0x7f.0.0.1 16进制
0177.0.0.1 八进制ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿0x03 vps
当本地在后端响应已经被过滤完之后我们还可以用vps进行远程
demo
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_url($url);
if($x[scheme]http||$x[scheme]https){
$ip gethostbyname($x[host]);//gethostbyname这个函数根据域名返回IP
echo /br.$ip./br;//将获得的IP显示在网页
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { //看ip是否为公网IPdie(ip!);
}echo file_get_contents($_POST[url]);
}
else{die(scheme);
}
? 利用header函数写一个文件
?php header(Location:http://127.0.0.1/flag.php)?然后传参
POST
urlhttp://ip/文件名0x04 parse_url
?php
var_dump(parse_url(https://www.example.com:8080/path/to/resource/index.html?key1value1key2value2#section2));
?
这就是一个完整的urlarray(6) {[scheme]string(5) https[host]string(15) www.example.com[port]int(8080)[path]string(28) /path/to/resource/index.html[query]string(23) key1value1key2value2[fragment]string(8) section2
}这个函数非常便于我们去尝试出正确的能绕过的url
URL 中的 符号在标准的 URL 格式中具有特殊含义它用于分隔用户名可选和主机名。当 出现在用户名和密码之后、主机名之前时它用于指定访问资源时使用的身份验证凭据。例如
http://ctf.127.0.0.1/flag.php?showarray(5) {[scheme]string(4) http[host]string(9) 127.0.0.1[user]string(4) ctf.[path]string(9) /flag.php[query]string(4) show
}0x04 协议
Dict 协议dict://fuzz.wuyun.org:8080/helo:dictGopher 协议gopher://fuzz.wuyun.org:8080/gopherFile 协议file:///etc/passwd有这三种但是我还没用过所以暂时不分享了 不过我不知道Gopherus这个工具算不算协议 gopherus 去下载之后配置就不说了我记得好像是go语言的环境 下载完就是大概这个东西
然后使用方法也很简单 mysql的 然后传参去RCE Redis的
默认生成/var/www/html/shell.php 密码是自己写的1然后RCE