红队笔记6-Prime1打靶流程-提权-OpenSSL解密(vulnhub)

目录

开头:

为什么看见enc就猜测存在openssl加密嘞?

1.enc 运行密码的查找与破解:

2.openssl解密参数确定:

 3.OpenSSL解密(bash脚本)

4.提权: 

5.总结


开头:

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

红队打靶:Prime1详细打靶思路之模糊测试+内核提权(vulnhub)_prime1靶机-CSDN博客

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

红队打靶:Prime1详细打靶提权思路之OpenSSL解密(vulnhub)_openssl提权-CSDN博客

靶机下载链接见:

https://download.vulnhub.com/prime/Prime_Series_Level-1.rar

本文是上文靶机的解法2,是再通过wordpress后台getshel后获得初步立足点,sudo -l 查看当前用户有哪些权限,发现当前用户能不用root 密码运行enc文件,看见enc文件猜测存在openssl加密

为什么看见enc就猜测存在openssl加密嘞?

因为在openssl工具中enc  是封装openssl支持的所有对称加密算法的指令

之前步骤,请看上一篇文章:红队笔记5-Prime1打靶流程-模糊测试+内核提权(vulnhub)-CSDN博客

1.enc 运行密码的查找与破解:

Enc有可执行权限,尝试运行

运行enc文件,发现需要密码,尝试之前的密码,不成功,不建议爆破,我们现在有路可以走,只能看看是否存在密码的备份文件了 

使用find命令

find / -name "*backup*"

find / -name “*passwd*”

find / -name “*password*”

看看是否有这些文件,这些命名文件可能藏有密码

有很多信息,其中大部分都是Permission denied 这是报错Permission denied(权限不允许),这种信息是没意义的,干脆把他丢弃掉,用2>/dev/null过滤:

find / -name "*backup*" 2>/dev/null

 还是有很多结果,我们只能分析最有可能的对象

Usr 里的help文件,应该是什么的帮助文件,排除

发现几个可疑的对象:

查看可疑文件:

我们移动到了可疑目录打开了文件,发现了密码backup_password 还叫我们enjoy,这个多半是了

尝试使用root运行 good ,应该是运行成功了,看下当前文件夹是否发生了变化 

生成了两个文件enc.txt 和key.txt 这更加让我们明确了这是OpenSSL解密,因为openssl enc,对称加密,加密时,通常是需要提供密钥的,密钥是用于加密和解密数据的关键信息。
enc.txt和key.txt两个文件一个密钥一个密文,才能解密

什么是openSSL?

OpenSSL 可以用来加密,有对称加密和非对称加密,其中在openssl命令中enc 就是封装了openssl所以对称加密算法的一个参数,所以当我们看见enc就应该猜测是openssl

打开两个文件:

 enc.txt:是一串字符串,应该就是openssl加密后的密文:

ket.txt: 看名字都知道是密钥,通过key中的信息

我知道你是 ippsec 的粉丝。   
因此,将字符串“ippsec”转换为 md5 哈希值,并使用它以真实形式获得自己。(这应该就是密钥,使用这个密钥去解密enc文件中的密文)
叫我们把ippsec转为md5

md5sum:

这里有个细节,在进行md5加密的时候,要使用 

echo -n “ippsec” | md5sum

因为在终端用echo输出的“ippsec“ 是à”ippsec/n” 这样直接去MD5sum 会把/n也加密,使用我们应该使用-n参数去掉/n 

可以看到两次加密的结果完全不一样

去掉/n后发现后面有一个 – 我们使用

echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1;}'

awk是对字符串进行处理的一个工具,awk -F ' ' '{print $1;}'意思是以空格为分割,打印其中第一个部分,这样就会只输出366a74cb3c959de17d61db30591c39d1 后面的‘-’不会输出 

我们就获得了key中的线索,因为我们猜测这是应该openssl 这一个是openssl对称加密中的密钥 

 366a74cb3c959de17d61db30591c39d1

那么enc.txt文件就是密文了,所以我们应该对enc.txt 解密l

2.openssl解密参数确定:

接下来我们开始openssl解密

openssl解密需要:

1.密文;

2.密钥;

3.加密算法

看下帮助文档:

这里应该就是封装在enc中的对称加密算法

这有一大堆标准命令和加密方式,标准命令中有enc,如果要想解密,我们必须要知道加密方式才行。这里我们采用的命令应该就是enc了,那么加密方式是啥呢?又有哪些参数呢?我们先看看enc命令的相关参数吧:

openssl enc –h

 这里关于OpenSSL有一大堆参数,我们这里要解密,要用到-d,另外enc.txt看起来相似base64编码的,那么我们还有使用-a,当然用-base64也行,还要使用密钥key,参数-K,可是有个问题,-K后参数的说明他写到,需要Raw key,in hex 意思是需要16进制的格式,我们刚才得到的md5应该没有转换为这个形式,因此需要转化为16进制形式。

那我们就先对key进行16进制

echo -n "ippsec" | md5sum | awk -F ' ' '{print $1;}' | od -A n -t x1

 

  使用此命令输出结果最后还有一个由换行符转换而来的空字符0a,我们不想要这个,干脆前面就把换行符干掉使用tr –d  ‘\n’去掉换行符(-d是删除delete的意思)

