CTF Wiki
  • 简介
  • 如何使用 CTF Wiki
  • introduction
    • CTF 历史
    • CTF 竞赛模式简介
    • CTF 竞赛内容
    • 线下攻防经验小结
    • CGC 超级挑战赛
    • 学习资源
  • misc
    • 杂项简介
    • 取证隐写前置技术
    • 信息搜集技术
    • encode
      • 通信领域常用编码
      • 计算机相关的编码
      • 现实世界中常用的编码
    • picture
      • 图片分析简介
      • JPG
      • PNG
      • GIF
    • audio
      • 音频隐写
    • archive
      • RAR 格式
      • ZIP 格式
    • traffic
      • 流量包分析简介
      • 协议分析概述
        • Wireshark
        • DNS
        • HTTP
        • HTTPS
        • FTP
        • USB
        • WIFI
      • 数据提取
      • PCAP 文件修复
    • disk-memory
      • 磁盘内存分析
      • 题目
    • shellcode
    • other
      • pyc
  • web
    • Web 简介
    • XSS
    • php
      • PHP 代码审计
    • SQL 注入
      • sqlmap绕过脚本
      • 各版本数据库语句备忘
    • CSRF
    • SSRF
  • reverse
    • 软件逆向工程简介
    • identify-encode-encryption
      • 常见加密算法和编码识别
    • language
      • 简介
      • go
        • Golang 逆向入门
      • python
        • Python 逆向入门
      • rust
        • Rust 逆向入门
    • maze
      • 迷宫问题
    • obfuscate
      • 控制流平坦化
      • 花指令
      • movofuscator
      • Self-Modified Code
    • vm
      • 虚拟机分析
    • platform
      • linux
        • Detecting Breakpoints
        • Detecting debugging
        • False Disassembly
        • LD_PRELOAD
      • windows
        • anti-debug
          • CheckRemoteDebuggerPresent
          • 反调试技术例题
          • Heap Flags
          • Interrupt 3
          • IsDebuggerPresent
          • 花指令
          • NtGlobalFlag
          • NtQueryInformationProcess
          • The Heap
          • Thread Local Storage(TLS)
          • ZwSetInformationThread
        • unpack
          • 一步到达 OEP 法
          • ESP 定律法
          • DUMP 及 IAT 重建
          • 最后一次异常法
          • 手动查找 IAT 并使用 ImportREC 重建
          • 内存镜像法
          • 保护壳简介
          • SFX 法
          • 单步跟踪法
          • DLL 文件脱壳
    • tools
      • constraint
        • z3
      • debug
        • gdb
        • ollydbg
        • windbg
        • x64dbg/x32dbg
      • simulate-execution
        • angr
        • Unicorn Engine
      • static-analyze
        • dnspy
        • Ghidra
        • IDA Pro
        • jadx
  • crypto
    • 密码学简介
    • asymmetric
      • 介绍
      • discrete-log
        • 离散对数
        • ECC
        • ElGamal
      • knapsack
        • 背包加密
      • lattice
        • CVP
        • 基本介绍
        • 格基规约算法
        • 格概述
      • rsa
        • RSA 选择明密文攻击
        • RSA 复杂题目
        • Coppersmith 相关攻击
        • 公钥指数相关攻击
        • 模数相关攻击
        • Bleichenbacher's attack
        • RSA 侧信道攻击
        • RSA 介绍
        • d_attacks
          • 私钥 d 相关攻击
          • 扩展维纳攻击
    • attack-summary
      • 简介
      • 比特攻击
      • 中间相遇攻击 - MITM
    • basic
      • 基础数学知识
    • blockcipher
      • AES
      • ARX: Add-Rotate-Xor
      • DES
      • IDEA
      • 块加密
      • Simon and Speck Block Ciphers
      • mode
        • CBC
        • CFB
        • CTR
        • ECB
        • 分组模式
        • OFB
        • Padding Oracle Attack
        • 填充方式
        • PCBC
    • certificate
      • 证书格式
    • classical
      • 古典密码简介
      • 单表代换加密
      • 其它类型加密
      • 多表代换加密
      • 总结
    • hash
      • Hash Attack
      • 综合题目
      • Fowler–Noll–Vo hash function
      • 哈希函数
      • MD5
      • SHA1
    • signature
      • DSA
      • ElGamal
      • 数字签名
      • RSA 数字签名
    • streamcipher
      • 流密码
      • fsr
        • 反馈移位寄存器
        • 线性反馈移位寄存器 - LFSR
        • 非线性反馈移位寄存器
      • lcg
        • 题目
        • 线性同余生成器
      • prng
        • 密码安全伪随机数生成器
        • 伪随机数生成器介绍
        • 题目
      • special
        • RC4
  • pwn
    • MacOS
    • misc-os
    • 概述
      • stackoverflow
        • 执行 Shellcode
        • 栈介绍
        • 栈溢出原理
    • browser
      • Chrome
      • Firefox
      • Safari
    • hardware
      • 简介
        • side-channel
          • prefetch side-channel attack
      • trusted-computing
        • 可信执行环境
    • linux
      • kernel-mode
        • 基础知识
        • Introduction
          • DoS
          • Information Disclosure
          • Introduction
            • Change Others
            • Change Self
        • Introduction
          • Introduction
            • 信息泄漏
            • Misc
          • Introduction
            • Kernel Stack Canary
          • Introduction
            • inner-kernel
              • 内部隔离
            • Introduction
              • KPTI - Kernel Page Table Isolation
              • 用户代码不可执行
              • 用户数据不可访问
          • Introduction
            • FGKASLR
            • KASLR
        • Introduction
          • 编译内核驱动
          • 内核下载与编译
          • Qemu 模拟环境
          • Real Device
        • exploitation
          • heap
            • 内核堆概述
            • buddy
              • Cross-Cache Overflow & Page-level Heap Fengshui
              • Page-level UAF
            • slub
              • freelist 劫持
              • Heap Spray
              • kernel UAF
          • race
            • Double Fetch
            • userfaultfd 的使用
          • rop
            • bypass-smep
            • ret2dir
            • 利用 pt_regs 构造通用内核 ROP
            • ret2usr(已过时)
            • Kernel ROP
          • tricks
            • 在内存中直接搜索 flag
      • user-mode
        • environment
        • fmtstr
          • 检测
          • 例子
          • 利用
          • 原理介绍
        • integeroverflow
          • 整数溢出
        • io-file
          • glibc 2.24下 IO_FILE 的利用
          • 伪造vtable劫持程序流程
          • FSOP
          • FILE结构
        • mitigation
          • Canary
        • race-condition
          • introduction
          • 题目
        • summary
          • 获取地址
          • shell 获取小结
          • 控制程序执行流
        • Type Confusion
        • Uninitialized Memory
        • heap
          • mallocng
          • ptmalloc2
            • Chunk Extend and Overlapping
            • Fastbin Attack
            • 堆概述
            • 堆相关数据结构
            • 堆溢出
            • House Of Einherjar
            • House Of Force
            • House of Lore
            • House of Orange
            • House of Pig
            • House of Rabbit
            • House of Roman
            • 堆利用
            • Large Bin Attack
            • 通过堆进行信息泄漏
            • 堆中的 Off-By-One
            • 堆中的检查
            • tcache makes heap exploitation easy again
            • Unlink
            • Unsorted Bin Attack
            • Use After Free
            • implementation
              • 基础操作
              • 释放内存块
              • 堆初始化
              • malloc_state 相关函数
              • 申请内存块
              • 测试支持
              • 深入理解堆的实现
              • tcache
        • stackoverflow
          • arm
            • 环境搭建
            • Arm ROP
          • mips
            • mips - ROP
          • RISC-V
          • x86
            • 基本 ROP
            • 花式栈溢出技巧
            • 中级ROP
            • 栈介绍
            • 栈溢出原理
            • advanced-rop
              • 高级 ROP
              • ret2dlresolve
              • ret2VDSO
              • SROP
    • sandbox
      • Chroot
      • Docker
      • Namespace
      • python
        • Python 沙盒
      • seccomp
        • C 沙盒逃逸
      • Shell Sandbox
    • virtualization
      • basic-knowledge
        • 虚拟化技术简介
        • CPU 虚拟化
        • IO 虚拟化
        • 内存虚拟化
      • parallels
        • Parallels
      • VirtualBox
      • VMWare
      • qemu
        • basic-knowledge
          • QEMU 设备模拟
          • QEMU 内存管理
        • environment
          • 编写 QEMU 模拟设备
          • QEMU 下载与编译
        • exploitation
          • QEMU 逃逸入门
          • 越界读写
  • Android 安全
    • basic_develop
      • Android 开发基础
    • Android 应用运行机制简述
      • Android 中 Java 层的运行机制
        • dex
          • DEX文件
          • ODEX文件
        • smali
          • Smali
      • native_layer
        • so 介绍
    • basic_reverse
      • Android 关键代码定位
      • Android 逆向基本介绍
      • dynamic
        • Android 动态调试
        • IDA 动态调试原生层程序
        • IDA 动态调试 smali 代码
      • static
        • 静态分析综合题目
        • 静态分析 java 层例子
        • 静态分析原生层程序
  • blockchain
    • Blockchain Security Challenges
    • Blockchain Security Overview
    • ethereum
      • Ethereum Basics
      • Ethereum Overview
      • Ethereum Opcodes
      • 学习资源
      • Smart Contract Reverse
      • Function Selector and Argument Encoding
      • Ethereum Storage
      • attacks
        • Airdrop Hunting
        • Arbitrary Writing
        • CREATE2
        • Delegatecall
        • Introduction
        • Jump Oriented Programming
        • Integer Overflow and Underflow
        • Randomness
        • Re-Entrancy
        • Short Address Attack
        • Uninitialized Storage Pointer
    • publicblockchain
      • Public Blockchain Security Overview
      • Blockchain Weaknesses
  • assembly
    • ARM
    • MIPS
    • x86_x64
  • executable
    • elf
      • 程序加载
      • 程序执行流程
      • linking
        • 程序链接
        • Symbol Reslove
      • structure
        • ELF 文件
        • Code Section
        • Data Related Sections
        • Dynamic Sections
        • Misc Sections
        • Sections
        • String Sections
        • .symtab: Symbol Table
    • pe
      • PE 文件格式
      • 导出表
      • 导入表
      • 基址重定位表
  • ics
    • ICS_CTF 竞赛
    • ICS_CTF 发现
    • ICS_CTF 利用
    • ICS_CTF 学习资源
  • contribute
    • 贡献之前
    • 基本贡献方式
    • 贡献文档要求
    • 翻译
  • write up
    • 浙江工业大学CTF赛事
      • 2023第四届“安恒杯”CTF新生赛题解
