sniperoj的baby-ssrf wp

0x00:题目介绍

sniperoj是王一航大佬出的ctf题目(题目是从他github上扒下来的,就先这么猜测了)

https://github.com/SniperOJ/Jeopardy-Dockerfiles

0x01:题解

切到baby-ssrf路径下,docker-compose up -d,访问127.0.0.1:10015

得到题目如下

 1 <?php
 2 
 3 /*
 4  * I stored flag.txt at baidu.com  5 */  6  7 show_source(__FILE__);  8  9 if(isset($_GET['url'])){ 10 $url = parse_url($_GET['url']); 11 if(!$url){ 12 die('Can not parse url: '.$_GET['url']); 13  } 14 if(substr($_GET['url'], strlen('http://'), strlen('baidu.com')) === 'baidu.com'){ 15 die('Hey, papi, you have to bypass this!'); 16  } 17 if( 18 $url['host'] === 'baidu.com' 19  ){ 20 $ch = curl_init(); 21 curl_setopt ($ch, CURLOPT_URL, $_GET['url']); 22 curl_exec($ch); 23 curl_close($ch); 24 }else{ 25 die('Save it, hacker!'); 26  } 27 }

题目说baidu.com下有个flag.txt,那我们主要目的是拿到这个flag.txt

题目名字肯定是ssrf入口啦

再来看一下代码,涉及到了ssrf漏洞的利用代码curl_exec。

确定ssrf读文件无疑了

需要注意几个函数

parse_url:php解析url的函数

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url)); Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor )

还需要注意这里

if(substr($_GET['url'], strlen('http://'), strlen('baidu.com')) === 'baidu.com')

substr截取字符串函数,截取url的第七位后面的9位,如果是baidu.com那就不符合

所以我们可以通过@符号来绕过:@baidu.com,这样截取的就不是baidu.com,但解析仍然是baidu.com,@多用于url跳转漏洞。

因为是读取文件,我们用file://

所以最终payload:url=file://@baidu.com/flag.txt

0x02:小结

ssrf这个漏洞平时做渗透遇到的不多(也可能自己太菜了,漏了也说不定 emmm)

但仔细一想 这个漏洞多发生于需要处理图片,处理url等等

涉及函数file_open、curl_exec、file_get_contents等等,想想日常测得网站系统也很少涉及这些,毕竟都是以业务为主。

ssrf原理网上很多相关资料,不多赘述,就是让服务器帮你请求,多用于探测内网、攻击内网。

这道题目不难,巩固一下ssrf的利用嘛。

想写一下ssrf配合dnslog的相关题目,有朋友可以推荐一下吗,有类似的题目吗 嘻嘻 感激~

猜你喜欢

转载自www.cnblogs.com/Tkitn/p/11596237.html