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