网络协议栈CH1-CH3
参考教材《TCP/IP详解 卷2:实现》,文内示意图大多取自该教材。本文为复习时自行总结,难免存在不全或者错误,求求大伙轻喷。如有问题可以留言在文末评论区,或者直接私聊,我会及时更改文章内容。 第一章 概述基本框架网络输入输出层间框架基本框架如下图所示,我们会在后面详细讨论输入输出 UDP示例socket程序框架 这段C代码也充当后续我们分析输入输出时的例子 /* * Send a UDP datagram to the daytime server on ...
【kernel】内核本地调试入门
提取vmlinux使用extract-vmlinux脚本提取,脚本下载地址:linux/extract-vmlinux at master · torvalds/linux (github.com) ./extract-vmlinux ./bzImage > vmlinux 开放调试端口在boot.sh中加入如下参数 -gdb tcp::[port] #如下 -gdb tcp::1234 启动boot.sh 调试 root权限下运行 gdb . ...
Linux Syscall Reference(64 bit)
列举了全部的64位syscall调用表,方便离线时进行查询 # Name Registers Definition rax rdi rsi rdx r10 r8 r9 0 sys_read 0x00 unsigned int fd char __user *buf size_t count - - - fs/read_write.c:621 1 sys_write 0x01 unsigned int fd const cha ...
【kernel】提权入门-part1
纠结了很久,决定还是开启这个模块的学习,在这个路口迷茫了很久了,一直没有决定好走向何处。虽然有可能会走错路,可能会学习很多看起来没用的东西,但希望Kernel的学习能够带我刚开始接触PWN时的乐趣。将会主要借助CTF wiki和《从0到1》 前置内核会通过进程的 task_struct 结构体中的 cred 指针来索引 cred 结构体,然后根据 cred 的内容来判断一个进程拥有的权限,如果 cred 结构体成员中的 uid-fsgid 都为 0,那一般就会认为进程具有 ...
【kernel】提权入门-part2
如果我们可以改变特权进程的执行轨迹,也可以实现提权。这里我们从以下角度来考虑如何改变特权进程的执行轨迹。 改数据 改代码 改数据符号链接如果一个 root 权限的进程会执行一个符号链接的程序,并且该符号链接或者符号链接指向的程序可以由攻击者控制,攻击者就可以实现提权。 call_usermodehelpercall_usermodehelper 是一种内核线程执行用户态应用的方式,并且启动的进程具有 root 权限。因此,如果我们能够控制具体要执行的应用,那就可以实现提权 ...
跳转指令汇总
无条件跳转JMP ;无条件跳转 根据CX、ECX寄存器的值跳转JCXZ ;CX 为 0 则跳转 JECXZ;ECX 为 0 则跳转 根据标志位跳转的指令JE ;等于则跳转同JZJNE ;不等于则跳转同JNZ JNE ;不等于则跳转 JA ;无符号大于则跳转 JNA ;无符号不大于则跳转 JAE ;无符号大于等于则跳转 同JNB JNAE ;无符号不大于等于则跳转 同JB JB ;无符号小于则跳转 JNB ;无符号不小于则跳转 JBE ;无符号小于等于则跳 ...
【IO_FILE】源码详解-part2
在上一篇文章中,主要对IO_FILE结构体相关以及fopen函数进行了深入的介绍。本文将继续从glibc2.36源码出发,介绍fread函数相关内容 fread首先是一个宏定义,替换为_IO_fread函数 // htps://elixir.bootlin.com/glibc/latest/source/stdio-common/getw.c#L21 #define fread(p, m, n, s) _IO_fread (p, m, n, s) // https:// ...
【IO_FILE】源码详解
由于glibc版本的不断更新,常见几种hook在glibc2.34终被舍去,我们急需一种能够在高版本的glibc下仍能有效的getshell方法。而IO_FILE作为heap题目的进阶技能逐渐引起大家注意,吸引了许多大佬投入其中。仅在在2021-2022年期间就出现出现了大量以IO_FILE为基础的调用链利用方式,在比赛中也逐渐成为了当下heap题目的主流getshell方式。本文以glibc2.36为例,从相关结构体以及fopen函数源码入手,详细介绍IO_FILE相关知 ...
【IO_FILE】FSOP
FSOP 是 File Stream Oriented Programming 的缩写,根据前面对 FILE 的介绍得知进程内所有的_IO_FILE 结构会使用_chain 域相互连接形成一个链表,这个链表的头部由_IO_list_all 维护。另外由于网络上很多IO_FILE相关博客含有相关glibc源代码,但是并没有源代码的完整部分或者链接。在之后的博客中,我会包含该段代码在哪里可以查看得到。 介绍FSOP 的核心思想就是劫持_IO_list_all 的值来伪造链表和 ...
【IO_FILE】house of cat
前言House of Cat利用了House of emma的虚表偏移修改思想,通过修改虚表指针的偏移,避免了对需要绕过TLS上 _pointer_chk_guard的检测相关的IO函数的调用,转而调用**_IO_wfile_jumps中的_IO_wfile_seekoff函数,然后进入到_IO_switch_to_wget_mode函数中来攻击,从而使得攻击条件和利用变得更为简单。并且house of cat在FSOP的情况下也是可行的,只需修改虚表指针的偏移来调用_IO_ ...