战队第二次考核wp

18 篇文章 0 订阅

本帖为记录长右网络空间安全战队第二次考核题内容,希望可以记住自己做过的题,让自己更好地进步。

Sign

签到题,直接提交flag即可。
在这里插入图片描述

Misc

1.小熊猫变成小兔叽

在这里插入图片描述
附件为一个名为zip的文件,没有后缀,在文件名后加上.zip(压缩文件的后缀名),文件变为压缩文件。打开压缩文件,发现一张图。
在这里插入图片描述
根据题目中“小熊猫拉长一下”,猜测需要改变图片的高度或者宽度。鼠标右键查看图片属性:
在这里插入图片描述
发现图片高度比较低,于是考虑增加图片的高度。这里用到的工具为WinHex。
具体操作方法请参考CTF 图片隐写之修改图片高宽
简单来说该图片的高度为380像素,于是将380转换成十六进制,为017c,然后在WinHex找到017c,将其改为我们想要改正的数值的十六进制形式。
我在具体操作中将改图片的高度改为420像素(十六进制形式为01a4),成功得到图片下方的字符串:
在这里插入图片描述
字符串为:olee{qlr3y_16q51_y3q1l_rc654_yap45}
参考题目中给出的flag形式,发现这串字符形式已经和flag的形式一样了。提示给出“低头看看键盘”,于是去搜和键盘相关的解码,发现键盘密码(键盘上的字母顺序分别对应字母表里的字母顺序,如QWE对应ABC),OLEE正好对应了ISCC,于是使用键盘密码的方式,得到最后的flag.

iscc{asd3f_16a51_f3a1s_dv654_fkj45}

2.Broken WUHAN

在这里插入图片描述
下载附件,为一个不可读的图片。使用WinHex打开图片,
在这里插入图片描述
发现图片的文件头标志不对(.jpg文件的头标志应该为FFD8FF),于是修改头标志,
在这里插入图片描述
保存,成功打开图片,得到flag.
在这里插入图片描述
有关文件的头标志,请参考:各类文件的文件头标志

flag{wu_Han_jia_Y0u!}

3. QRQRQRQRQRQRQRQRQRQRQRQRQR

在这里插入图片描述
下载附件,是一张二维码的动态图
在这里插入图片描述
既然是动态图,那么肯定要逐一查看每一帧,找出最特殊的一帧。可以使用ps打开动态图,进行逐一查看,但是有100帧,这样有些费事。我这里使用一个软件Namo GIF编辑器,比较方便:
在这里插入图片描述
于是取出第62帧,
在这里插入图片描述
第62帧与其他二维码最大的不同之处就是多了右下角的小方框。对比一般二维码,这张二维码少了三个定位符,于是用ps给这图加上定位符
在这里插入图片描述
用微信或者支付宝扫一扫,得到flag.(扫不出来请多扫扫,图片还原度不高会导致识别率较低)
在这里插入图片描述

flag{GYSEC_GOGOGO}

4.来玩拼图呀

在这里插入图片描述
附送的音乐为:Time,挺好听的。一开始是真的没想到这首歌的意思。附件就是二百多张拼图,而且顺序是乱的,真要拼出来花儿都谢了。其实Time的真正意思是让图片按照时间排序,就可以得到按顺序的图片了,再用ps进行拼图,就很容易了。
在这里插入图片描述

flag{fate_stay_nt}

Web

