一个条件竞争的洞,以前没有接触过。比赛完研究了wp复现下。

new_thread结构体如下

new_thread:
thread_area size0x8
thread_area+0x8 size 0x8
thread_area+0x10 choice
thread_area+0x14 key 0x20
thread_area+0x34 IV 0x10
...
thread_area+0x60 task_id
thread_area+0x68 thread_binlist
thread_area+0x88 EVP_CIPHER_CTX_new

delete中并没有uaf的问题

void delete(void)

{
void **__ptr;
int task_id;
void **local_18;
void **local_10; __ptr = DAT_00302028;
local_18 = DAT_00302028;
local_10 = DAT_00302028;
printf("Task id : ");
task_id = my_read8();
if ((DAT_00302028 == (void **)0x0) || (task_id != *(int *)(DAT_00302028 + 0xc))) {
while (local_18 != (void **)0x0) {
if (task_id == *(int *)(local_18 + 0xc)) {
local_10[0xd] = local_18[0xd];
EVP_CIPHER_CTX_free((EVP_CIPHER_CTX *)local_18[0xb]);
free(*local_18);
free(local_18);
return;
}
local_10 = local_18;
local_18 = (void **)local_18[0xd];
}
}
else {
DAT_00302028 = (void **)DAT_00302028[0xd];
EVP_CIPHER_CTX_free((EVP_CIPHER_CTX *)__ptr[0xb]);
free(*__ptr);
/* 这里不存在uaf
00302028会存储线程链的值,在释放前会判断这个值是否为空
*/
free(__ptr);
}
return;
}

存在的问题是创建新线程执行start_routine时的条件竞争(这里产生条件竞争的原因是子线程会共享主线程的bss段,在创建子线程时sleep(2)后再更新bss段的数据)

void start_routine(uchar **ppuParm1)

{
int iVar1;
long in_FS_OFFSET;
int local_34;
uchar **local_30;
ulong local_28;
undefined8 local_20;
undefined8 local_18;
undefined8 local_10; local_10 = *(undefined8 *)(in_FS_OFFSET + 0x28);
local_34 = ;
local_20 = ;
local_18 = ;
local_28 = ;
local_30 = ppuParm1;
puts("Prepare...");
sleep();
memset(DAT_00302030,,0x1010);
iVar1 = EVP_CipherUpdate((EVP_CIPHER_CTX *)local_30[0xb],DAT_00302030,&local_34,*local_30,
(int)local_30[]);
if (iVar1 == ) {
/* WARNING: Subroutine does not return */
pthread_exit((void *)0x0);
}
local_28 = local_28 + (long)local_34;
iVar1 = EVP_CipherFinal_ex((EVP_CIPHER_CTX *)local_30[0xb],DAT_00302030 + local_28,&local_34);
if (iVar1 == ) {
/* WARNING: Subroutine does not return */
pthread_exit((void *)0x0);
}
local_28 = local_28 + (long)local_34;
puts("Ciphertext: ");
my_printf(stdout,(long)DAT_00302030,local_28,0x10,);
/* WARNING: Subroutine does not return */
pthread_exit((void *)0x0);
}

神仙东西,思路大致看懂了tql,orz

总结一下学到的改变执行流的思路吧:条件竞争并不能写任意内存,程序也没有任意地址写的漏洞,这时可以尝试找一个相对地址的调用,如果这个相对地址可控,我们就可以改变执行流了