Powered by GitBook
On this page
  • 国内工控比赛考察点
  • Web渗透类(Web)
  • 题目示例
  • 逆向分析(Reverse)
  • 题目示例
  • 工控协议(Protocol)
  • 题目示例
  • 工控编程和组态(Program)
  • 题目示例
  1. ics

ICS_CTF 竞赛

本栏目内容,ICS CTF竞赛内容来自于作者自身打比赛经验,如果不对之处,请各位老师批评指正

国内工控比赛考察点

采用CTF分类模型,总结分析当前工控ICS比赛中的关键点

比赛类型
考察点
与CTF异同

内网渗透

Web 端渗透测试、CMS 系统、工控发布展示系统、数据库系统

与 Web 渗透相关

逆向分析

固件分析、工控软件逆向

实际场景逆向

工控协议

工控流量分析、Misc 类

Misc 流量分析,工控场景流量特征

工控编程

PLC 编程、HMI 组态、RTU 编程等

工控实际组态软件使用,梯形图识别与分析

根据漏洞类型其实还可以区分细化题目类型,包括常见的 Web 注入类、固件弱口令、后门程序、协议重放与逻辑问题、组态部署问题等常见的工控场景安全问题。

比赛类型
漏洞类型

内网渗透

Web 类(SQL、XSS、命令注入、敏感文件泄露 .git/.idea/.project 等、)

