一个条件竞争的洞,以前没有接触过。比赛完研究了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. keras03 Aotuencoder 非监督学习 第一个自编码程序

    # keras# Autoencoder 自编码非监督学习# keras的函数Model结构 (非序列化Sequential)# 训练模型# mnist数据集# 聚类 https://www.bili ...

  2. MongoDB系列:四、spring整合mongodb,带用户验证

    在前面的两篇博客 MongoDB常用操作练习.springboot整合mongoDB的简单demo中,我们基本上熟悉了mongodb,也把它与spring boot进行了整合并且简单使用.在本篇博客中 ...

  3. SSM框架开发遇到的问题

    request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+re ...

  4. Python中的eval(),exec()以及其相关函数

    1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式 ...

  5. 升级 pip 超时解决方案

    安装的时候发现报错如下, 提示需要升级pip 按照指引进行升级, 同样的超时 使用 豆瓣源进行安装 pip python -m pip install --upgrade pip -ihttp://p ...

  6. MT【323】向量模的范围

    已知单位向量 $\overrightarrow e_1,\overrightarrow e_2$ 的夹角为 $120^\circ$,$\left|x\overrightarrow e_1+y\over ...

  7. 【简】题解 AWSL090429 【市场】

    因为这有个时间的限制 并且  求的时间都是前缀和 那么 我们可以根据时间将排序 因为题中没有修改可以直接用背包预处理出答案 但是因为题目ci mi<=1e9   vi<=300 所以发现不 ...

  8. LeetCode--11_974_Subarray_Sums_Divisible_by_K

    题目链接:点击这里 public static int subarraysDivByK(int[] A, int K) { int ans = 0,sum = 0; int[] B = new int ...

  9. vue-cli 项目踩坑 npm install 时出错

    1.报错如下: 2.此时你执行npm run dev  / npm run build 会报错如下 npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! v ...

  10. Python基础和原反补码及表达式

    基础语法 1.注释 “#”标注的文件 2.数字 整数,不区分long和int 进制0xa.0o10.0b10 bool,2个值True.False 浮点数 1.2.3.1314.-0.12.1.46e ...