前言微软安全中心在北京时间3月12日23时发布了影响Windows 10 等系统用户的SMBv3远程代码执行漏洞补丁
漏洞原因漏洞发生在srv2.sys中,由于SMB没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法.最终导致整数溢出。
漏洞分析看一下调用过程:Srv2ReceiveHandler调用Srv2DecompressMessageAsync
Srv2DecompressMessageAsync 调用Srv2DecompressData
漏洞在Srv2DecompressData函数中
攻击者可以控制Origin...
前言hitcon是权重比较高的国际赛,本文学习一下其中的解题思路.
Trick or Treat这是一道稍微有点脑洞的题目,题目本身的逻辑很简单
1234567891011121314151617181920212223242526272829void __fastcall __noreturn main(__int64 a1, char **a2, char **a3){ signed int i; // [rsp+4h] [rbp-2Ch] __int128 size; // [rsp+8h] [rbp-28h] __int64 v5; // [rsp+18h] ...
reverse观察sub_7FF712C21AB0这个函数的实现过程,刘大神说是xtea算法,我对比了一下实现方法,发现有一些差异的地方
从这里看到一个特征,然后百度到了一篇文章
这里面有xxtea的算法,似乎对上了,在调试的时候,发现这个函数的key是取输入的前四个字符,所以大胆猜测是flag最下面是字符串比较,以及v18和v19的算法
提取最终字符串,脚本很容易还原出最初的内容
123456789101112131415161718192021222324252627282930313233343536373839404142434445# -*- coding: UTF-8 -*...
前言最近看群里有人在讨论今年的巅峰极客,说有道逆向题考的linux的反调试出的挺好的,借着这道题学习一下linux反调试
分析
第一个反调试ptrace函数,代码如下123456789101112 if ( ptrace(0, 0LL, 1LL, 0LL) >= 0 )'''else v6 = 10000000; do { sleep(1u); --v6; } while ( v6 ); exit(-1);}
ptrace函数的相关介绍可以参考官方介绍ptrace,这道题的ptrace绕过的方法很简单,直接nop相关跳转即可...
前言周末打了一次cnas的比赛,最终成绩第6,第三题虚拟机没有D盘,没做出来,回来重新建了个虚拟机,一会儿就搞出来了,题目比较简单,以下是所有题目的writeup.
第一题签到题,查看源代码,通过提示知道有一个www.zip的文件,里面是用户名和密码的字典,控制burp的爆破频率为1秒一次即可.
第二题宽字节注入
1sqlmap -u http://172.20.2.19:9002/article.php?id=1 --dbms mysql --prefix "%df%27" -v 3 -D ctf -T secret –dump
第三题下载文件: http:/...
前言今天刚好有空,做了一下前段时间的bytectf的pwn,学到了新的知识点,在note_five这道题中通过对global_max_fast进行覆盖修改,从而修改fastbin大小的范围,然后进行后续利用
源码分析global_max_fast这个全局变量的作用是用来标志fastbin的大小的阈值,小于这个值的堆块会被认为是fastbin,使用fastbin的相应机制进行管理。看下它的定义:
1234#define set_max_fast(s) \ global_max_fast = (((s) == 0) \ ...
前言这道题又是UAF+_IO_2_1_stdout_的利用,关于_IO_2_1_stdout_可以参考这篇文章
漏洞分析这道题在free时存在明显的UAF漏洞,另外这道菜单堆的show部分只输出固定的字符串No way
1234567891011int __fastcall free_(unsigned int a1){ int result; // eax if ( a1 <= 0xFF ) { free(qword_4060[a1]); result = puts("Done!\n"); // uaf...
前言在最近的ctf比赛中,出现了好几次无法通过输出泄露libc地址的题目,本文通过两道例题学习一下利用_IO_2_1_stdout_泄露信息.
FILE 介绍FILE 在 Linux 系统的标准IO库中是用于描述文件的结构,称为文件流。 FILE结构在程序执行 fopen等函数时会进行创建,并分配在堆中。我们常定义一个指向FILE结构的指针来接收这个返回值。
FILE 结构定义在 libio.h 中:
123456789101112131415161718192021222324252627282930313233343536373839404142struct _IO_FILE ...
前言这道题存在off-by-null漏洞,但是只能分配fastbin,可以通过触发malloc_consolidate()进行overlapping,然后通过劫持topchunk来getshell
malloc_consolidate()函数分析该函数主要有两个功能。
检查fastbin是否初始化,如果未初始化,则进行初始化。
如果fastbin初始化,则按照一定的顺序合并fastbin中的chunk放入unsorted bin中。
12345678910111213141516171819202122232425262728293031323334353637383940414...
漏洞分析
在dele函数中,第二次循环并没有循环到9,如果dele时输入9,会直接free掉ptr[9],此时dword_804AA60[i]=0.
1234567891011121314151617181920212223242526272829int dele(){ int result; // eax int v1; // [esp+8h] [ebp-10h] signed int i; // [esp+Ch] [ebp-Ch] result = sub_8048671(); v1 = result; if ( result >= 0 &&am...