戰隊第二次考覈wp

本帖爲記錄長右網絡空間安全戰隊第二次考覈題內容,希望可以記住自己做過的題,讓自己更好地進步。

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逆向

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章