uds诊断协议-逆向题 WP

VSole2022-08-14 16:17:02

介绍

这是一道uds诊断协议的逆向题。比赛的时候时间太短没做出来,又花时间研究了一下拿出来分享。

题目

uds_server程序逻辑

main

启动后监听13400端口

接收client请求

启动Server

Server初始化后进入loop

接收处理客户端发送的请求

其中handleRoutingActivationMessage函数负责注册

注册后可以调用提供的service

jmp rax跳转到不同的服务

所提供的服务如下

服务列表

两个目标分析

UdsRequestFileTransferService

构造满足的条件后,我们传送的路径字符串会拼接到/tmp/data/后面。同时过滤../。

UdsRoutineControlService

这个函数从getflag这看起来就像目标函数,要求的条件很多。

唯一一个不可控因素backdoorMem是random出来的。

可以通过UdsWriteMemoryByAddressService写内存。

攻击思路

1、注册,使客户端能访问uds服务

  • sourceAddress=0x1
  • targetAddress=0x100

2、构造满足UdsRoutineControlService的条件

  • securityLevel=1
  • currentSession=2
  • retineControlType=1
  • routineIdentifier=0xbac4
  • backdoorMem地址中内容为0xdeadbeef

3、backdoorMem取值范围0x123000-0xfffff000后三位固定为0。

4、通过UdsWriteMemoryByAddressService向0x125000写入内存deadbeef

5、n随机区间[0~1048284] 多进程循环调用直到 n==2 backdoormem=0x125000

6、调用UdsRoutineControlService

构造请求

doip协议

构造注册请求

调用handleRoutingActivationMessage

需要满足的条件

activationType=0

sourceAddress=1

执行后 hasRegisterd=1

设置currentSession

调用UdsSessionControlService

需要先将currentSession设置成3 保证下次设置2的时候可以走else分支

设置securityLevel

调用UdsSecurityAccessService

请求seed

根据seed计算key

seed进行变换后调用xteaEncryptGetKey进行加密计算key

相等的话设置securityLevel=1

写入0xdeadbeef到backdoorMem

调用UdsWriteMemoryByAddressService

设置memoryAddress为0x2000 0x123000+0x2000=0x125000

设置写入的内容为0xdeadbeef

判断是否有返回,有返回则写入成功

调用getflag函数

调用UdsRoutineControlService

bash脚本

#!/bin/bashfor((i=1;i<1000000;i++));do./uds;done

启动多个该脚本同时进行。增加并发减小爆破时间。

patch 测试 exp

patch Server初始化中random返回结果

将randomNum返回值修改为0x125000

在linux 根目录创建getflag文件赋予777权限,/getflag文件内容如下

#!/bin/shecho hello

执行exp 成功返回hello

真正的exp

正常情况下这样爆破是没问题的,但我一直在想这是CTF没有那么多时间让你爆破,肯定还有其他办法。得知....//....//可以路径穿越后。又有了攻击思路:

和前面一样。

这里不直接读内存,通过UdsRequestFileTransferService设置路径

读取路径为....//....//proc/self/maps

经过过滤拼接后得到/tmp/data/../../proc/self/maps

设置路径包构造

调用UdsTransferDataService读取文件

对返回的/proc/self/maps进行解析获取到backdoorMem基址。基址减去0x123000获取到偏移

将0xdeadbeef写入backdoorMem基址

调用getflag

成功获取flag

本作品采用《CC 协议》,转载必须注明作者和本文链接
uds诊断协议-逆向 WP
2022-08-14 16:17:02
介绍这是一道uds诊断协议逆向。比赛的时候时间太短没做出来,又花时间研究了一下拿出来分享。UdsRoutineControlService这个函数从getflag这看起来就像目标函数,要求的条件很多。
本研究是针对特斯拉 Model X 无钥匙系统的实用安全评估。所分析的无钥匙系统采用了由通用标准认证的安全元件实现的安全对称密钥和公钥密码原语。本文记录了该系统的内部工作原理,包括遥控钥匙、车身控制模块和配对协议。此外,还介绍了相关逆向工程技术和几个安全问题。其中,遥控钥匙固件更新机制和遥控钥匙配对协议中发现的问题导致绕过了所有已实施的加密安全措施。此研究还开发了一种完全远程的概念验证攻击(PoC
目前,Gallia主要针对的是UDS接口,并利用了模块化的设计分别实现了日志记录和归档功能。正常工作的Payload是1001,这也是DiagnosticSessionControl服务所要求的。该请求可以让ECU修改DefaultSession。当收到有效应答时,说明找到了ECU。服务扫描服务扫描在UDS协议级别运行,UDS提供了几个称为服务的节点。
CVE-2021-40438-Apache httpd mod_proxy SSRF漏洞深入分析与复现。
本教程将逐步指导您在 Ubuntu 上安装和配置 OpenLiteSpeed 和 PHP 8。它是一个功能强大的模块化 HTTP 服务器,可以以低资源使用率处理数十万个同时连接。它将无与伦比的性能、安全性、可扩展性、简单性和优化捆绑在一个包中。此外,OpenLiteSpeed 提供了一个基于 Web 的管理用户界面,用于通过 Web 浏览器管理Web 服务器。值得一提的是,OpenLiteSpeed 使用与 Apache Web 服务器相同的配置,并且与 Apache 提供的大多数功能兼容。
一、前言 这篇文章可能出现一些图文截图颜色或者命令端口不一样的情况,原因是因为这篇文章是我重复尝试过好多次才写的,所以比如正常应该是访问6443,但是截图中是显示大端口比如60123这种,不影响阅读和文章逻辑,无需理会即可,另外k8s基础那一栏。。。本来想写一下k8s的鉴权,后来想了想,太长了,不便于我查笔记,还不如分开写,所以K8S基础那里属于凑数???写了懒得删(虽然是粘贴的:))
一、Docker逃逸 1、docker daemon api未授权访问 漏洞原理:在使用docker swarm的时候,节点上会开放一个TCP端口2375,绑定在0.0.0.0上,如果我们使用HTTP的方式访问会返回404 利用思路:通过挂在宿主机的目录,写定时任务获取SHELL,从而逃逸。
戴尔科技集团大中华区非结构化数据存储事业部总经理刘志洪如此谈到。同Dell EMC PowerProtect Cyber Recovery一样,Dell EMC Ransomware Defender方案也具备检测、保护和恢复三重能力。除了本地数据之外,该方案也包括支持用户在公有云环境中启动应用程序和恢复相关的数据。
VSole
网络安全专家