逆向分析

固件分析、工控软件逆向

工控协议

工控流量分析、Misc 类

工控编程

PLC 编程、HMI 组态

针对目前出现或曾经出现的 ICS CTF 题目类型,其实与 CTF 竞赛有许多重合点,因此不再此赘述,主要讨论下工控 CTF 中与 CTF 竞赛不太一致的地方。

Web渗透类(Web)

该节主要谈工控Web渗透的特点:

  • 与业务场景高度契合,例如工业控制中,Web端主要为显示当前使用场景中的控制参数、运行状态等信息,如果在内网中被中间人劫持,当HMI显示设备无法与PLC等实时运行设备同步时,系统会报警或出错。

  • 一般采用通用技术展示Web界面,以windows操作系统为主要平台,包括WinCC、Windows Server、Windows 98/2000/XP等看似古老的系统为主。

  • Web渗透的同时会保留多个端口,例如FTP、HTTPS、Telnet、SNMP、NTP等服务端口,在Web渗透无法打穿的同时可以试试其他端口。

  • 工控由于一般处于内网环境,内网劫持往往比较有效,但是如果内网配置了静态 IP 或其他防护措施,ARP 欺骗方式等内网劫持方法无法起效。

  • 敏感信息泄露,配置文件不完善是工控 Web 发布常见问题,不仅仅包括 .git/.idea/.project 等工程信息协议,还可能出现路径遍历、命令注入、弱口令等问题。

