Skip to main content

Elegy blog

所以说生命 它璀璨如歌

2024四川省信息安全省赛snake复现

2024四川省信息安全省赛snake复现

复习

由于这题是利用的构造一个fakechunk 来进行free所以我们需要好好搞清楚一下glibc2.39版本下free的检测差不多有哪些(这里针对大chunk)

free

  • 首先会检查size是否正常

    • 是否对齐
    • 是否大于最小值
  • 利用check_inuse_chunk查看这个chunk是否是double free

  • 获取物理意义上下一个chunk

  • chunk不能是topchunk

  • 下一个chunk的p位必须为1

  • 检查下一个chunk的size是否正常

  • 要是当前chunk的prev_inuse位为0则执行合并机制

  • 当下一个chunk不是头chunk 则获取下下个chunk 当nextinuse位为0的话就触发unlink


ElegyLess than 1 minute
2024 年度总结

2024 年度总结

一晃一年过去了,要写年度总结辣!!!

其实也算是我第一次写年度总结,一年过得真快.感觉比大学之前的任何一年都要快。

感觉大学的学习模式确实比较适合喜欢摆烂的我.

玩着玩着一年又过去了,写个年度总结也算是对过去的一年进行总结.

学习&工作

实验室&极客大挑战!!

刚加入大学半学期,一直在以进入我们学校的三叶草实验室努力,真的拼尽全力去面试。

现在回想起来真的是高压的一段时期,白天上课用手机看pwn的各种知识点,下课就去打极客大挑战(我们学校的ctf新生赛),晚上熬夜到三四点去搞面试内容.


ElegyAbout 6 min
不好看的linux内核安全学习 (1) - 复现d3ctf 2022 d3kheap

不好看的linux内核安全学习 (1) - 复现d3ctf 2022 d3kheap

题目启动