0ctf 2019 zero_task的更多相关文章

  1. 2019年台积电进军AR芯片,将用于下一代iPhone

    近日,有报道表示台积电10nm 芯片可怜的收益率可能会对 2017 年多款高端移动设备的推出产生较大的影响,其中自然包括下一代 iPhone 和 iPad 机型.不过,台积电正式驳斥了这一说法,表明1 ...

  2. 0ctf – mobile – boomshakalaka writeup

    作为一个web狗,一道web都没做出来Orz...做出来一道apk,纪念一下在ctf中做出的第一道apk... 首先在模拟器或者真机中安装一下apk看到是一个cocos2dx的打飞机游戏 根据题目提示 ...

  3. Observe the 0CTF & 0CON

    I went to observe 0CTF and 0CON on 4.22 ~ 4.24 and just come back. Not only do I learn a lot from th ...

  4. VS经常报错的link error 2019

    VS经常报错的link error 2019 原因如下: 可能是找得到头文件,但是相关的dll或者lib找不到,需要在配置里面添加相应的库文件. project=>configuration.. ...

  5. YTU 2019: 鞍点计算

    2019: 鞍点计算 时间限制: 1 Sec  内存限制: 64 MB 提交: 66  解决: 30 题目描述 找出具有m行n列二维数组Array的"鞍点",即该位置上的元素在该行 ...

  6. Windows Server 2019 预览版介绍

    在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...

  7. Telerik控件集-2019.R1.SP1.All

    Telerik 专注于微软.Net平台的表示层与内容管理控件,提供高度稳定性和丰富性能的组件产品DevCraft,并可应用在非常严格的环境中.Telerik拥有 Microsoft, HP, Alco ...

  8. CTF丨2019互联网安全城市巡回赛·西安站,我们来了!

    万物互联时代,网信事业发展突飞猛进,互联网悄然渗透到国民生活的每一个角落,伴随而来的网络安全威胁和风险也日渐突出.网络诈骗.钓鱼软件.勒索病毒等安全问题层出不穷,信息泄露等网络安全事件也频繁上演,给用 ...

  9. AI2(App Inventor 2)离线版服务器(2019.04.28更新)

    我们的目标:搭建一个本地多用户的App Inventor 2 服务器   演示: http://ai2.fsyz.net  [旧 win]     http://ai2n.fsyz.net [新 Ce ...

随机推荐

  1. 制作自己的Pod库(公有/私有)

    https://www.jianshu.com/p/ece0b5721461 2018.04.12 16:43* 字数 1168 阅读 244评论 0喜欢 1 目的:1.管理自己常用的类:2.组件化开 ...

  2. 用redis实现分布式锁,秒杀案例(转)

    分布式锁的简单实现代码: 需要的jar包: jedis-2.9.0.jar. commons-pool2-2.4.2.jar import java.util.List; import java.ut ...

  3. PHP判断点是否在多边形区域内外

    小谢博客原文地址https://xgs888.top/post/view?id=79 PHP判断点是否在多边形区域内外:根据数学知识的射线法, 射线与几何多边形相交的点的个数为奇数则是在几何内部: 偶 ...

  4. postgresql数据库去重方法

    数据库去重有很多方法,下面列出目前理解与使用的方法 第一种 通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,m ...

  5. 主成分分析_PCA解释

    粘贴自:http://blog.codinglabs.org/articles/pca-tutorial.html 数据的向量表示及降维问题 向量的表示及基变换 协方差矩阵及优化目标 协方差矩阵对角化 ...

  6. Spring Bean初始化之后执行指定方法

    转: Spring Bean初始化之后执行指定方法 2017年07月31日 15:59:33 vircens 阅读数:24807   Spring Bean初始化之后执行指定方法 在运用Spring进 ...

  7. django 4.get接口开发

    根据上一篇文章,有post,那么就有get请求,其余部分不变,就是把post换成get就可以. #views.py from django.http.response import HttpRespo ...

  8. LA4255/UVa1423 Guess 拓扑排序 并查集

    评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...

  9. vue开发常用配置

    // src/main.js function setHtmlFontSize() { const baseSize = 100 // 由于浏览器字体最小为12px,故这个值要设置大一点,保证计算所得 ...

  10. JGUI源码:DataTable固定列样式(20)

    本来感觉这个固定列很容易实现的,一般都是几个table组合实现,真正自己从头做的时候,发现有很多坑,本文只是固定列原理,真正实现datatable的话,代码量比较大的,后续再进行完善. 使用左中右三个 ...