第二届网刃杯网络安全大赛wp
第二届网刃杯的wp:
1.REVERSE:
1.freestyle:
拖进ida
main函数里提示了flag是md5的格式,func1和func2里有两个方程;func1的方程解得3327,func2得方程有多个解,49,105......等;试一下332749和3327105的md5加密,最后3327105的md5值为flag
flag{31a364d51abd0c8304106c16779d83b1}
.png)
.png)
.png)
.png)
int __cdecl main(int argc, const char **argv, const char **envp)
{
fun1();
fun2();
puts("\nyes!!!");
puts("flag is in md5 format");
return 0;
}
__int64 fun1()
{
char s[24]; // [rsp+0h] [rbp-20h] BYREF
unsigned __int64 v2; // [rsp+18h] [rbp-8h]
v2 = __readfsqword(0x28u);
puts("Welcome to Alaska!!!");
puts("please input key: ");
fgets(s, 20, stdin);
if ( 4 * (3 * atoi(s) / 9 - 9) != 4400 )
exit(0);
puts("ok,level_1 over!\n\n");
return 1LL;
}
__int64 fun2()
{
char s[24]; // [rsp+0h] [rbp-20h] BYREF
unsigned __int64 v2; // [rsp+18h] [rbp-8h]
v2 = __readfsqword(0x28u);
puts("Welcome to Paradise Lost!!!");
puts("The code value is the smallest divisible");
puts("please input key: ");
fgets(s, 20, stdin);
if ( 2 * (atoi(s) % 56) != 98 )
exit(0);
puts("ok,level_2 over!");
return 1LL;
}
2.Re_function:
附件压缩包有密码,看到注释里有一些十六进制,并且发现了png文件头,用这些十六进制数据新建了一个png文件,看到压缩包密码,3CF8.解压后可以看到1个exe和1个elf,func1.exe拖进ida,可以在main函数里看到加密函数,就是一个简单的异或,然后找到密文就可以写exp了,最后要注意是小端序,v11,v12,v13要反着写;最后得到SqcTSxCxSAwHGm/JvxQrvxiNjR9=;但这好像不是flag;继续打开func2(elf),有类似base64的加密,最后发现是base64换表,拿SqcTSxCxSAwHGm/JvxQrvxiNjR9=跑一下base64换表的脚本就可拿到flag。exp在下面。
flag{we1come_t0_wrb}
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
func1的exp:
#include<bits/stdc++.h>
unsigned char ida_chars[] =
{
0x64, 0x71, 0x54, 0x54, 0x64, 0x78, 0x74, 0x78, 0x64, 0x41,
0x40, 0x48, 0x70, 0x6D, 0x18, 0x4A, 0x41, 0x78, 0x66, 0x72,
0x41, 0x78, 0x5E, 0x4E, 0x5D, 0x52, 0x0E, 0x3D
};
int main(){
for ( int i = 0; i < 28; i += 2 )
ida_chars[i] ^= 0x37u;
printf("%s",ida_chars);
return 0;
}
func2的exp:
import base64
import string
string = "SqcTSxCxSAwHGm/JvxQrvxiNjR9="
tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tableNew = "FeVYKw6a0lDIOsnZQ5EAf2MvjS1GUiLWPTtH4JqRgu3dbC8hrcNo9/mxzpXBky7+"
maketrans = str.maketrans(tableNew, tableBase64)
translate = string.translate(maketrans)
flag = base64.b64decode(translate)
print (flag)
2.ICS:
1.easyiec:
简单的流量,打开,直接搜索flag即可拿到flag。
flag{e45y_1eci04}
.png)
2.carefulguy:
打开附件,查找字符串“flag”,可以查到,然后追踪tcp流,在第3个流里发现了66,这是f的十六进制。接着看下面的流,666c6167连起来就是flag,然后就是接着找下面的流,把它们给拼起来就可以拿到flag。图如下:
flag{p4us315v3ry1nt3restic9}
.png)
.png)
.png)
.png)
.png)
作者:happynoy
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

浙公网安备 33010602011771号