2.10寒假作业
web:[MoeCTF 2022]baby_file
打开环境,看到include,标准的文件包含,使用为协议
先找一下flag包含在哪个文件里面,我觉得可以用dirsearch直接扫描,但是我想用为协议看看,尝试用data://去看一下列表,结果data被禁用了
尝试了其他的为协议大都被禁用了,还是扫描吧,得到flag文件
直接filter为协议,不会成功,有禁用,这里也明白了昨天为什么要加base64加密的问题了,加这个加密本身就是一个过滤的过程,可以绕过一些禁用
加上base64得到这个
解码得到答案
pwn:[GDOUCTF 2023]EASY PWN
查壳,ida
看主要的函数
声明buf接受10字节,从/dev/urandom读取一个随机数据作为密码,fd是一个文件描述符文件描述符,简单来说文件描述符就是对脚本起一个简化作用,使得脚本的写作更加简便。
读取/dev/urandom中10个字节给buf,这里也没有溢出
之后就叫我们输入密码,输入的密码 赋值给s1,之后比对s1和buf相等就输出flag。
首先,欸有溢出,所以无法进行栈覆盖去getshell,然后它生成的密码是随机的,每次打开程序都有不一样的密码,也没给我们规则,所以我们去获得密码然后执行程序得到答案基本上是不可能的。绕过是在web中我们可能还会考虑修改输出flag的判断条件,让他直接输出flag就像昨天那题一样,从脚本我们可以知道如果v5的值是1的话就会输出flag,但是这个是程序要怎么改,直接写脚本覆盖吗?看一下别人的做法
其实也是大差不离,要么就是修改v5的值,要么就是直接修改函数返回值直接执行printflag,这边用第一种,直接覆盖v5的值令v5的值不等于0即可,但是这个脚本也是千奇百怪的
misc:攻防世界gif
解压文件是一堆图片都是黑白色的
另一个图片打不开,用记事本看一下,和本题没关系
一做到这种规整的两种不同元素组成的密文,通常就会想到是摩斯密码或者是二进制,
首先是摩斯密码
正反尝试一下都不是答案
那就是二进制
得到答案
crypto:polar靶场base?
打开文件,一看就知到时base100加密
解密得到zifc
这种形态的字符串加密还是挺陌生的,找了很久还是找不到,看一下别人的解法,加密的方式是ROT47
ROT47 是一种简单的替换加密方式,它对 ASCII 码值为 33 - 126 的 94 个可打印字符进行循环移位操作,将每个字符的 ASCII 码值向后移动 47 位,如果超过了 126,则再从 33 开始循环
其实可以把ROT47看成变异的凯撒,按照描述来说,它加密之后不同的字符对应的可能是同一个字符,同理解密其实也是,像本题的密文,一般的flag前缀是flag,本题的密文前四个是7=28解密出来是flag,当然也肯定有其他的四个字符加密出来时flag,这种排列可以说有无数个,所以说这种加密还是很难去判断的。
reserve:攻防世界getit
查壳,ida
看主函数
“&” 是一个逻辑运算符,表示按位与运算。例如在 C 语言中,“a & b” 表示将变量 a 和变量 b 进行按位与运算,结果为对应二进制位上都是 1 的位为 1,其他位为 0 的值。
历遍s,用i&1判断i的奇偶,因为如果i是技术的话,i二进制表达式的最低位,也就是最后一位就是1,那么与1进行按位与运算的结果就是1,之后再套上是否等于0就可以用来判断i的奇偶,同理偶数是0,这个循环的作用就是如果i是奇数的话v3就等于1,偶数则等于-1
令明文t的i+10位等于s的i位+v3
后面则是对密文进行确定相应储存位置操作而已,以上就是加密过程
看一下处理之后的密文s和明文t明文t就等于s的i位加上v3
直接写脚本得到答案