unctf2021部分wp

unctf2021部分wp

1,rejunk

下载程序并运行,随机输入几个数提示length error,拖进idapro找到main函数后f5查看伪代码,根据题目提示垃圾代码混淆与逆向异或运算可观察得到关键的两行

我们可以看到几个字符串,这就是关键语句,分析容易得知将v9(从0开始循环的数与flag字符串中每个字符加上2的值异或运算得到了变换后的字符串),根据异或运算的性质开始写脚本

运行得到flag如下所示

(感谢坤哥对解此题的大力帮助)

 

2, ezlogin

下载后打开是这样的

 

程序提示是程序流程识别,算法逆向,还是ida主函数看伪代码

看了看流程也不是特别懂,但好像login那里有东西,于是我login了一波,观察代码貌似输入一个数就行了?(我也不知道为啥就爆出来了flag)如图

 

 

3, easy_rsa

下载后得到一个名字为easyrsa的文件,加上后缀txt将它以文本打开可知它是已知qpce求密文的rsa问题

直接写脚本即可

可以跑出来

165720758591616896381926092066231533379319438670959799283552583224184682787196461195645这一串串数字,然后用libnum将数字转成字符串可得flag

Flag:UNCTF{Th1s_1s_f1ag_f0r_unctf_2021!!}

 

4, 分析badusb流量

下载得到一堆数字,四个一组,观察发现前两列只有00和20

题目提示为键盘映射,不难知道实质就是usb流量分析中键盘流量分析的一种,查阅资料得知如下对应方式

根据flag的形式以及花括号的特殊性,我们不难判断20开头的是shift之后的,00就是普通输入的,找到对应关系flag就容易获得了,最后得到UNCTF{Y0u-Are-very-n1ce}

 

5, fuzz_md5

进题目阅读代码

我分别查询了php中preg_replace和substr函数的作用如下

其中preg replace函数在本题中的作用是过滤掉unctf这个字符串,而substr的意思则是截取pass3的前五位。逐行分析代码逻辑如下:

首先get传参user,post传参pass,pass2是pass的md5值,pass3是pass2的前五位,之后将user中unctf这个字符串过滤掉得a。如果同时满足a为unctf且pass3是66666的话就可以爆出flag。这就是程序的基本逻辑

那么,对于user,它过滤掉了一遍unctf,我们直接用嵌套双写绕过,令初始的user为uncunctftf即可。那么对于pass,我们已知他经过md5加密后的前五位是66666,写脚本爆破即可(理论上来说md5不存在逆向解,但可根据一定关系映射进行爆破)

 

运行后得到的值随便一个就可以作为pass

最后我们进行传参即可,post传pass,get传user,传递完毕可直接得到结果

 

6, 探秘中世纪城堡

下载附件看到

根据提示,推测先凯撒,再base64,最后栅栏密码。于是开始尝试,发现凯撒偏移为5时刚好可以base64解密

在根据题目双重阻拦推测双重栅栏,设置栅栏密码偏移为2得到

这就是flag

posted @ 2021-12-07 10:02  wysng  阅读(388)  评论(0编辑  收藏  举报