ZCTF-2017 比赛总结
这次ZCTF办的还是相当不错的,至少对于Pwn来说是能够让人学习到一些东西。
第一天做的不是很顺利,一直卡在一道题上不动。第二天队友很给力,自己的思路也开阔起来了。
关于赛题的优点
我觉得这次的Pwn300-class是一道比较有意思的题,整数溢出并不难找。比赛过程中可以很快的发现这个漏洞,但是接下来的利用比较头疼,我一直到比赛结束都未能想到是通过setjmp这个函数进行利用的。
这是我第一次见到setjmp这个函数,通过writeup我了解了一下这个函数是以一个缓冲区来保存跳转的目的地址的,这一点有点像线程切换的上下文context。当时我直接把它当成goto也没有详加了解就略过了。
此外这道题还有一个点比较有意思,就是利用atoi函数的一个特性:
参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零,
当遇到非数字字符时会停止转换,这点也是我没有意识到的,利用这一点可以使用atoi的栈空间进行gadgets的布局。
此外通过sandbox这道题学习了一波linux的父-子进程调试机制。因为我是搞Windows底层出身的,对于Linux的各种机制不是很熟悉,这次学习了一下。
ptrace 的使用流程一般是这样的:父进程 fork() 出子进程,子进程中执行我们所想要 trace 的程序,在子进程调用 exec() 之前,子进程需要先调用一次ptrace,以 PTRACE_TRACEME 为参数。这个调用是为了告诉内核,当前进程已经正在被traced,当子进程执行 execve() 之后,子进程会进入暂停状态,把控制权转给它的父进程(SIG_CHLD信号), 而父进程在fork()之后,就调用 wait()等待子进程停下来,当 wait() 返回后,父进程就可以去查看子进程的寄存器或者对子进程做其它的事情了。
当系统调用发生时,内核会把当前的%eax中的内容(即系统调用的编号)保存到子进程的用户态代码段中(USER SEGMENT or USER CODE),我们可以像上面的例子那样通过调用Ptrace(传入PTRACE_PEEKUSER作为第一个参数)来读取这个%eax的值,当我们做完这些检查数据的事情之后,通过调用ptrace(PTRACE_CONT),可以让子进程重新恢复运行。
这道题基本上就是这样的流程
fork出的子进程首先调用PTRACE_TRACEME向父进程宣告,然后通过execl加上argv路径执行沙盒中的程序。
而父进程则是监视子进程的调用,一旦超出限制就会结束进程。
还有就是Pwn200-login,比赛第一天的时候我和队友一直在往爆破上面想,现在想来也是比较弱智的。。因为第一不能确定是否是fork的进程,第二是有alarm怎么可能爆破的出来。后来晚上晨升牛说可以往字符串漏洞上搞。自己试了一下发现的确可以,搞出了任意地址写,但是没能找出可以leak的地方,然后晨升牛已经拿到flag了。。ORZ解题真是太快了。通过这道题学到的就是格式化函数可以通过分段格式化进行利用,这个以前也是没有遇到过的。
最后就是题量还是比较足的,考察点很多。
一些不足
因为很快自己也要给XCTF出题,所以这里记录一下。
第一是类型还是比较单一的,基本上都是NX+CANARY的情形,到自己出题时一定要注意一下出一些其它保护的绕过考察,比如地址无关。
第二是感觉题目还是为了出题而出题,这一点老外的比赛做的比较好,希望轮到自己时可以改进。
其它
这次比赛下来感觉自己的水平还是与dalao们有一些差距,一些思路难以第一时间反应过来,幸好搞Pwn的队友们相当给力,尤其是晨升牛各种秒题ORZ...,成绩还是相当不错,Nu1L这次第三,与第一名只有一两道题的差距。这次比赛自己的产出不是很多,比较惭愧,希望下次能够为队伍做更大的贡献,也希望Nu1L下次可以拿到第一。
ZCTF-2017 比赛总结的更多相关文章
- 近几年杭电OJ大型比赛题目合集【更新到2017年11月初】
2017年: 区域赛网络赛 6194~6205 6206~6216 区域赛网络赛 6217~6229 2016年: 区域赛网络赛 5868~5877 5878~5891 5 ...
- 【四校联考】【比赛题解】FJ NOIP 四校联考 2017 Round 7
此次比赛为厦门一中出题.都是聚劳,不敢恭维. 莫名爆了个0,究其原因,竟然是快读炸了……很狗,很难受. 话不多说,来看看题: [T1] 题意: 样例: PS:1<=h[i]<=100000 ...
- 【Codeforces】Helvetic Coding Contest 2017 online mirror比赛记
第一次打ACM赛制的团队赛,感觉还行: 好吧主要是切水题: 开场先挑着做五道EASY,他们分给我D题,woc什么玩意,还泊松分布,我连题都读不懂好吗! 果断弃掉了,换了M和J,然后切掉了,看N题: l ...
- 【2017.12.02】C组比赛总结
这次考得不怎么样,只有200分! T1:读书 这题水水水! 这题就是一道循环题嘛! 直接一边循环一边做就好了! T2:恐怖分子 这题我是直接暴力的. 这题就是求至少用多少条经过(x0,y0)的不同直线 ...
- 2017.10.28 C组比赛总结
这次比赛有点坑... [GDKOI2004]石子游戏 方法:判断奇偶性 输入n 如果n是奇数,输出 xiaoshi 如果n是偶数,输出 xiaoyong 比赛得分:30 错因:找错规律了(忘记了两个人 ...
- 2017.10.21 C组比赛总结
今天考得不太好,只拿了100+0+0+30=130分... [GDKOI训练]音乐节拍 考场AC了! 其实就是大水一道! 思路:二分查找 每次输入后,输出该时刻所在的区间的编号就好了. 总体难度:★★ ...
- 2017.9.23 C组比赛总结
今天又回到了C组,感觉爽歪歪~分数终于是个三位数了,yes! 第一题,赛车.水!只用一个贪心就可以AC了. first,以速度为关键字小到大qsort一下... scond,枚举每一个赛车,看看它可以 ...
- “百度杯”CTF比赛 2017 二月场_onthink
题目在i春秋ctf训练营中能找到,这题直接拿大佬的wp来充数 百度找到onethinnk的一个漏洞. 参考:http://www.hackdig.com/06/hack-36510.htm 就是注册个 ...
- 百度杯”CTF比赛 2017 二月场 没错!就是文件包含漏洞。
题目源码: 文件包含漏洞的话,看一下 你么可以使用php://input 伪协议,执行代码(参考了大佬WP)这里使用了POSTMAN, 目录下还有一个dle345aae.php文件,呢么用cat命令打 ...
- “百度杯”CTF比赛 2017 二月场 爆破-3
进入题目,题目源码: <?php error_reporting(0);session_start();require('./flag.php');if(!isset($_SESSION['nu ...
随机推荐
- java学习三 小数默认为double
前++,后++在独立运算时候 直接计算出值 当后加加和减减和其他代码在一行的时候先使用加加和减减之前的值, 如果不在同一行,后面的一行就会得到加加或减减后的值 &&是逻辑运算符,逻辑运 ...
- 浅谈Java中的深克隆和浅克隆(阿里面试)
在最近的秋招中,阿里和多益网络都问到了这个问题,虽然很简单,但是我还是想总结一下,感兴趣的可以看一下我的个人博客网站(Spring+MyBatis+redis+nginx+mysql)(适合菜鸟),最 ...
- 洛谷P3275 [SCOI2011]糖果(差分约束,最长路,Tarjan,拓扑排序)
洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证 ...
- MySQL删除数据库时的错误(errno: 39)
由于mysql数据库是默认区分大小写的,部署的时候发现多了一些重复的表,于是就把多余的表删掉了.可是,剩下的重复的表再删除时会提示:表不存在. 于是,想把数据库删掉重新创建,可是,得到了 ERROR ...
- 转载:C++中两个类中互相包含对方对象的指针问题
原文链接:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html 前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某 ...
- svn:重命名文件之后,不允许提交
1.错误代码 org.apache.subversion.javahl.ClientException: Illegal target for the requested operation svn: ...
- 「Vue」JS方法学习
1.构造函数 大写开头的,能被NEW一个新实例,实例即执行回调函数 异步返回数据.then指定回调函数的时候,成功的回调函数必须传,失败的回调可以不传 var fs = require('fs') f ...
- IE条件注释判断
相信大家都知道IE有专门的注释条件判断来引入一些css.js.html代码,但是语法有点拗口,记不住,下面我来做一下笔记: 正常的html注释: <!--注释注释注释注释...--> 注释 ...
- Java基础-二进制以及字符编码简介
Java基础-二进制以及字符编码简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必计算机毕业的小伙伴或是从事IT的技术人员都知道数据存储都是以二进制的数字存储到硬盘的.从事开 ...
- Python常用模块-随机数模块(random)
Python常用模块-随机数模块(random) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用方法举例 #!/usr/bin/env python #_*_coding: ...