题目示例

待补充

逆向分析(Reverse)

该节主要讨论工控逆向的特点:

  • 工控操作系统一般为RTOS(Real Time Operate System),例如vxworks、uc-os等实时操作系统,在逆向前需要对其架构和指令集需要比较熟悉,如果不懂请自行学习。

  • 工控固件逆向常见的目标是工控工程加密算法、硬编码秘钥、硬编码后门等常见固件逆向漏洞,如果发现了堆栈溢出类漏洞,往往能够导致目标设备宕机(即DOS后果)。

  • 工控固件往往存在加密和压缩情况,需要在第一步解压过程对其进行解压或解密,这部分依据具体厂商来定,不能一概而论。

  • 工控固件存在逆向分析不出的情况

题目示例

题目名称:tplink_tddp

从题目描述中,我们可以得知我们的关键分析对象时 tddp,然后题目附件是一个固件,利用 binwalk 解析,在 usr/bin 中找到 tddp,然后通过谷歌搜索 tddp 关键词可以发现有在 TP-Link 路由器中有该协议的漏洞,基于 UDP 运行于 1040 端口,发送数据的第 2 个字节(采用 tddp v1 协议)为 0x31(CMD_FTEST_CONFIG)时,会导致远程代码执行。参考链接:https://paper.seebug.org/879/ 。 将 tddp 拖入 IDA 搜索字符串 CMD_FTEST_CONFIG 可以找到会执行 sub_A580 函数

至此已经可以提交 flag,但也可以继续进行分析,通过 qemu 搭建 arm 环境运行文件系统进行动态调试。

工控协议(Protocol)

