misc部分基本都空着,如果也想要wp,请问https://maonie.top/
basectf官网:basectf.fun
这是week1的wp
Misc
[Week1] 你也喜欢圣物吗
[Week1] 根本进不去啊!
[Week1] 海上遇到了鲨鱼
[Week1] 正着看还是反着看呢?
[Week1] Base
[Week1] 人生苦短,我用Python
总之就是一个条件一个条件的掰flag
最后better个be部分没提示了,但是有hash爆破
BaseCTF{s1Mpl3_1s_??Tt3r_Th4n_C0mPl3x}
我不记得是猜Be还是用下面的exp爆的,这题做的我昏过去了
1 | import hashlib |
[Week1] 捂住X只耳
[Week1] 倒计时?海报!(包括公开版和公开前)
[Week1] 签到!DK 盾!
Crypto
[Week1] ez_rsa
题目给了n e c 还有not_phi=(p+2)(q+2)=p*
q+2p+2q+4
要算出私钥d就要算出n的欧拉函数
n的欧拉函数是(p-1)(q-1)=p*
q-p-q+1
n = p*
q
所以这是初中生就能解决的因式问题
n的欧拉函数 = (not_phi-n-4)//2
得到欧拉函数就可以用模逆元算d
有c d n就有明文
exp如下
1 | import libnum |
[Week1] babypack
加密脚本的过程大概是
- 把flag转换为2进制
- 创建一个随机数列表a,可以观察到每个随机数必然是后一个的两倍多一点
- 然后看flag的2进制中的每一位是不是1,如果是则将随机数列表里对应数加到变量c上
我们有的是a和c
那么就可以让a[i]和c比大小,判断第i+1位是不是1
总之exp如下
1 | # a = ··· |
[Week1] babyrsa
rsa算法,但是没有p和q,直接取n
我猜n大概率是素数,所以直接算它的欧拉函数
exp如下
1 |
|
[Week1] 十七倍
明文m转秘文c的算式为
m*17%256=c
那么 m=c*17关于256的模逆元%256
可以很容易的知道是241
exp如下
1 | cipher = [ |
[Week1] helloCrypto
很简单的一道
aes是对称加密,即然key给了就能直接解
exp如下
1 | from Crypto.Util.number import * |
[Week1] 你会算md5吗
题目的加密过程,是将flag里的每一个字符都单独拎出来算一遍md5
那么只要把ascii表上的字符都算一遍做成字典,然后和密文撞就行了
exp如下
1 | import hashlib |
Web
[Week1] HTTP 是什么呀
满足题目所有要求
就能在网络包里发现flag
[Week1] 喵喵喵´•ﻌ•`
easy
[Week1] md5绕过欸
md5函数不能接受数组
会返回false
弱比较和强比较都能绕
[Week1] A Dark Room
我也玩过
flag在注释里
[Week1] upload
直接传马上去就行了
[Week1] Aura 酱的礼物
pen检查用伪协议data%3A%2F%2Ftext%2Fplain%3Bbase64%2CQXVyYQ%3D%3D过
challenge难点
- 需要以http://jasmineaura.github.io开头
- 需要让访问到的内容包含已经收到Kengwang的礼物啦
而这个网页指向的博客,在题目开始的时候,有一篇文章却是包含了已经收到Kengwang的礼物啦
但后来被删了,我没来得及蹭到
所以通过url的奇妙结构
http://jasmineaura.github.io@truthleader.github.io
@后面的才会被当作域名解析
然后用gift直接包含得不到flag,所以用任意文件读取的伪协议
base64解密
Pwn
[Week1] 签个到吧
nc challenge.basectf.fun 32200
cat /flag直接有
[Week1] echo
用echo打印flag
[Week1] Ret2text
可以看到shell的地址
而字符串大小为32
也就是32+8位数据填充实现栈溢出,然后用shell地址覆盖ret地址
exp如下
1 | from pwn import * |
[Week1] shellcode_level0
用pwntools喵喵工具生成shellcode,直接出
exp如下
1 | from pwn import * |
[Week1] 我把她丢了
栈溢出的残缺后门+nx保护
不太懂,上网照喵画虎弄出来的
Reverse
[Week1] You are good at IDA
ida拖进去看的三个函数,有flag的三部分,拼起来就好了
[Week1] UPX mini
用upx妙妙工具解壳,
然后就看到了base秘文
用cyberchef妙妙工具得flag
[Week1] ez_maze
迷宫题
找到了地图和长宽数据
1 | x$$$$$$$$$$$$$$ |
&是路,$是墙,用最短路线走到y
然后转md5就是flag了
[Week1] Ez Xor
用ida看到如下内容
这段程序通过keystream函数生成了长度为28的key
然后通过encrypt函数对用户的输入进行xor运算
然后通过checkflag函数将加密后的用户输入和str比较
由于
- key是固定生成的
- xor的逆运算是再xor一遍
所以能够用c将keystream 和 encrypt实现
将str作为输入
就能得到flag了
str如下
exp如下
1 | #include <stdio.h> |
[Week1] BasePlus
伪代码如下
其加密逻辑大致是
- 将用户的输入以3个字符为单位分组,不足的用0作为填充
- 加载每个分组,通过二进制运算得到下标,通过secret字典产生4个密文
- 最终的密文长度,就是分组数*4
程序提供了加密后的flag
我们可以通过flag的每4个字符,和secret字典比对得到每4个下标
这4个下标来自于明文的每3个字符
1 | // 一个字符有8bit |
总之,我们只要把所有的bit拼回去,就能得到flag
exp如下
1 | flag = "lvfzBiZiOw7<lhF8dDOfEbmI]i@bdcZfEc^z>aD!" |