mini-L WriteUp
mini-L 部分WriteUpPhoneBook最大进步 这次没摆烂学了一下ida怎么加结构体
View - Open Subviews - Local Type - INSERT键 - 输入新结构体 - 右击”Synchornize to idb”
然后发现不加结构体更好看出来溢出
其实思路很简单
存在一个3字节的溢出,直接可以修改node.next
首先利用%s,泄露出堆地址
接着构造多个小堆块,同时伪造prev和size,修改某个堆块的指针,从而把我们的fake_chunk放到unsortedbin中
修改链表,泄露libc
后面常规打法,用libc_environ
由于可以修改指针,其实可以算好偏移,就可以实现任意地址写和任意地址读
放一个官方的exp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848 ...
house-of-Kiwi
House_of_Kiwi在CTF的pwn题里,经常会遇到一些加了沙盒的题目,这种题目通常有下面两种
劫持 __free_hook 为一些特定的gadget,进行栈的迁移
劫持 __malloc_hook 为 setcontext + 53/ setcontext + 61 以及劫持 IO_list_all ,使得exit调用 _IO_cleanup 刷新缓冲区的时候读取flag
setcontexnt+61 有原本的rdi控制变成了rdx控制,需要控制rdx寄存器
缺点:如果把 exit 替换为 _exit ,由 syscall 调用,就不会走IO去刷新缓冲区,切高版本会取消对hook的使用
1234567891011121314151617181920<setcontext+61>: mov rsp,QWORD PTR [rdx+0xa0]<setcontext+68>: mov rbx,QWORD PTR [rdx+0x80]<setcontext+75>: mov rbp,QWORD PTR [rdx+ ...
house-of-emma
House_of_emma原文:第七届“湖湘杯” House _OF _Emma | 设计思路与解析-安全客 - 安全资讯平台 (anquanke.com)
利用条件:
有一个可控地址
能够触发io
寻找合法的vtable在 vtable 的合法范围内,存在一个_IO_cookie_jumps :
12345678910111213141516171819202122static const struct _IO_jump_t _IO_cookie_jumps libio_vtable = { JUMP_INIT_DUMMY, JUMP_INIT(finish, _IO_file_finish), JUMP_INIT(overflow, _IO_file_overflow), JUMP_INIT(underflow, _IO_file_underflow), JUMP_INIT(uflow, _IO_default_uflow), JUMP_INIT(pbackfail, _IO_default_pbackfail), JUMP_INIT(xsputn, _IO_file_ ...
house_of_apple系列
House of apple系列&&复习larginbin attack复习largebin_attacklargebin和一般的chunk不同,结构为
prev_size
size
fd
bk
fd_nextsize
bk_nextsize
content
content
可以看到,largebin比平常的chunk多了两个位,一个是fd_nextsize指向前一个比自己小的chunk,bk_nextsize指向后一个size比自己大的size
malloc_consolidate原文 堆漏洞挖掘中的malloc_consolidate与FASTBIN_CONSOLIDATION_THRESHOLD-CSDN博客
这里关乎着碎片堆的整理,目前看起来有以下几种情况
当申请一个堆块大于 smallbin的最小大小时,会触发 malloc_consolidate() ,他会首先把 fastbin 中相邻的块 (指物理地址相邻) 进行合并,合并后放入 unsortedbin 中,随后,为了分配申请的chunk,会对 unsort ...
Practice
Practice:一些平常联系的记录,不能摆烂了(x
巅峰极客2022Giftlibc2.27,很好的一道题(我不会
首先在remove_gift()中存在uaf漏洞
限制了add的次数是10次,常规的打法并不足够分配,这时我们注意到在另外一个bargain函数中可以控制堆块的fd,于是思路就很清晰了,通过控制fd,伪造出一条tcache的链子
exp12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667from pwn import*# p = process("./service2")p = remote("node4.anna.nssctf.cn", "28810")menu = "your choice:\n"def ChoiceGift(ch, payload): p.recvuntil(menu ...
Kernel Basic
Before ALL本文是我学习Kernel时记下的笔记,其中大量借鉴了网上各位师傅的博客,若有侵权请联系我更改。
Basic Knowledgekernelkernel是一个用来管理软件发出的 I/O 要求,并把这些要求转义为指令交给CPU等处理的程序。kernel是现代操作系统中最基本的部分
kernel最重要的功能为以下两点:
控制并与硬件进行交互
提供application可以运行的程序
注意:kernel的crash通常会引起程序的重启
分级保护域分级保护域(hierarchical protection domains) 又称为保护环,简称Rings,是一种将计算机的不同资源划分不同权限的模型
intel CPU 将 CPU 的特权级别分为 4 个级别:Ring 0, Ring 1, Ring 2, Ring 3。
Ring0只给OS时候用,Ring3所有程序都可以使用,现代计算机系统大部分都只使用了RIng0和Ring3
Loadable Kernel Modules(LKMs)可加载核心模块(或者直接称为内核模块),是一个运行在内核空间的可执行程序。Lin ...
高版本glibc利用总结
高版本glibc利用总结house of botcakelibc版本:libc2.28-libc2.30
原理:此版本下,对tcache_entry加入了key字段且key字段的值为tcachebin+0x10。无法方便的完成doublefree
利用流程:
先填满tcachebin且size>0x80
再连续free两个chunk,要求A在B的上方且B的size和第一步放入tcache的chunk的size相同,让他们合并后进入unsortedbin
从tcache中取出一个chunk
利用uaf,将b给doublefree进入到tcache,可以避开key字段的检测
largebin attacklibc版本:
libc2.28以后,加入了对unsoredbin的bk指针的检测,此后unsortedbin不再起作用
libc2.30之后,加入了对largebin的检查,largebin attack被限制,但是仍然可以利用
利用流程:之前的利用中,我们选择了第二个分支,在其中修改bk为target_addr-0x10,在bk_nextsize中写入target_addr-0x2 ...
glibc_final
glibc总结学了也有三个月的glibc(其实自己一直在摆烂),感觉glibc不是很有意思,今天写个总结,就把这东西跳过了吧(毕竟看现在各位大爹出的题都是VM,jit这种)
在此我会借鉴很多师傅的文章 (如果有侵权行为请联系 2295040368@qq.com 删除)
Heap的基础知识Heapheap 由低地址向高地址增长,与栈相反,在内存分配如下图
在Linux系统上,程序被载入内存时,内核为用户进程地址空间建立了代码段、数据段和堆栈段,在数据段与堆栈段之间的空闲区域用于动态内存分配。内核数据结构mm_struct中的成员变量start_code和end_code是进程代码段的起始和终止地址,start_d
ata和 end_data是进程数据段的起始和终止地址,start_stack是进程堆栈段起始地址, start_brk 是进程动态内存分配起始地址(堆的起始地址),还有一个 brk(堆的当前最后地址),就是动态内存 ...
SharkCTF2023培训
11e9df305dc8ef7c4d5b4858867c06c9746ab7baedaa016f416c16681b64fdfcbc9abb2e1824a01831d462cd1c7a577426b94c44a0ad5c2e7ba9ab6af5a587344a5d24f863f779c0612fd18f1d769bd76784874e5c19adece13c29a8f5cf881cfbbf8dbf00ac0197c10ca408784d7538484dd39305f0cc29a593fdf534b75e36b808205b390436cfa30288a191f80b619aa3b65b236763e9c9e470e15efa2885cf39d537b09b1e678afa4623e7e4d2f361d6525b449868b3eadcfe209f7613c5568b669dcdd195ab320b45733baf59c63204a40b92870496e2612c485a7bd7eab2632572959317f9d89935a7a5b50724ce013ed68f910982f ...
NSSCTFRound#14
NSSCTFRound#14本次NSSCTFRound赛有点事情没有写,后续回来复现,估计当时也只能写出来两道题,还是太菜了,又在两位师傅的帮助提示下完成了四道题的复现,希望自己以后可以多多努力
love很简单的一道题格式化字符串,赛后群里面幽林师傅说本意是打STL结构体,但是这里被非预期了,直接泄露了canary然后ret2text就可以了
123456789101112131415161718192021222324from pwn import*#p=process('./love')p=remote('node3.anna.nssctf.cn',28435)libc=ELF('./libc.so.6')p.recvuntil('Toka\n')pause()p.sendline(b'%520c%9$n%17$p%15$p')context.log_level='debug'p.recvuntil('0x')libc_base=int(p.r ...