汽车安全测试CAN指南

CAN相关介绍

CAN

在汽车领域,CAN(Controller Area Network)是一种通信协议,用于在车辆电子系统中传输数据和命令。CAN总线是车辆中各个电子控制单元(ECU)之间进行通信的基础设施。

控制器局域网CAN总线)是一种车辆总线标准,旨在允许微控制器和设备在没有主机的情况下与彼此的应用程序通信。这是一个基于消息的协议,最初设计用于汽车内的多路电气布线,以节省铜,但它也可以在许多其他环境中使用。对于每个设备,帧中的数据是串行传输的,但如果多个设备同时传输,最高优先级的设备可以继续,而其他设备可以退出。帧由所有设备接收,包括传输设备。^1

在CAN问世之前,车载通信系统是通过点对点的布线系统实现的。随着车载电子元件越来越多,这种通信系统变得愈发笨重,而且维护费用非常昂贵。这时,CAN应运而生,并成为主流的车载通信系统。

简单地说,CAN允许汽车中的不同电子模块相互通信并分享数据。CAN提案的主要动机是它允许多个ECU(ECU=发动机控制单元=汽车控制单元)仅用一根电缆进行通信。一辆现代汽车最多可以有70个ECU。

img

codeql学习指南

如何安装

安装codeql

基本查询

查询结构

查询基本包含3部分,作用与SQL查询的FROM、WHERE、SELECT部分类似。

查询部分 目的 细节
import java 为 Java 和 Kotlin 导入标准 CodeQL 库。 每个查询都以一个或多个语句开始import
from MethodAccess ma 定义查询的变量。声明的形式为: <type> <variable name> 我们用:MethodAccess调用表达式的变量
where ma.getMethod().hasName("equals") and ma.getArgument(0).(StringLiteral).getValue() = "" 定义变量的条件。 ma.getMethod().hasName("equals")仅限ma于调用方法 call equalsma.getArgument(0).(StringLiteral).getValue() = ""说参数必须是文字的""
select ma, "This comparison to empty string is inefficient, use isEmpty() instead." 定义每次匹配报告的内容。select用于查找不良编码实践实例的查询语句始终采用以下形式: select <program element>, "<alert message>" .equals使用解释问题的字符串报告生成的表达式。

OSS云存储相关安全风险

​ OSS服务作为一项重要的云上服务,承担了存储用户数据的重要功能。对象存储服务提供了细粒度的访问权限控制功能,以保证用户数据的安全性。如果使用OSS服务时安全意识不足或对访问权限以及访问策略错误理解,将会导致数据被非法访问或篡改,产生严重后果。

本文将介绍下相关OSS云存储相关方面的风险问题,老规矩先上一张图。

image-20230330091632227

DLL劫持漏洞详解

1.DLL是什么

DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。

1.静态调用方式:由编译系统完成对 DLL 的加载和应用程序结束时 DLL 卸载的编码(如还有其它程序使用该 DLL,则 Windows 对 DLL 的应用记录减1,直到所有相关程序都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。

2.动态调用方式:是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。


objection 使用详解

简介

objection是一个基于Frida的动态的移动测试工具包,可以帮助我们来进行应用程序安全评估。

主要由以下三个组件组成

1.Frida-Gadget,以嵌入式模式运行应用,通过objection自己的api方法去调用frda执行我们想要的命令

2.objeciton本身是由python编写的可以通过python实现一个交互式shell进行命令的加载和使用,以此来调用objection

3.objection进行hook时会通过TypeScript独立生成一个agent.js文件,这样可以在使用中可以去直接调用所有的功能

objection.png


SSTI模版注入学习

模版引擎

模版引擎(这里特指用于Web开发的模版引擎)是为了使用户界面与业务数据(内容)分离而产生的,他可以生成特定格式的文档,利用模版引擎来生成前端的html代码,模版引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模版+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

模版引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。

SSTI(模版注入)

SSTI就是服务器端模版注入(Server-Side Template Injection)

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的MVC模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给Vier视图层,经过模版渲染展示给 用户。

漏洞成因就是服务端接收了用户的恶意输入以后,未进过任何处理就将其作为Web应用模版的一部分,模版引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模版的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题。其影响范围主要取决于模版引擎的复杂性。

凡是使用模版的地方都可能会出现SSTI的问题,SSTI不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模版引擎发现了很大的安全漏洞,然后模版引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模块引擎。

附表

image-20220120174838082


Frida Hook 总结

Frida 常用操作总结

Frida环境

https://github.com/frida/frida

Pyenv

python全版本随机切换,这里提供macOS上的配置方法

Frida安装

如果直接按下述安装则会直接安装frida和frida-tools的最新版本。

pip install frida-tools
frida --version
frida-ps --version

我们也可以自由安装旧版本的frida,例如12.8.0

pyenv install 3.7.7
pyenv local 3.7.7
pip install frida==12.8.0
pip install frida-tools==5.3.0

安装objection

pip install objection
objection -h

APP测试抓包常见问题总结

平常在进行APP测试的时候发现存在了很多问题,现在总结记录一下对应的知识,都在这遍文章下记录更新,老规矩先放一张图

image-20211206111758936