0ctf 2019 zero_task
一个条件竞争的洞,以前没有接触过。比赛完研究了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的更多相关文章
- 2019年台积电进军AR芯片,将用于下一代iPhone
近日,有报道表示台积电10nm 芯片可怜的收益率可能会对 2017 年多款高端移动设备的推出产生较大的影响,其中自然包括下一代 iPhone 和 iPad 机型.不过,台积电正式驳斥了这一说法,表明1 ...
- 0ctf – mobile – boomshakalaka writeup
作为一个web狗,一道web都没做出来Orz...做出来一道apk,纪念一下在ctf中做出的第一道apk... 首先在模拟器或者真机中安装一下apk看到是一个cocos2dx的打飞机游戏 根据题目提示 ...
- 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 ...
- VS经常报错的link error 2019
VS经常报错的link error 2019 原因如下: 可能是找得到头文件,但是相关的dll或者lib找不到,需要在配置里面添加相应的库文件. project=>configuration.. ...
- YTU 2019: 鞍点计算
2019: 鞍点计算 时间限制: 1 Sec 内存限制: 64 MB 提交: 66 解决: 30 题目描述 找出具有m行n列二维数组Array的"鞍点",即该位置上的元素在该行 ...
- Windows Server 2019 预览版介绍
在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...
- Telerik控件集-2019.R1.SP1.All
Telerik 专注于微软.Net平台的表示层与内容管理控件,提供高度稳定性和丰富性能的组件产品DevCraft,并可应用在非常严格的环境中.Telerik拥有 Microsoft, HP, Alco ...
- CTF丨2019互联网安全城市巡回赛·西安站,我们来了!
万物互联时代,网信事业发展突飞猛进,互联网悄然渗透到国民生活的每一个角落,伴随而来的网络安全威胁和风险也日渐突出.网络诈骗.钓鱼软件.勒索病毒等安全问题层出不穷,信息泄露等网络安全事件也频繁上演,给用 ...
- AI2(App Inventor 2)离线版服务器(2019.04.28更新)
我们的目标:搭建一个本地多用户的App Inventor 2 服务器 演示: http://ai2.fsyz.net [旧 win] http://ai2n.fsyz.net [新 Ce ...
随机推荐
- 制作自己的Pod库(公有/私有)
https://www.jianshu.com/p/ece0b5721461 2018.04.12 16:43* 字数 1168 阅读 244评论 0喜欢 1 目的:1.管理自己常用的类:2.组件化开 ...
- 用redis实现分布式锁,秒杀案例(转)
分布式锁的简单实现代码: 需要的jar包: jedis-2.9.0.jar. commons-pool2-2.4.2.jar import java.util.List; import java.ut ...
- PHP判断点是否在多边形区域内外
小谢博客原文地址https://xgs888.top/post/view?id=79 PHP判断点是否在多边形区域内外:根据数学知识的射线法, 射线与几何多边形相交的点的个数为奇数则是在几何内部: 偶 ...
- postgresql数据库去重方法
数据库去重有很多方法,下面列出目前理解与使用的方法 第一种 通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,m ...
- 主成分分析_PCA解释
粘贴自:http://blog.codinglabs.org/articles/pca-tutorial.html 数据的向量表示及降维问题 向量的表示及基变换 协方差矩阵及优化目标 协方差矩阵对角化 ...
- Spring Bean初始化之后执行指定方法
转: Spring Bean初始化之后执行指定方法 2017年07月31日 15:59:33 vircens 阅读数:24807 Spring Bean初始化之后执行指定方法 在运用Spring进 ...
- django 4.get接口开发
根据上一篇文章,有post,那么就有get请求,其余部分不变,就是把post换成get就可以. #views.py from django.http.response import HttpRespo ...
- LA4255/UVa1423 Guess 拓扑排序 并查集
评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...
- vue开发常用配置
// src/main.js function setHtmlFontSize() { const baseSize = 100 // 由于浏览器字体最小为12px,故这个值要设置大一点,保证计算所得 ...
- JGUI源码:DataTable固定列样式(20)
本来感觉这个固定列很容易实现的,一般都是几个table组合实现,真正自己从头做的时候,发现有很多坑,本文只是固定列原理,真正实现datatable的话,代码量比较大的,后续再进行完善. 使用左中右三个 ...