crypto
buu-还原大师
仔细阅读题目,这里有一段字符串,但是其中有四个大写字母被替换成了‘?’,那么我们写脚本:首先将四个问号均换成26个大写字母并且组成不同的组合, 所以有四个循环让四个问号都遍历26个大写字母。然后将其进行md5加密,由于仅进行md5加密后的结果与我们的md5密文(十六进制)形式不符,所以要用一个hexdigest()转换,然后与题目所给的已知的密文前四位比对(由于md5加密的特性--细小的变化导致md5的值截然不同,所以仅前四位(已知的)比较就可以验证了),然后print出这个hex。
import hashlib
for i in range(65,91):
for a in range(65,91):
for s in range(65,91):
str='TASC'+chr(i)+'O3RJMV'+chr(a)+'WDJKX'+chr(s)+'ZM'
md5_str=hashlib.md5(str.encode())
if md5_str.hexdigest()[0:4]=='e903':
print(md5_str.hexdigest().upper())
这就是结果,也是flag
西电ctf终端-古密-Augustine's Way
下载附件后用记事本打开,看到题目移位密码下面的是密文,想到移位第一个是凯撒
移位密码的工作原理:
- 选择一个移位数:加密前需要确定一个移位数 ( k ),( k ) 是一个介于 0 和 25 之间的整数(对于英文字母表而言)。
- 加密过程:
对于明文中的每一个字母,根据移位数 ( k ) 将其在字母表中向后移动 ( k ) 个位置。
如果字母移到字母表的末尾之后,则从字母表的开头重新开始计数。3. 解密过程:
对于密文中的每一个字母,根据相同的移位数 ( k ) 将其在字母表中向前移动 ( k ) 个位置。
用bugku的在线工具枚举
西电ctf-古密Augustine's Way#2
与上一题相关联,仍然是凯撒,但是这里我们难以直接使用在线工具,我们需要自己移位。根据前一题的格式moectf,将前五位更改,发现是将flag前移了8位得到了密文,所以我们需要将密文的每个字符后移8位得到flag
misc
buu-webshell后门
用火绒自定义扫描,只扫描刚才下载的附件解压后的文件夹,扫出来了两个异常,一个为php文件,一个是png文件,我们首先用VScode打开php文件
,直接看到了pass=‘ba8e6c6f35a53933b871480bb9a9545c’所以包上flag{}就提交
re
nssctf-[SWPUCTF 2022 新生赛]babyre
如题,用ida打开后按一下f5就可以看到flag
nssctf- [LitCTF 2023]enbase64
查壳,无壳,32位用ida32位打开,找到main函数,然后依据题目,看到base64和flag
双击flag后可以看到一个像base64编码的
直接去cyberchef解码,但是解不出来, 然后我们再返回main函数,查看刚刚的base64
进去后看到了一个basechange函数
baseChange() 函数在编程中通常用于修改或转换数据。以下是一些具体的例子和解释:
字符串异或操作:在某些编程挑战中,
baseChange()
函数可能用于对输入的字符串进行异或操作。例如,在LitCTF Reverse挑战中,输入的字符串与一个固定值(如3)进行异或操作。具体步骤如下:
- 将输入字符串转换为ASCII码。
- 对每个字符的ASCII码与3进行异或操作。
- 将异或后的结果转换回字符并拼接成新的字符串。
base64编码转换:在某些情况下,
baseChange()
函数可能用于处理base64编码。例如,在LitCTF的另一个挑战中,程序需要进行base64编码的转换。具体步骤如下:
- 下载并放置对应的DLL文件。
- 动态调试程序,找到转换后的编码表。
- 使用找到的编码表进行base64解码。
这些例子展示了
baseChange()
函数在不同场景下的应用,包括字符串处理和编码转换。通过理解这些应用场景,可以更好地掌握baseChange()
函数的使用方法和技巧。
那么这里是将base64加密的自定义表给转换了,所以我们要将原表找出,直接跑这个脚本
#include<stdio.h>
#include<string.h>
int main()
{
int v3[65] = {};
char Source[] = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;
char Destination[65] = {};
char *result;
v3[0] = 16;
v3[1] = 34;
v3[2] = 56;
v3[3] = 7;
v3[4] = 46;
v3[5] = 2;
v3[6] = 10;
v3[7] = 44;
v3[8] = 20;
v3[9] = 41;
v3[10] = 59;
v3[11] = 31;
v3[12] = 51;
v3[13] = 60;
v3[14] = 61;
v3[15] = 26;
v3[16] = 5;
v3[17] = 40;
v3[18] = 21;
v3[19] = 38;
v3[20] = 4;
v3[21] = 54;
v3[22] = 52;
v3[23] = 47;
v3[24] = 3;
v3[25] = 11;
v3[26] = 58;
v3[27] = 48;
v3[28] = 32;
v3[29] = 15;
v3[30] = 49;
v3[31] = 14;
v3[32] = 37;
v3[34] = 55;
v3[35] = 53;
v3[36] = 24;
v3[37] = 35;
v3[38] = 18;
v3[39] = 25;
v3[40] = 33;
v3[41] = 43;
v3[42] = 50;
v3[43] = 39;
v3[44] = 12;
v3[45] = 19;
v3[46] = 13;
v3[47] = 42;
v3[48] = 9;
v3[49] = 17;
v3[50] = 28;
v3[51] = 30;
v3[52] = 23;
v3[53] = 36;
v3[54] = 1;
v3[55] = 22;
v3[56] = 57;
v3[57] = 63;
v3[58] = 8;
v3[59] = 27;
v3[60] = 6;
v3[61] = 62;
v3[62] = 45;
v3[63] = 29;
result = strcpy(Destination, Source);
for (int i = 0; i <= 47; ++i)
{
for (int j = 0; j <= 63; ++j)
Source[j] = Destination[v3[j]];
result = strcpy(Destination, Source);
}
printf(“%s”, result);
}
跑出后得到了表gJ1BRjQie/FIWhEslq7GxbnL26M4+HXUtcpmVTKaydOP38of5v90ZSwrkYzCAuND
解密得flag将LitCTF改为NSSCTF
web
bugku-shell
开启环境后得到的是一个一无所有的页面,仔细读题简单看就是一个通过s进行get传参的题,所以我们首先查看一下目录,用system函数
system("ls"); // 执行ls命令,显示当前目录的文件和子目录
system("pwd"); // 执行pwd命令,显示当前工作目录的绝对路径
system("date"); // 执行date命令,显示当前的日期和时间system("mkdir new_dir"); // 执行mkdir命令,创建一个名为new_dir的目录
system("rm -rf old_dir"); // 执行rm命令,删除一个名为old_dir的目录及其内容
system("cp file1.txt file2.txt"); // 执行cp命令,将file1.txt复制为file2.txt
输入?/s=system(ls)得到如下结果 然后我们直接访问该环境的txt文件,得到了flag