3.static_link 由于本人菜鸡和时间问题,只打了前两周,打出了pwn的三道简单题目,记录自己的做题过程。 XYCTF 2024 WriteUp >pwn 1.hello_world(签到) 常规checksec IDA反编译进入主函数 发现read可以进行两次栈溢出,同时%s格式化字符串可以泄露栈上地址。 vuln程序中没有system和/bin/sh字符串,考虑ret2libc, 同...
昨天学习了re2syscall,该方法主要是系统中没有system()函数,也没有/bin/sh字符串,一般该二进制程序使用static link静态链接,可以找到很多的gadget,我们可以利用这些gadget进行系统调用 但是在动态链接时,gadget就变少了,也是同样的没有system()函数,这时我们需要在函数动态绑定的libc中找,例如经常使用的system、/bin/...
may_follow_link函数分成两步,一是判断sysctl_protected_symlinks是否为0,二是进行权限判断(当前用户的文件uid和节点uid是否一致,父目录非粘滞目录且可写,父目录uid和节点uid是否一致)。 staticconstchar *pick_link(structnameidata*nd,structpath*link, structinode*inod...
在使用使用内存大致有两种常见且合规的方式,一是使用局部变量,操作局部变量一般是对栈进行操作,除非局部变量被static关键字修饰(此时位于全局变量区),栈空间是由编译器控制的,在编译时栈空间就会确定下来,二是使用堆,堆内存相比栈内存有一个好处,就是堆是动态申请的,不向栈内存那样...
BCTRL:Branch to Count Register and Link(用于调用函数,将当前程序返回地址存入寄存器LR并跳去执行寄存器CTR指向的指令) @符号通常用于表示地址的高位和低位。 下例中表示将FinishedUpload标签的高位地址加载到 r9 ,r9 左移16位,将FinishedUpload标签的低位地址与 r9 相加后的值存储到 r3。即实现了让 r3 指向Finis...
static void * tcache_get (size_t tc_idx) { tcache_entry *e = tcache->entries[tc_idx]; assert (tc_idx < TCACHE_MAX_BINS); assert (tcache->entries[tc_idx] > 0); tcache->entries[tc_idx] = e->next; --(tcache->counts[tc_idx]); ...
这时我们只需要构造link_map中的SYMTAB、STRTAB、JMPREL、l_addr几个部分。五 示例讲解由于代码比较简单,这里不会从反汇编的角度进行分析,下面直接给出了源代码。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define MAX_LEN 0x100 static void vuln(void) { char ...
处理好VMA的属性信息后,copy_page_range函数会正式开始复制内存数据。is_cow_mapping函数会判断当前VMA非共享内存且可写,如果符合就会当前VMA支持COW机制,然后就会通过pgd_offset函数获取新旧VMA的PGD,从这里开始内核会逐级遍历页表,直到最低的1级页表PTE。
LK即LINK bit,为0时不设置链接寄存器LR;为1时设置连接寄存器LR,转移指令后面的指令地址被放置在链接寄存器LR中 注意尽管两个最低有效位可以接受任何写入的值,但当LR被用作地址时,它们会被忽略。有些处理器可能会保存转移最近设置的LR值的堆栈。 CR寄存器 ...
静态链接:gcc -fno-poe --static -o statest xxx.py statically link本块主要讨论动态链接动态链接相关结构dynamic section 为操作系统描述了整个动态链接的完整内容提供动态链接相关信息link_map 保存进程载入的动态链接库的链表dl_runtime_resolve 解析第一次在动态链接的函数的真实地址...