题目特点介绍:

  • 工控协议针对工控场景设计,具有简单、高效、低延时等特点,所以针对此类的攻击完全可以考虑采用重放、命令注入等简单攻击手段。

  • 工控协议不仅仅采用公开协议、还包括众多的私有协议,这部分协议具体细节需要逆向或者采集数据来实现数据功能的还原。例如 Modbus、DNP3、Melsec-Q、S7、Ethernet/IP 等。

  • 工控协议可能导致目标 PLC、DCS、RTU 等设备出现宕机、不可重启等问题,采用基于 Fuzz 的方法可以快速高效发现 PLC 宕机类漏洞。

  • 工控协议中可能有众多针对 PLC 等设备的操作,用户需要区分哪些是合法请求、哪些是异常请求,这需要经验,需要研究推断当前流量的使用逻辑。这个场景很适合机器学习的条件,这可以考虑是个探索的方向。

  • 针对工控场景的实际防御方案其实最好的还是旁路检测,通过分光将流量接入分析系统,在不影响正常业务使用的同时对目标系统进行安全监控。

题目示例

题目名字:mms.pacp

这是一道关于 MMS 协议分析的题目,当拿到文件时使用 Wireshark 打开文件(部分题目需要使用 tcpdump 打开)

可以看到题目中出现了 MMS 字样,这是变电站 IEC61850 标准中的协议,在做题前应该熟悉该协议的层次结构以及功能码(尤其是握手包、读写功能包)。然后过滤 MMS 协议数据包,同时搜索 flag 字符

可以看到在第 1764 条报文中有 flag.txt,功能码是 fileDirectory,所以猜测会使用 fileopen 来进行打开,对这个功能码的请求报文进行过滤

可以发现在 1764 之后的第 1771、1798、1813、4034 条报文都对 flag.txt 进行了打开操作。接下来去每条报文后边一条看是否有 fileread 进行了读取,最终在 1800 处发现其读取了 flag.txt,那么第 1801 条就是回复报文。

内容是一张 base64 编码的图片,对其进行解码就可以得到对应的 FLAG 内容。

这是一道简单的协议分析题目,主要考察做题者对协议结构层次及功能码的熟悉程度,同时也要熟悉 Wireshark 的过滤分析功能,这将起到事半功倍的作用。在比赛题目中有可能并不能通过搜索 flag 字符找到相关线索,相关信息有可能藏在多条报文的载荷中或者长度字段中,需要细心观察和总结。

工控编程和组态(Program)

工控编程和组态是工控系统运行的核心和重点,此类题目特点一般是:

  • 工控编程核心为明白工控业务逻辑,而工控编程遵循 IEC61131-3(工控史上首例实现 PLC、DCS、运动控制、 SCADA 等联合编程的标准——IEC61131-3),包括 5 种编程语言标准,3 种是图形化语言(梯形图、顺序功能图和功能块图),两种是文本化语言(指令表和结构文本)。

  • 工控设备往往可以在线调试,从而可以控制某些输入输出端口,实现强制启停的功能,如果这些功能可以采用 Remote 方式重发,那攻击危害就更为严重。

  • 工控设备的连接方式多样,一般采用串口,但是目前设备发展支持以太网、USB 接口等新的方式,如果网口不行试试串口、USB。

  • 工控组态可以非常复杂,甚至连接成百上千个输入输出都有可能,组态中会由于添加了新的组件而更加麻烦,这时候要慢慢看,一点一点缕出来。

题目示例

题目名字:PLC梯形图计算

这类题目主要考察做题者对于相应产品(PLC、RTU、上位机软件)的编程软件、编程语言及流程的熟悉程度,当拿到题目时需要有相应的支持软件可以打开题目。例如下图是一道西门子 PLC 的编程题目,flag 为梯形图的最终输出值,所以我们使用博图软件打开题目:

这类题目的做法一般有两种:

  1. 题目代码模拟运行,然后直接查看相应位置的值,但是一般会遇到很多错误难以直接运行;

  2. 直接读,对于熟悉梯形图的人来说非常简单。

以上是我参加工控比赛的一些心得体会,希望能为后来参赛的小伙伴多些指导。

PreviousicsNextICS_CTF 发现

Last updated 1 year ago

tddp
mms
mms
mms
mms
plc