1.var_dump(

在这里插入图片描述
打开网页,是一些代码:
在这里插入图片描述

虽然不是很懂,于是直接去查题目,得到:var_dump() 函数用于输出变量的相关信息。然后再去查$_REQUEST: 可以获取以POST方法和GET方法提交的数据,在参考众多网站之后,得到在网址后加上index.php?hello=1);print_r(file("./flag.php"),访问网址,即可得到flag.
在这里插入图片描述
参考文章

flag{your_php_is_very_good_my_bro}

2.Easy_Challenge

在这里插入图片描述
都说了是一道老题了,那就直接上链接吧:我是原题

Reverse

1.Simple_py

在这里插入图片描述
这是一道python逆向题,附件为一个.pyc文件,因此需要找到将.pyc文件还原为.py文件的方法。具体方法参考链接:python反编译exe
这篇文章介绍的是把.exe文件先变成.pyc文件再还原成.py文件的方法,在这个题中我们只需要执行.pyc还原.py就够了。

// 这是还原后的.py代码:
// import base64

def encode(mess):
    s = ''
    for i in mess:
        x = ord(i) + 16
        x = x ^ 32
        s += chr(x)

    return base64.b64encode(bytes(s, encoding='utf-8'))


correct = b'VlxRV8KreGFCYU9ZwqNPwqDCqVNPQlVPdmFRV8Kt'
flag = input('input flag:')
if encode(flag) == correct:
    print('you are correct')
else:
    print('you are wrong')

其中,核心代码只有中间一部分:

// 核心代码
//     for i in mess:
        x = ord(i) + 16
        x = x ^ 32
        s += chr(x)

想要得到flag,我们就要将程序反过来写,通过反向运行程序,获得原来的flag,因此,改变核心代码,得到:

// 修改后的代码
// import base64
mess='VlxRV8KreGFCYU9ZwqNPwqDCqVNPQlVPdmFRV8Kt'
s = ''
mess = base64.b64decode(mess)
for i in mess:
    x = i ^ 32
    x = x - 16
    s += chr(x)
print(s)

运行后得到:

flagÒ{H1R1_iÒs_ÒpÒyc_Re_F1agÒ}

将其中明显不是密码的Ò去掉,得到最后的flag:

flag{H1R1_is_pyc_Re_F1ag}

2.Easy Reverse

在这里插入图片描述
下载附件,是一个.exe文件,因为不是python文件,因此我们不能用上一题一样的方法去还原其代码了。于是考虑其他的反编译器,这里使用IDA进行反编译,得到C伪代码

// 伪C代码
// #include <stdio.h>
void main() {
	int a;
    char v4; // [esp+16h] [ebp-1Ah]
    char v5; // [esp+17h] [ebp-19h]
    char v6; // [esp+18h] [ebp-18h]
    char v7; // [esp+19h] [ebp-17h]
    char v8; // [esp+1Ah] [ebp-16h]
    char v9; // [esp+1Bh] [ebp-15h]
    char v10; // [esp+1Ch] [ebp-14h]
    char v11; // [esp+1Dh] [ebp-13h]
    char v12; // [esp+1Eh] [ebp-12h]
    char v13; // [esp+1Fh] [ebp-11h]
    char v14; // [esp+20h] [ebp-10h]
    char v15; // [esp+21h] [ebp-Fh]
    char v16; // [esp+22h] [ebp-Eh]
    char v17; // [esp+23h] [ebp-Dh]
    char v18; // [esp+24h] [ebp-Ch]
    char v19; // [esp+25h] [ebp-Bh]
    char v20; // [esp+26h] [ebp-Ah]
    char v21; // [esp+27h] [ebp-9h]
    int v22; // [esp+28h] [ebp-8h]
    int i; 
    printf("请输入数字:");
    while (scanf("%d", &v22))
    {
        v4 = -125;
        v5 = 124;
        v6 = -122;
        v7 = 127;
        v8 = 106;
        v9 = -113;
        v10 = -109;
        v11 = -118;
        v12 = -126;
        v13 = 119;
        v14 = 108;
        v15 = 127;
        v16 = -122;
        v17 = 116;
        v18 = 122;
        v19 = 102;
        v20 = -102;
        v21 = 91;

        for (i = 0; i <= 17; ++i) {
            putchar(v22 - *(&v4 + i) - i);
        }
        putchar(10);
        putchar(10);
        printf("请输入数字:");
    }
}

flag 第一个字母位“f” asII 码为0x66 ,十进制 102.也就是
x-(-125)=102,x=-23
于是编写代码:
下面展示一些 内联代码片

//编写出生成flag的代码
// #include <stdio.h>
 
void main()
{       
        int i;
        int s[]={-125,124,-122,127,106,-113,-109,-118,-126,119,108,127,-122,116,122,102,-102,91};
        for(i=0;i<=17;i++)
        {
                putchar(-23- (s【i】)-i);
                 
        }
        putchar(10);
}

运行,生成flag:

flag{UPX_is_What?}

参考网站:一个简单的ctf逆向

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值