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的相关题目,有朋友可以推荐一下吗,有类似的题目吗 嘻嘻 感激~

 

posted @ 2019-09-26 17:29  Tkitn  阅读(656)  评论(0)    收藏  举报