Web

1.Websign

F12被js前台拦截,从浏览器设置里面打开开发者模式查看源码

也可以抓包查看

2.ez_rce

linux特性(好像是php特性?),执行两个反引号括起来的内容,两个单引号连接左右的部分以绕过过滤的关键词,%09代替空格

Eval()相当于直接执行一段php闭标签里的代码,这里闭合前面的,再在后面括起来需要反引号执行的部分

因为没有过滤/,所以直接看

Cat读取相关目录下的文件即可

3.ez_unser

考查反序列化,并且传入的代码必须包含test”:3

这里需要绕过__wakeuo()魔法函数,只需反序列化的对象个数大于实际的个数即可,但受到后面匹配条件的限制

这里可以又看到在析构函数提及了b,c值的传递,考虑使用引用传参的方式,就不需要再考虑__wakeup()函数的影响了

传参

同样反序列化后cat命令查查看flag所在目录即可

4.funmd5

打开题目,审计

使用了时间戳函数,返回linux元年以来的秒数,也就是说该值一秒一变,guessmd5的值则也会根据$time的变化而发生变化

这一段代码,如果get传入了名为md5的变量则执行if语句,$sub的值为时间戳的最后一位。
如果在$md5中匹配到0e则进行替换
第二条if语句则与上一条语句相斥:只有在md5数组中匹配到0e才能继续执行
因此这里肯定存在绕过
继续看
Flag的输出条件是当md5数组中的第一个元素的值等于它本身,并且数组中的第二个元素的值等于guesssmd5的值
现在思路比较清楚了:
1.绕过对于0e的置换
2.使md5数组中的第一个元素的值等于它本身
3.使数组中的第二个元素的值等于guesssmd5的值

这里1较为简单:
1的话,可以使用换行符%0a,使得0e绕过检测,preg_match没有设置多行匹配,因此只匹配了第一行
2的话,其实是一个常识,需要积累,因此ctf的学习还是要对学多写多积累

但还应该注意一点,由于sub变量的存在,外加substr函数的作用,这里md5数组的第一个值的长度会发生变化,考虑到前面绕过使用的换行符,我们选取sub变量值为1的时候进行截取,配合substr函数可以将换行符截掉

现在来到第3层,这里选择将代码扒下来本地测试(本地测试还是蛮好用的哈)
需要让md5数组的第二个元素的值与guessmd5一致并且这里是强等于,我们可以先取一个大于当前时间戳的值赋给md5数组的第二个对象,运行等到二者相等即可

至此,问题全部解决,写脚本

成功

MISC

1.王八快跑

下载下来附件,跑到头即可

2.搬好小板凳听故事

一长串base64,解码,最后有一段flag,但提交后并不正确

还需要16进制再转一次字符串

3.略略略来抓我呀(OSINT)

社工题,给了四张图片,没想到最后一张图片也能看到经纬度

那直接网站上查一下

高德地图看一下大致位置

结合图片上的信息

和达高科和某某口腔医院,这里在用百度地图的街景模式看一下

左上角这个楼,和照片里的一样

可以基本确定了

加上nssctf{}即可

4.where is flag

打开附件,一个流量包,放到wireshark里面导出http包,发现可疑压缩包

导出该压缩包,提取其中的文件,winhex打开查看16进制,发现为png文件但缺少前四个字节的文件头,因此手动补齐文件头并保存,发现是张二维码

使用工具扫描

应该存在某种加密,用bctester打开再扫描

将上面的16进制导出来保存为.txt

看来是零宽加密,但记事本里复制不全,用vscode打开复制,到解密网站(Unicode Steganography with Zero-Width Characters (330k.github.io))(需要梯子)解密即可

Crypto

1.爱丽丝梦境的兔子

题目描述很清晰,直接跟着做就可以了

Rabbit解密

社会主义核心价值观解密

每组字数为6的栅栏密码解密

2.disparity_rsa

这道题,n是可以利用在线网站分解出p和q的

p=57191

q=100824891894856702601201118009583648965164977561371042858637845367138181483380929730739526924561431398670347148954669147299066829552802628259180187574259704417901631558444093499584247442642574479809722666468258052387219612630695122930581802321960294913554359621973108878080665153439264529066699136581547328967

且此时c已知

根据rsa:

可求出e的模拟元d进而求出m

不过要注意密文后面多加了个s,s2n后应该是纯数字,所以应当把s删去

最后结果

3.Easy_base64

看代码,如果flag变量的前4位为”flag”则进行下面的操作,将byte类型的flag进行base64编码,并将一次编码后的密文数据类型转换为string型,接着对一次编码后的密文进行异或操作,规则是每一位与后一位异或

此时可以确定的是base64编码完的数据的前几位肯定是”flag”,因此可以通过字符串flag的base64编码(ZmxhZ3)去再次异或flag[i]^flag[i+1]
因为 flag[i]flag[i+1]=a[]—>flag[i]flag[i]flag[i+1]=a[]flag[i]—->flag[i+1]=a[]^flag[i+1]
所以通过此运算可得出flag[i]的后一位flag[i+1],做嵌套循环即可得出答案
这里给出脚本:

a=[55,21,16,50,105,71,14,27,41,30,34,16,50,111,74,62,5,18,54,52,106,85,31,54,24,111,83,11,38,1,53,17,37,17,35,47,32,52,40,2,9,59,47,54,25,111,77,16,48,26,33,9,55,108,0]
b='ZmxhZ3' #flag[i][0:6]
c=''
for j in range(len(a)):
    for i in range(len(b)):
        #print(a[i]^ord(b[i]),end=" ")
        c=chr((a[i]^ord(b[i])))
    b=b+str(c)[-1]
    print(b)

运算结果

再次base64解码

原文地址:http://www.cnblogs.com/perfectcqf/p/16844974.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性