Mac ida 配置
Mac ida 配置版本是飘云阁泄露的 7.5 绿色全插件版。运行在正版 crossover 上,里面容器是 win10 64bit ,安装了 python 3.9。
安装 rizzo 这种作者自己写的库直接复制到 plugin 就能用了,但是遇到 findcryto 这种复制文件到 plugin 之后还需要 pip 安装额外库的现在遇到一点问题。
就是 pip 直接安装会遇到 Microsoft visual c++ 14.0 is required 问题,所以采取去 pypi 下载 whl 文件直接安装,但是部分库没有提供 py39 win64 amd 对应的文件,所以安装不上只能等待更新
crossover 打开终端窗口需要每次自己手动打开,路径为:”/Users/skye/Library/Application Support/CrossOver/Bottles/IDA Pro 7.5/drive_c/windows/system32/cmd.exe”
参考文章https://blog.csdn.net/ting0922/article/details/82355663
htt ...
nfc破解
NFC卡分类常用的NFC卡可以分为ID卡和IC卡。ID卡全称身份识别卡(Identification Card),为低频卡,工作频率为 125KHz-1000Khz(与大部分手机、智能设备工作频率不同,无法模拟),编号固定,卡号公开,不可写入数据,逐步淘汰中。IC卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card),工作频率为 13.56MHz(与大部分手机 NFC 频率一样,可模拟)。
IC卡类型常用IC卡主要有以下类型(以下介绍来自网络):
**Mifare S50(M1):**MIFARE Classic是恩智浦半导体开发的可用于非接触式智能卡,符合ISO/IEC 14443 A类标准。用于公共交通票证等应用,还可用于各类其他应用有S20,S50(M1),S70几种规格,主要是根据存储器容量划分,存储器容量分别有320B,1K,4K。具有以下防干扰、轻松简便以及安全等特性。日常使用的电梯卡、门禁卡等智能卡发卡商所使用的都是 M1 卡,可以理解为物业发的原卡(母卡)。常见校园卡、公交卡等也是 M1 卡。M1 卡仅仅适合发卡方发新卡使 ...
House_of_Lore
House of Lore基本信息smallbin 是双向链表,每次 malloc 取出链表最后最后一个堆块,进行 unlink 取出。house of lore 目标是控制 smallbin 的 bk 指针,及 fake_chunk bk 指针,实现分配任意指定地址的堆。
原理分析malloc 申请堆块进入到 smallbin 判断函数时:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//glibc/malloc/malloc.c/* If a small request, check regular bin. Since these "smallbins" hold one size each, no searching within bins is necessary. (For a large request, we need to wait until unsorted chunks are ...
ARM学习笔记
环境搭建(基于Ubuntu18.04)
目前问题是ubuntu18下,在我的虚拟机中pwndbg和gdb-multiarch不能兼容,其他师傅却可以。尝试换成gef,结果gdb不行了反而gdb-multiarch可以。
现阶段决定先在16编译qemu4.2先用着,到时再去嫖一个别人的镜像吧,因为我的这镜像也是多问题。。。
安装 qemu使用包管理查了下包管理器安装的版本停留在 2.x 版本,考虑到最近有的程序要用新版本才能加载,放弃这种方式安装
123456789101112#查看apt安装版本apt-cache madison qemu qemu | 1:2.11+dfsg-1ubuntu7.34 | http://mirrors.aliyun.com/ubuntu bionic-security/universe amd64 Packages qemu | 1:2.11+dfsg-1ubuntu7.34 | http://mirrors.aliyun.com/ubuntu bionic-updates/universe amd64 Packages ...
FSOP
FSOP介绍FSOP 是 File Stream Oriented Programming 的缩写,根据前面对 FILE 的介绍得知进程内所有的_IO_FILE 结构会使用 _chain 域相互连接形成一个链表,这个链表的头部由 _IO_list_all 维护。
FSOP 的核心思想就是劫持 _IO_list_all 的值来伪造链表和其中的 _IO_FILE 项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP 选择的触发方法是调用 _IO_flush_all_lockp,这个函数会刷新 _IO_list_all 链表中所有项的文件流,相当于对每个 FILE 调用 fflush,也对应着会调用_IO_FILE_plus.vtable 中的 _IO_overflow。
12345678910111213141516int_IO_flush_all_lockp (int do_lock){ ... fp = (_IO_FILE *) _IO_list_all; while (fp != NULL) { ... if (((fp ...
2020 SWPUCTF 部分Pwn Writeup
西南石油大学“智仁杯”
shellco
本地各种系统成功,远程GG
提示 “you lost” 之后会跳转到 data 段存储的一个地址:
调试发现,写入内容是从比这个变量高的地址写入,每次写入距离都会减少 0x10 。输入内容会检查,写入 8 bit 以上会报错。
倒序写入 shellcode 。
EXP本地写入 17 次才会覆盖 0x600489 ,远程 7 次,调整之后依然不成功。
1234567891011121314151617181920212223242526272829303132333435363738from pwn import *context(arch='amd64',log_level='debug')p = process("./1")# p = remote("49.235.209.57",10000)p.recvuntil('name\n')p.sendline("aaaaaaab")# asm("xor rdx, ...
伪造 vtable 劫持程序流程
伪造 vtable 劫持程序流程简介前面我们介绍了 Linux 中文件流的特性(FILE),我们可以得知 Linux 中的一些常见的 IO 操作函数都需要经过 FILE 结构进行处理。尤其是_IO_FILE_plus 结构中存在 vtable,一些函数会取出 vtable 中的指针进行调用。
因此伪造 vtable 劫持程序流程的中心思想就是针对_IO_FILE_plus 的 vtable 动手脚,通过把 vtable 指向我们控制的内存,并在其中布置函数指针来实现。
因此 vtable 劫持分为两种,一种是直接改写 vtable 中的函数指针,通过任意地址写就可以实现。另一种是覆盖 vtable 的指针指向我们控制的内存,然后在其中布置函数指针。
实践这里演示了修改 vtable 中的指针,首先需要知道_IO_FILE_plus 位于哪里,对于 fopen 的情况下是位于堆内存,对于 stdin\stdout\stderr 是位于 libc.so 中。
1234567891011int main(void){ FILE *fp; long long *vtabl ...
libc2.29_tcache_doublefree
libc2.29_tcache_doublefree* CTF上遇到的题目。给的是最新版的 libc2.27 ,新增了在 libc2.29 上的 tcache double free 检测。
tcache 新增防护机制tcache_entryTcache_entry 结构体新增了指针 key 放在 bk 位,作用是检测 tcache double free :
123456typedef struct tcache_entry{ struct tcache_entry *next; /* This field exists to detect double frees. */ struct tcache_perthread_struct *key;} tcache_entry;
tcache_put用 tcache_put() 放堆进 tcache bin 时,tcache_perthread_struct 地址被写入 e->key ,即 tcache 结构体堆地址写入释放堆的 bk 位:
1234567891011121314151617/* Ca ...
Libc2.29类unlink_attack
Libc2.29 unlink Attackunsortbin 变化libc2.23 没有对 unsortedbin 进行完整性检查:
1234567891011for (;; ) { int iters = 0; while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av)) { bck = victim->bk; if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0) || __builtin_expect (victim->size > av->system_mem, 0)) malloc_printerr (check_action, "malloc(): memory corruption", chunk2mem (victim), ...
unlink源码阅读总结
合并优先级
先合并物理低地址空闲块
后合并物理高地址空闲快
合并过程Demo 程序
基于 glibc 2.23
1234567891011121314151617181920#include <stdio.h>#include <stdlib.h>char *ptr[16];int main(){ char *protect; ptr[0]=malloc(0xf8); ptr[1]=malloc(0xf8); ptr[2]=malloc(0xf8); protect=malloc(0xf8); free(ptr[0]); free(ptr[2]); free(ptr[1]); return 0;}
编译指令:
1gcc main.c -o main
Demo 说明程序中 chunk0 chunk2 释放顺序可以互换不影响,当释放 chunk1 会同时发生向前和向后 unlink :
向前 unlink :与物理地址高 chunk2 合并
向后 unlink :与物理地址低 chu ...