MSSCTF 2021 Writeup

发布于 # share

审核也过了我就顺手发一下

实际上主要是想吐槽 Web 出题人题目里夹带私货,但是没什么好地方吐槽。

我当时看 Web1 的时候还不知道这个 HS 是啥ㄟ<(=▔.▔=)>ㄏ,结果下午打美团杯的时候恍然大悟。

有一说一,我也挺喜欢 Hanser 的歌的

以下是正文

CRYPTO

OldAffineSignin

打开下发文件发现是给定了码表的替换

反过来映射即可

Web

HS.com

curl -vv 链接

< HTTP/1.1 405 Method Not Allowed
< Server: nginx/1.14.2
< Date: Sun, 11 Jul 2021 08:48:44 GMT
< Content-Type: text/html; charset=UTF-8
< Content-Length: 0
< Connection: keep-alive
< Allowed-Request-Method: HS
< X-Powered-By: PHP/8.0.8

注意到给定了 Request Method,将 Request Method 替换成 HS 后开始代码审计

$fake_data = $_GET['innerspace'];
$data = $_REQUEST['innerspace'];

题目要求上面两个变量不相同,注意到 $_REQUEST 是可以从 Cookies 读入的,所以直接提交即可

curl --cookie "innerspace=mssctf" -X HS url

babyphp

打开发现是套了三层娃的代码审计

第一层是很常见的 PHP 弱类型,构造 level1=0x91d

第二层则是流注入,构造 level2=data:text/plain,mssCTF is interesting!

第三层是绕过正则匹配,但是发现能用的差不多都被扬了,考虑只使用没有参数的函数,构造 level3=show_source(next(array_reverse(scandir(pos(localeconv())))));

RE

signin

拖进 IDA,F5

发现是对读入的字符串异或然后和给定值比对

倒回去即可

#include <stdio.h>
#include <string.h>

int main()
{
    unsigned long long v4[3]; // [rsp+20h] [rbp-60h]
    char a[90];
    char v5[] = "\n\t_\bqqv$";
    memset( a, 0, sizeof(a) );

    v4[0] = 0x742D23213C3C6E31;
    v4[1] = 0x44124317282A2B7B;
    v4[2] = 0x530050531E491C10;

    memcpy( a, v4, sizeof(v4) );
    memcpy( a + 24, v5, sizeof(v5) );

//    for( int j = 0; j <= 31; ++j )
//        a[j] = *( ( (char *)v4 ) + j );

    for( int j = 0; j <= 31; j ++ ) {
        a[j] ^= 2u * ( j + 4 );
    }

    printf("Here is your flag : mssctf{%s}", a);
    return 0;
}

MISC

give you flag

下载,解压

发现是 base64,解码,还是,再解码……发现解不了,反转一下,接着解码……

发现解出一团乱码,反转,再解码……

得到 flag

PPC

sequence

注意函数很快会收敛到 33

暴力计算判断是否收敛即可。

2077

如果知道每个物品的价值的话就是裸的完全背包,则问题集中在计算每个物品的价值。

注意到如果构造关系保证 DAG 的话很容易求出每个点的价值,考虑去环。

发现 n,m200n,m \leq 200,暴力去环即可。

Comment seems to stuck. Try to refresh?✨

Woshiluo's NoteBook

「Jump up HIGH!!」