本blog大量内容都是对参考文章的摘录汇总,方便本人查看( 所以更推荐直接看参考文章

以及这道题有较多的知识点所以整个文章会有点冗余

可能往后linux内核学习的文章都是这样的形式,通过一个cve或者一个题来学习大量知识点,这样会导致文章都很冗余(充斥大量copy内容),所以我给这个系列叫做《不好看的linux内核安全学习》

内核题在比赛时一般是上传 C 语言程序的 base64 编码到服务器,然后运行

参考文章:浅谈linux中的根文件系统(rootfs的原理和介绍)-CSDN博客

几种linux内核文件的区别(vmlinux、zImage、bzImage、uImage、vmlinuz、initrd )_zimage是什么-CSDN博客

D3CTF2022 - Pwn - d3kheap 题解 - 先知社区 (aliyun.com)

qemu常用参数选项说明_qemu 参数-CSDN博客

Kernel pwn CTF 入门 | Kiprey's Blog

cpio文件系统的解压和制作方法_window cpio文件直接添加文件-CSDN博客

Linux下编写和加载 .ko 文件(驱动模块文件)_qt 加载 .ko-CSDN博客

Linux 系统设置 : insmod 命令详解_linx如何进入insmod-CSDN博客

Linux内核模块详解_linux编写内核模块-CSDN博客

[【Linux驱动开发100问】什么是模块?如何编写和使用模块?_什么是谷歌挂载模块程序-CSDN博客](https://blog.csdn.net/qq_45172832/article/details/129228731#:~:text=在Linux内核中,模块可以被动态地插入和卸载,因此模块通常被用来扩展内核的功能。,而驱动则是一种特殊的模块,用于管理硬件设备,控制硬件设备的操作。 在Linux中,驱动通常也以模块的形式存在于内核中,从而使得内核可以支持更多的硬件设备。)

[Linux内核的ioctl函数学习 - the_tops - 博客园 (cnblogs.com)](https://www.cnblogs.com/the-tops/p/6738089.html#:~:text=ioctl是设备驱动程序中对设备的I%2FO通道进行管理的函数。 所谓对I%2FO通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。 它的调用个数如下: int ioctl (int,fd%2C ind cmd%2C …); 其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。 ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I%2FO通道。)

内核与用户空间的通信实现——ioctl(驱动+用户程序)_ioctl 释放设备-CSDN博客

linux kernel漏洞系列文章:Pwn In Kernel(一):基础知识 - FreeBuf网络安全行业门户

linux内核源码:Index of /sites/ftp.kernel.org/pub/linux/kernel/ (sjtu.edu.cn)

userfaultfd学习:https://brieflyx.me/2020/linux-tools/userfaultfd-internals/

https://blog.jcix.top/2018-10-01/userfaultfd_intro/

https://blog.csdn.net/seaaseesa/article/details/104650794

sk_buff结构体:https://blog.csdn.net/wangquan1992/article/details/112572572

d3kheap复现:https://ywhkkx.github.io/2022/06/30/msg_msg-sk_buff%E7%9A%84%E7%BB%84%E5%90%88%E5%88%A9%E7%94%A8+pipe_buffer%20attack/

msg_msg CVE-2021-22555 :https://www.freebuf.com/articles/system/286366.html


ElegyAbout 14 min
数据库八股文学习(期末备考)

数据库八股文学习(期末备考)

痛恨八股文,这里主要收集解释八股文的文章

小知识点

  • 结构化查询语言(Structured Query Language)简称SQL

  • 使用Create View语句产生的虚表称 视图(View)

  • 数据库提供功能

    • 数据定义(Data Definition):定义数据库结构,包括创建、修改和删除数据库对象,如表、视图、索引等。使用 CREATEALTERDROP 等语句。

    • 数据查询(Data Query):从数据库中检索数据。主要使用 SELECT 语句。

    • 数据操纵(Data Manipulation):对数据库中的数据进行插入、更新和删除操作。使用 INSERTUPDATEDELETE 等语句。

    • 数据控制(Data Control):管理用户权限和数据访问控制。使用 GRANTREVOKE 等语句。

  • 一个关系模式的形式化表示一个五元组 R(U,D,DOM,F)

  • 数据库的安全保护功能:

    • 安全性控制 :防止未经授权的访问,保证数据的保密性和安全性。

    • 完整性控制:确保数据的准确性和一致性。

    • 并发性控制:管理多个用户同时访问数据库时的数据一致性。

    • 故障恢复:在硬件故障、系统崩溃或人为错误后恢复数据库到一致状态

  • 不合理的关系模式会存在哪些异常问题。

    • 数据冗余
    • 插入异常
    • 删除异常
    • 更新异常
  • 模型的数量 用户模式、概念模式和内模式的数量

    • 用户模式可以有多个
    • 概念模式只能有一个
    • 内模式只能有一个

ElegyAbout 5 min
pwn IO相关偏移

pwn IO相关偏移

主要是因为有几次比赛,题基本打到IO了但是就剩下十分钟了根本调不通IO链,为了预防这种情况再次出现这里慢慢总结一下IO相关结构体和不同的攻击方式

这里主要是快捷提供了一些结构体以及偏移方便直接查询,这里的偏移以虚表为主,虚表实现主要是辅助我们查找函数的

gdb调试技巧

  • 查看结构体的偏移量

    ptype /o struct xxxx // 可以获取结构体的偏移量
    
    image-20241027104306803
    image-20241027104306803
  • 查看变量的类型

     ptype 变量 // 可以查看变量类型
    
    image-20241027104229082
    image-20241027104229082

ElegyAbout 12 minpwnio
house of apple2板子

house of apple2板子

vctf apple 复现(apple的通用模板)

本文参考的是Arahat0 师傅的脚本 这里主要介绍一下vctf apple的house of apple部分的思路 与常规的house of apple不同这里将_wide_data指向劫持的FILE结构体加减偏移 来让脚本更加可以移植 最后实现栈迁移打ROP链的操作


ElegyAbout 5 min
One_byte_ROP

One_byte_ROP

题目

void __noreturn sub_11A9()
{
  char v0; // [rsp+Fh] [rbp-11h] BYREF
  void *buf; // [rsp+10h] [rbp-10h] BYREF
  unsigned __int64 v2; // [rsp+18h] [rbp-8h]

  v2 = __readfsqword(0x28u);
  if ( !ptr )
    ptr = malloc(0x40000uLL);
  v0 = 0;
  buf = 0LL;
  read(0, &buf, 8uLL);
  read(0, &v0, 1uLL);
  *((_BYTE *)buf + (_QWORD)ptr) = v0;
  write(1, "HELLO WORLD", 0xCuLL);
  _Exit(0);
}

ElegyLess than 1 minute
CGO

CGO

汇编

参考文章:https://mp.weixin.qq.com/s/YtTY23cWaE3M5ygAurj1Ig

GO语言的汇编并不是针对硬件框架的汇编,而是抽象出来的可移植汇编

使用的是GAS汇编,也就是(Gnu ASsembler) 可以通过

go build -gcflags "-N -l -S" main.go 2 > main.s

实现生成对应汇编代码


ElegyAbout 5 mingolangcgo

This is a blog home page demo.

To use this layout, you should set both layout: BlogHome and home: true in the page front matter.

For related configuration docs, please see blog homepageopen in new window.