继续进行处理,我们想把这个结果放在一行显示,同时去掉空格,再用tr –d 依次干掉换行和空格就好了,命令为:

最后把密钥处理完成

3336366137346362336339353964653137643631646233303539316333396431

最终结果为3336366137346362336339353964653137643631646233303539316333396431。这就是openssl解密过程中-K后面的参数,即密钥的16进制形式。下面我们就可以构造对enc.txt进行OpenSSL解密的命令,完整命令为: 

echo "nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=" | openssl enc -d -a -cipher -K 3336366137346362336339353964653137643631646233303539316333396431

这一段参数非常长,echo后面引号内的内容就是enc.txt中的密文,使用OpenSSL enc进行解密,-d是进行解密,-a意思是base64解码(也可以直接用-base64),-K后面接参数密钥raw的16进制hex形式,关键就在于-cipher应该替换为解密的算法,前面我们查看openssl enc的帮助的时候。我们看到了许多加密算法: 

 有这么多对称加密的算法,我们不知道密文采用什么加密算法,所有我们只能通过枚举的方法,替换payload 中-cipher(有经验的大佬,可以根据密文特征,猜测加密算法)

 3.OpenSSL解密(bash脚本

上一步说我们要想办法枚举所有的加密方式的可能。那么最好就是写一个bash脚本,依次遍历每个加密方式,带入OpenSSL的解密命令执行,看看哪个能成功解密出明文。既然要使用脚本进行遍历,我们首先要创建一个文件,把这个openssl –h的内容关于加密算法的内容复制到一个文件中。去掉其中无关的行,结果如下

我们将所以加密形式,保存下来,倒是替换payload 的 -cipher 位置

但是要读取文件,我们文件里面的数据应该是每一个单独一行,所以我们要对数据做处理

首先把所有空格替换为换行符,这样就可以保证每一项字符串独占一行,使用gsub()函数用于将空格替换为换行符,完整命令如下: 

awk '{gsub(" ","\n");print}' CypherTypeRaw | sort | uniq

现在我们可以构造bash脚本,写一个for循环,将CipherTypes中的每一行替换为上述命令中的-cipher,bash脚本如下:

for cipher in $(cat CypherTypes); do echo "nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=" | openssl enc -d -a -$cipher -K 3336366137346362336339353964653137643631646233303539316333396431 ;done

 运行:

有太多报错了,因此我们重新构造命令输出每次遍历的字符串(即解密方式)。由于使用其他解密方式都会报错,我们将报错信息丢弃2>/dev/null ,完整的命令为:

for cipher in $(cat CypherTypes); do echo "nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=" | openssl enc -d -a -$cipher -K 3336366137346362336339353964653137643631646233303539316333396431 2>/dev/null;echo $cipher;done

 解密成功了 ,加密算法是aes-256-cbc

 别担心,总有一天我们会达到的                                                                                                                                                                                                       
我们的目的地很快。如果你忘记了                                                                                                                                                                                                    
您的用户名,然后使用您的旧密码                                                                                                                                                                                                        
==> “tribute_to_ippsec”  

这句话意思就是我们得到了saket的密码为tribute_to_ippsec,很可能就是saket账户ssh登录的密码。同时还有一个名为Victor的落款,不知道能不能用上。

就尝试一下ssh登录

4.提权: 

登录进来了,sudo -l

提示我们,可以无密码的形式以root运行/home/victor/undefeated_victor,那就运行试试 

sudo /home/victor/undefeated_victor 

  结果说,找不到/tmp/challenge这个文件,还给了一句提示:如果你能够打败我,就先挑战站在你面前的你。既然他说找不到/tmp/challenge这个文件,那咱们就去tmp目录下看看:

确实是没有名为challenge的文件呀,以root运行/home/victor/undefeated_victor会去运行/tmp/challenge,如果challenge中包含提权的指令,那么一旦运行就可以提权了,现在既然没有这个challenge文件,那咱就创建一个,tmp文件也可以写入文件

echo '#!/bin/bash' > challenge
echo '/bin/bash' >> challenge 

chmod +x challenge 

赋予运行权限

sudo /home/victor/undefeated_victor

提权成功!!

5.总结

本篇文章是根据靶场作者给出的提权通过openssl解密获得saket用户密码,在saket用户sudo -l提权成功,没有使用内核提权,也是作者想让我们学习openssl解密:

1.enc运行密码的查找:find 找备份文件->缺少密码时可以通过查找备份文件可能存有密码

2.密钥的处理:我们获得密钥,对其进行md5加密(md5sum)和16进制转换(od)

3.openssl解密参数构造:查看openssl帮助文档,确定参数

4.openssl解密(bash脚本):因为openssl解密需要知道密文的加密算法,我们不知道,写bash脚本枚举所有算法。

通过靶场我学习到了:

1.在渗透过程中缺少密码,可以使用find查找备份文件

2.openssl解密:1,密文;2,密钥;3,加密算法 缺一不可

3.awk,md5sum,od,tr等字符串处理命令

4.bash脚本

openssl加密解密讲解: openssl加密解密使用-CSDN博客
  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值