Misc杂项
- 题目
- 签到
- saleae
- 24c
- usbasp
- DaysBank
题目 赛题类型主要包括:逆向、漏洞挖掘与利用、Web 渗透、密码、隐写、安全编程等类别,考察参赛者不同维度的网络安全理论、技术水平。
文章图片
签到 下载附件后,看到readme.txt打开后提示会有摄像头,打开qiandao.exe,解压并运行软件,对准两个聚焦圆圈,回车输出 flag。
saleae 题目名saleae,是一个逻辑分析工具,不仅可以记录数字和模拟两种信号,还可以解码 SPI、I2C、串行、1-Wire、CAN、Manchester、I2S 等协议。
下载安装软件,然后下载logicdata文件,用saleae打开,发现有4个频道。观察波形,发现channel0是具有周期性的方波,应为时钟信号。
【CTF|第12届全国大学生信息安全竞赛线上初赛Misc杂项 Write Up】根据时钟频率以及通讯方式猜测是属于 SPI 通讯,并且SPI协议正好使用了芯片上的4个引脚,猜测logicdata文件应该用SPI协议进行分析。
分析数据处出现flag,导出数据并用文本编辑器处理,得到flag。
文章图片
SPI、I2C、USART是三种不同的通讯方式:
- SPI英文全称是Serial Peripheral Interface,是串行外接口的缩写,它的通讯方式特点是全双工工作、同步且高速传输,用这种通讯的话一般有一个主机和多个从机一起工作,如果是双向传输的话需要四根线,分别是:SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)四根。因此用这种方式通讯的话一般都是有多个从机设备,像人机交互界面之类。
- I2C英文全称是Inter-Integrated Circuit,它是一种串行总线方式。它通讯只需要两根线,一根是数据线(SDA),一根时钟线(SCL),这种通讯方式是主机和从机没有明确区分出来,但是工作时候只能有一个主机,看电路实际工作需要的方式。因为这种方式只需要两根线,因此这种连接方式应用的比较广泛,特别是一些小型产品上面,像家电类、医疗等方面。
- USART英文全称是Universal Synchronous/Asynchronous Receiver/Transmitter,它是一种全双工的串行接收和发送模块,它需要数据发送器、接收器以及时钟发生器三部分才能工作,而且这种工作方式很灵活,这种方式在STM系列芯片经常用到,我们日常生活当中计算机与电视连接等。
由题名24c得知是基于IIC协议(I2C)的EEPROM存储芯片 24c02,IIC 操作 24c02 的时候要先发送开始操作的地址,以及 NAK 停止符。
空格字符转为十进制的ASCII码为32,读取到c后为NAK且这部分正好有32个字符,因此第一部分接在读到这部分的后面。
\t 不是字符,其对应的 ASCII 是 9,也就是从第 9 号位‘9’开始将”9e”替换为 ac,得到flag。
usbasp 一样使用saleae软件进行分析,且仍然是SPI协议。打开logicdata文件,由于题干中有“一键暴打出题人”,MOSI、MISO、时钟3条线直接按0、1、2顺序默认设置,题干中有“升级固件”,修改使能(Enable)设置。
文章图片
DaysBank 知识点:区块链
题干给出的合约是测试网Rospten上的DaysBank, 合约地址为 0x455541c3e9179a6cd8C418142855d894e11A288c, 此外还给出了合约的部分源码 broken.so:
contract DaysBank {
mapping (address => uint) public balanceOf;
mapping (address => uint) public gift;
constructor() public {
owner = msg.sender;
}event SendFlag(uint256 flagnum, string b64mail);
function payforflag(string b64email) public {require (balanceOf[msg.sender] >= 10000);
emit SendFlag(1, b64mail);
}
根据题目给出的部分源码,我们获取的信息有:
- 合约定义了两个mapping变量(address => uint), balanceOf 和 gift,还有为构造函数,以及发送flag的事件。
- 我们需要利用合约其他未开源的部分将修改balanceOf[msg…sender]以绕过payforflag函数中的检测:
require (balanceOf[msg.sender] >= 10000)
从而触发事件SendFlag。 - 修改完balanceOf[msg.sender]之后,调用payforflag函数时需要将自己的邮箱经过base64转码作为参数传递进去,若能触发事件SendFlag,很快就能收到包含flag的邮件了。
推荐阅读
- 推动NFT走出监管困境,BSN推出支持NFT基础设施网络
- 单片机|单片机初学者做项目为什么这么难(单片机初学者心得有哪些)
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- 单片机|Arduino、arm、树莓派、单片机四者有什么不同()
- 腾讯|SaaS的收入模型有哪些(终于有人讲明白了)
- 就业方向上什么才是最重要的(--- 来自程序猿的迷茫。(C++?Java?or算法?))
- 区块链中加密货币的含义
- 波场万倍潜力币HYL23号21:09分 正式上线JustSwap