前言

程序设计课期末作业要求实现一个「基于可穿戴传感器数据的人体活动识别」,具体是实现一个分类任务。

数据采集设备以每秒 1 次的频率记录传感器信息,涵盖加速度(x、y、 z 轴)、陀螺仪角速度(x、y、z 轴)、温度、湿度、心率、皮肤电反应等共计 561 个数值型特征维度。每条数据均标注了活动类别标签,包括以下六类:

WALKING:行走,标记为 1

WALKING_UPSTAIRS:上楼梯,标记为 2

WALKING_DOWNSTAIRS:下楼梯,标记为 3

SITTING:坐着,标记为 4

STANDING:站着,标记为 5

LAYING:平躺,标记为 6

EasyDMA

From: ACTF 2025

题目给出一个去符号的 qemu 二进制文件 qemu-system-x86_64,启动参数如下

#!/bin/sh
timeout --foreground 300 ./qemu-system-x86_64 \
    -L pc-bios \
    -m 1024 \
    -kernel bzImage \
    -initrd rootfs.cpio \
    -drive file=null-co://,if=none,id=mydisk \
    -device virtio-blk-pci,drive=mydisk,ioeventfd=off \
    -device readflag \
    -append "priority=low console=ttyS0" \
    -monitor /dev/null \
    -nographic

I. FSOP

FSOP 是 File Stream Oriented Programming 的缩写。

FSOP 的核心思想就是劫持 _IO_list_all 的值来伪造链表和其中的 _IO_FILE 项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP 选择的触发方法是调用_IO_flush_all_lockp,这个函数会刷新_IO_list_all 链表中所有项的文件流,相当于对每个 FILE 调用 fflush,也对应着会调用_IO_FILE_plus.vtable 中的_IO_overflow

Backto2016

但你必须先向我们证明自己有回到 2016 的实力!

祝你玩的开心 o ( ̄▽ ̄) ブ

没有附件是正常的喵

这个分数或许也考虑了买 hint 这件事,别害怕嘻嘻

这道题是没有给出附件的,我们需要根据输入和程序的输出获取一切信息。

前言

由于友链页面有使用图片的要求,同时为其他人的站点提供相关的图片资源(虽然使用现成的 GitHub Page 就可以基本实现,但是 Page 所在的仓库是公开的),尝试通过 GitHub 作为图床解决这个问题。然而,访问速度和稳定性都无法得到保证,为此通过网上搜索学习了一下反向代理 (Reverse Proxy) 的相关知识。

Signin2Heap

Vulnerabilities

存在 off-by-null 漏洞,当 prev_size 域复用时,可置零相邻 chunk 的 prev_inuse 位。

前言

本次 DASCTF 12 月赛尝试了 pwn 方向的两道题目,最终还是如愿以偿的爆零了。首先看到题目我就有种陌生的感觉,给定程序是去掉调试符号的,并且有多个函数,大大降低了可读性,和我先前遇见的题目有不小的区别。

一叶舟轻,双桨鸿惊。水天清、影湛波平。鱼翻藻鉴,鹭点烟汀。过沙溪急,霜溪冷,月溪明。

重重似画,曲曲如屏。算当年,虚老严陵。君臣一梦,今古空名。但远山长,云山乱,晓山青。

——《行香子・过七里濑》

shellcode

shellcode 是一段用于利用软件漏洞而执行的代码,shellcode 为 16 进制之机械码,以其经常让攻击者获得 shell 而得名。shellcode 常常使用机器语言编写。

堆的内部结构

在程序的执行过程中,我们称由 malloc 申请的内存为 chunk 。这块内存在 ptmalloc 内部用 malloc_chunk 结构体来表示。

/*
  This struct declaration is misleading (but accurate and necessary).
  It declares a "view" into memory allowing access to necessary
  fields at known offsets from a given base. See explanation below.
*/
struct malloc_chunk {

  INTERNAL_SIZE_T      prev_size;  /* Size of previous chunk (if free).  */
  INTERNAL_SIZE_T      size;       /* Size in bytes, including overhead. */

  struct malloc_chunk* fd;         /* double links -- used only if free. */
  struct malloc_chunk* bk;

  /* Only used for large blocks: pointer to next larger size.  */
  struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
  struct malloc_chunk* bk_nextsize;
};

关于堆的结构很重要的一点在于,其使用和 free 状态下的结构一致,只是相应功能有区别。例如使用时 fd 段用于存储数据,可以通过某些方法把不合法的数据写入一个 free chunk 的 fd 中。

0%