# PicoCTF writeup
###### tags: `CTF` `資安`
## 一些簡介(?)
這是一份不怎麼專業的writeup ><
但絕對是手把手 一定讓你看懂的
題目幾乎都來自於 [PicoCTF](https://play.picoctf.org/practice)
希望能給剛開始學的人有一個可以看中文writeup的地方
適用於剛入門CTF的資安初學者
因為想讓大家最後都是透過自己解出來的
所以flag都只截一半的圖 ((才不是沒截好呢
有空就會更新!
但我也不是真的很厲害
所以解的題目也都偏簡單嗚嗚嗚嗚
## 前言
不知道怎麼開始的話可以先看看[這份簡報](https://docs.google.com/presentation/d/1AY87AT3e-vbSz-f1EjOb6Y8AEL5WMhybahw4zSqlxcU/edit?usp=sharing)! (( 超級簡單的簡介跟實作
另外下面是各種資源們!
- [高中職生資安研習營-SecurityFoscusOnline2023](https://github.com/MyFirstSecurity2020/SecurityFoscusOnline2023)
- [資訊培訓相關資源彙整 Awesome CS Training](https://github.com/goodjack/awesome-cs-training)
- [台灣資安 / CTF 學習資源整理](https://github.com/Ice1187/TW-Security-and-CTF-Resource)
## 一定要先知道的指令
- 下載檔案 --> **wget 網址**
- 打開執行權限 --> **chmod +x**
遇到Permission denied的時候用
- 看自己現在有哪些檔案 --> **ls**
- 印出檔案內容 --> **cat 檔名**
- 前往 --> **cd 檔案路徑**
p.s. 常用 cd ./檔名or資料夾名稱
- 執行 --> **./檔名**
p.s. python檔用 **python3 檔名**
- 解壓縮 --> **unzip 檔名**
p.s. 第一次用要先 `sudo apt-get install unzip #下載套件`
- 找關鍵字 --> **strings 檔名 | grep 關鍵字**
- 編輯檔案 --> **vim 檔名**
- alt + shift + : + i --> 開始編輯
- alt + shift + : + w --> 存檔
- alt + shift + : + qa! --> 直接離開
## 一些解題常客
### 不知所措題
不知道是什麼的檔案能用記事本都用記事本先開!
再來就是strings配grep
### 圖片題
先丟 [fotoforensics](https://fotoforensics.com/),再丟binwalk
### Crypto
#### 古典密碼學
看不出來就先丟 [Cipher identifier](https://www.dcode.fr/cipher-identifier) ,沒找到再自己猜 / 查
- base32 特徵:英文大寫或數字
- base64 特徵:英文大小寫或數字還有==結尾
- 新手常碰到ㄉ凱薩:這個直接丟線上工具解
- 還有一些常見的古典密碼,可以自己去找找
- 好用的online decoder
- [dcode.fr](https://www.dcode.fr/)
- [cryptii](https://cryptii.com/pipes/caesar-cipher)
### Web
- F12一生推
- 有輸入框可以考慮injection
- 睜大眼睛看網址
- 可以改網址位址:像在後面加個/admin之類的
- 都不行就丟Burp Suite看看
## General Skills
### Python Wrangling
:::info
:bulb: **:** 跑python的指令
:::
1. 看到它是python檔 --> 用python跑跑看
2. 它叫我用 ende.py -e或-d
3. 先用-e 但它噴出一串怪東西
4. 再試試看-d flag就出來了

### Tab, Tab , Attack
:::info
:bulb: **:** Tab的自動填寫功能
:::
1. 解壓縮 -->
sudo apt-get install unzip #下載套件
unzip <檔案>
2. ls 看到解壓縮完的檔案Addadshashanammu
3. cd A 之後一直按Tab到最裡面的資料夾
4. ls 看檔名
5. ./執行檔案
### Magikarp Ground Mission
:::info
:bulb: **:** ssh 、檔案路徑(cd)
:::
1. ssh 使用者名稱@ip -p <port\> -->
ssh ctf-player@venus.picoctf.net -p 57710
2. ls 看看有什麼!
3. 照著指示做flag就出來ㄌ

### strings it
:::info
:bulb: **:** strings 、grep
:::
1. 下載檔案
2. `strings <檔案> | grep 關鍵字` --> `strings strings | grep pico`
### Glitch Cat
:::info
:bulb: **:** nc、python
:::
1. nc進去,拿到一個還沒轉成字串的flag
2. ctrl c 回自己的shell
3. 用python把flag轉出來

### PW Crack 3
:::info
:bulb: **:** 看程式碼! ! !
:::
1. 打開python檔 -->
vim <檔案> 或 nano <檔案> 或 cat <檔案>
2. 滑到最下面,出現一個pos_pw_list
3. 執行檔案,用這7組密碼試


### Big Zip
:::info
:bulb: **:** grep -r 用過的都說好用
:::
1. 下載檔案(wget)然後解壓縮(unzip)
2. cd進資料夾big zip
3. 感覺可以用grep
4. 先下grep picoCTF{ 發現跑不出來
5. 看看grep --help
6. 發現有遞迴(-r)可以試試看
7. 下指令grep -r picoCTF{

### flag_shop
:::info
:bulb: 整數溢位 int overflow
:::
1. 先來看看程式碼

2. 從黃色那行往上找發現 -->
可以藉由輸入number_flag更改account_balance的值
3. 如果要增加account_balance的值那就要讓total_cost變負數
4. 往上找發現total_cost = 900\*number_flag
5. 所以輸入number_flag的時候輸入很大的值 --> 發生溢位變成負數
6. 大概了解之後就可以nc進去試試看了

### PW Crack 4
:::info
:bulb: **:** 看程式碼! ! ! 寫迴圈
:::
1. 打開python檔 -->
vim <檔案> 或 nano <檔案> 或 cat <檔案>
2. 滑到最下面,出現一個pos_pw_list
3. 他說正確答案在list裡,所以直接寫個迴圈讓他當user跑
(把list裡的密碼先hash_pw(),找出結果和correct_pw_hash一樣的,把那組pw叫user_pw存起來)
5. 最後再執行一次,flag就出來了!
修改原檔程式碼變成: (只截了要修改的地方)


### PW Crack 5
:::info
:bulb: **:** 讀檔暴搜! 字典攻擊!
:::
1. 一樣先看原程式碼跟他給的檔案們
2. 原始碼叫我們找出正確的密碼,給了一個字典檔
3. 推測應該是要用這個字典暴搜
4. 開始寫程式!
- 可能遇到的困難:
a. 讀檔要用 `.readlines()` 逐行讀取
b. 要再用`.strip()` 處理掉 \n
5. 找到正確密碼 `eee0`
6. 再執行 level5.py,輸入`eee0`,就拿到flag了!
修改原檔程式碼變成: (只截了要修改的地方)


### mus1c
:::info
:bulb: 一個酷酷的神奇語言叫 rockstar
    [線上工具rockstar](https://codewithrockstar.com/online) 好像是官方網站吧><
:::
1. 先看一下他給的檔案,檢查之後發現沒有藏東西
2. 偷看提示哈哈,他說 `Do you think you can master rockstar?`
3. google一下 `rockstar CTF`,跑出了一個網站
4. 把題目給我的歌詞丟進他的try it !
5. 得到一串感覺是ascii的東西
6. 丟到 [dcode.fr](https://www.dcode.fr/ascii-shift-cipher) ,找到一個看起來是他想要的東西
7. 再用picoCTF{}包起來就是flag了!


## Web
### GET aHEAD
:::info
:bulb: **:** 想看網頁的什麼都可以用curl指令
:::
1. 看題目名稱他應該是把flag藏在HEAD裡
2. 打開cmd,先curl --help all看看應該要用什麼指令
3. 發現要用curl -I 網址

4. flag就出來了

### Cookies
:::info
:bulb: **:** 可以改cookies的資料! 還不改爆!
:::
1. 按F12 點application 再點cookies
2. 先隨便送一個東西出去 發現cookies value是-1
3. 改成1看看

4. 再改成0看看

5. 發現他喜歡的餅乾會變 所以一直改數字有可能會跳出flag
6. 慢慢試 flag就出來了!
### Insp3ct0r
:::info
:bulb: **:** 神奇的F12
:::
1. 按F12 點source
2. 點開網頁程式碼
3. 發現他只是把flag分三份放在html、css、js,所以只要複製貼上就好
### Scavenger Hunt
:::info
:bulb: 更改網址前往目錄
  robots.txt : 阻止google進行抓取的隱藏文件
  .htaccess : Apache server下設置各種權限規則的隱藏文件
  .DS_Store : Mac OS X系統下儲存目錄自定義屬性的隱藏文件
:::
1. 按F12 點sourse
2. 點開網頁程式碼
3. 發現他把flag的part1跟2放在html、css,所以先複製起來放著
4. 然後在js的註解看到
``/* How can I keep Google from indexing my website? */``
--> 所以part3應該在robots.txt裡面

5. 他說這是Apache server 所以試試看part4是不是在.htaccess裡面

6. 他說他用Mac,還可以Store a lot of info,所以試試看.DS_Store

### where are the robots
:::info
:bulb: robots.txt 是你的好朋友
:::
1. 題目提到robots,所以直接看robots.txt
2. flag沒放在這裡,但看到了一串檔案路徑

3. 照著路徑過去就看到flag了

### Roboto Sans
:::info
:bulb: robots.txt 、base64
:::
1. 先看一下source code,註解跟我說flag不在這
2. 再看一下robots.txt
3. 看到base64編碼過的東西

4. 丟去online decoder解碼
5. 找到`anMvbXlmaWxlLnR4dA==`會變成`js/myfile.txt`
6. 從網址照著路徑過去flag就出來了!
### dont-use-client-side
:::info
:bulb:F12看一下
:::
1. 有輸入框,可能是SQL injection
2. 發現不能用SQL injection
3. 看一下F12,他直接放在code上
4. 按照split順序自己接回去就有flag了

### Some Assembly Required 1
:::info
:bulb: ~~雖然他說要看組合語言,但有時候靠運氣就行(?)~~
:::
1. 依舊是先看F12
2. 都看看,發現他直接把運行程式碼給我了,但看不太懂
3. 繼續隨便看看,看他會不會直接把flag放在這裡
4. 啊哈! 被我找到了

### logon
:::info
:bulb: F12的network可以看傳了什麼東西出去
:::
1. 先用用看SQL injection,發現不行
2. 再看看他傳了什麼出去,看到他的admin是用布林值判斷的

3. 把admin的value改成True

4. 然後重新整理flag就出來了

### Search source
:::info
:bulb: 暴力解雖然很累但還是蠻好用的
:::
1. 依舊是F12看看程式碼
2. 超多ㄟ,先到處亂看
3. 發現沒什麼進展,題目又叫我從source找
4. 只好認命開始找了

### picobrowser
:::info
:bulb: 開發人員工具裡還有很多好用的工具 ! ! ! !
:::
1. F12一定要開的吧,先開network按按鈕,看發生了什麼
2. 他說 You're not picobrowser!
3. 查一下怎麼改browser
4. 意外發現右上三個點點裡還有好多東西可以用

5. 把user angent改成picobrowser再重新整理flag就出來了

### Client-side-again
:::info
:bulb: 程式碼超亂 --> 用Online JavaScript beautifier變好看
    不知道變數是什麼 --> console幫你印出變數
:::
1. 看看網站的source code,看到一坨看起來拼起來就是flag的東西
2. 先把他弄得好閱讀一點
3. 再用console把那些被存在_0x4b5b裡的東西弄出來
4. 照著他給的程式碼把flag拼出來



### MatchTheRegex
:::info
:bulb: 正規表達式

:::
1. 題目叫我們用正規表達式
2. 看了下source code發現它驗證完如果對了會alert flag
3. 直接試`picoCTF{*`

### Forbidden Paths
:::info
:bulb: 點點斜線攻擊Dot dot slash attack (( aka 路徑遍歷
    可看看這篇文章 [零基礎資安系列(五)-路徑遍歷(Path Traversal)](https://tech-blog.cymetrics.io/posts/jo/zerobased-path-traversal/)
:::
1. 有個輸入框,感覺就可以用injection
2. 發現輸入檔名他會印出文件內容
3. 輸入常見的路徑遍歷payload: `../../../../../../../flag.txt`
- ../ 在linux指令的意思是退回前一層
(要退幾層都可以,不要退太少就好)
- flag.txt 是題目跟我們說flag放的地方
4. flag就出來了!
## Crypto
<tips\>
認識的密碼越多就越快認出來!
好用的工具 [Cipher identifier](https://www.dcode.fr/cipher-identifier)
### caesar
:::info
:bulb: 凱薩密碼 Caesar cipher
善用線上工具! [caesar online decoder](https://www.dcode.fr/caesar-cipher)
:::
1. 題目直接跟我們說caesar -> 直接丟caesar online decoder
2. flag就出來了
### Mod26
:::info
:bulb: ROT13 (( aka 位移量13的凱薩密碼
善用線上工具! [ROT13 online decoder](https://rot13.com/)
:::
1. 題目直接跟我們說ROT13 -> 直接丟ROT13 online decoder
2. flag就出來了
### 13
跟上面那題Mod26一模一樣的解法
### Mind your Ps and Qs
:::info
:bulb: RSA
善用線上工具! [RSA online decoder](https://www.dcode.fr/rsa-cipher)
:::
1. 題目給我們RSA的c, n, e
2. 直接丟RSA online decoder之後,flag就出來了
### The Numbers
:::info
:bulb: A1Z26 Cipher
善用線上工具! [letter-number online decoder](https://www.dcode.fr/letter-number-cipher)
:::
1. 打開題目給的檔案!看到一串數字組成的flag
2. 知道開頭一定是picoCTF,所以找一下規律
3. 從C:3, T:20, F:6 發現好像是字母順序
4. 找一下字母順序的decoder然後丟上去
5. flag就出來了 (( 話說這題的flag是全大寫 `PICOCTF{自己去解><}`
### Easy1
:::info
:bulb: 維吉尼亞密碼 Vigenère cipher
善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦
:::
1. 打開它給我們的表 --> 直接認出來這是維吉尼亞密碼(Vigenère cipher)
2. 丟給線上工具解 `plain = UFJKXQZQUNB ; key = SOLVECRYPTO`
3. flag就出來了!
### Vigenere
:::info
:bulb: 維吉尼亞密碼 Vigenère cipher
善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦
:::
1. 題目直接跟我們說他用Vigenere
2. 丟給線上工具解 `plain = 他給的檔案內文 ; key = CYLAB`
3. flag就出來了!
### rail-fence
:::info
:bulb: 柵欄密碼 Rail Fence Cipher
善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦
:::
1. 題目直接跟我們說他用Rail Fence Cipher
2. 丟給線上工具解 `plain = 他給的檔案內文 ; key = 4`
3. flag就出來了!

### morse-code
:::info
:bulb: 摩斯密碼Morse Code
善用線上工具
:::
1. 直接把檔案丟進線上工具裡面
2. 然後再依照題目加上picoCTF{},把字母改成全小寫,空格處改成底線
3. flag就是它了!
### Tapping
:::info
:bulb: 摩斯密碼Morse Code
善用線上工具
:::
1. 一看就是摩斯,直接丟線上工具
2. flag就出來了
(( 這題的flag長得像這樣 `PICOCTF{你找到的東西}`
### la cifra de
:::info
:bulb: 維吉尼亞密碼 Vigenère cipher
善用線上工具! [dcode.fr](https://www.dcode.fr/vigenere-cipher)
不知道key是什麼可以用字頻分析
:::
1. 先nc進題目,發現一串像flag的東西
2. 丟到 [dcode.fr 的 cipher-identifier](https://www.dcode.fr/cipher-identifier)
3. 找到它可能是 Vigenère cipher
4. 使用線上工具,透過知道明文含有picoCTF撈答案



### Flags
:::info
:bulb: 國際訊號程式碼系統 (International Code of Signals)
又稱為Navy Signals Code
善用線上工具! [dcode.fr](https://www.dcode.fr/maritime-signals-code)
:::
1. 打開檔案看到一堆旗子
2. google一下 `flag cipher`就找到了
3. 再用線上工具decode一下,flag就出來了
(( 這題的flag長得像這樣 `PICOCTF{你找到的東西}`

## Reverse
### file-run1
:::info
:bulb: 指令file可看檔案類型
    指令chmod +x 可提升執行權限
:::
1. 先用 **wget** 下載檔案
2. 用 **file** 看一下他是什麼檔 -> 發現是ELF檔(執行檔)
3. 用 **./檔名** 執行一下 -> 他說Permission denied
4. 用 **chmod +x** 提升一下執行權限
5. 最後再執行一次就有flag了!

### file-run2
:::info
:bulb: `strings 檔名 | grep 關鍵字` 超好用!
:::
1. 先執行看看,它說少了argument所以不能執行
2. cat看一下,好吧沒有程式碼可以看
3. 使出萬用技巧 `strings ./run | grep picoCTF{*`
4. flag就出來了!
### vault-door-training
:::info
:bulb: 看看程式碼!
:::
1. 先用 wget 下載source code
2. 用 java 檔名 執行一下 --> 他說Permission denied
3. 用 chmod +x 提升一下執行權限
4. 不知道要輸入什麼,但可以知道等等要去看判斷函數怎麼寫
5. 用cat 檔名 看一下code
6. 他直接給flag了

### vault-door-1
:::info
:bulb: 看看程式碼!
:::
1. 照著程式碼把它組回去就可以了
跟web的dont-use-client-side 做法一樣
    ((我用excel直接對著數字填進格子,就不用照著順序去查表了

### transformation
1. 看它的題目之後自己寫一個exploit --> 但失敗了
2. 看提示他說有線上工具
3. 在[線上工具](https://string-functions.com/encodedecode.aspx)上慢慢試,然後就出來了

#補個我寫失敗的exploit


#再補個[別人寫成功的exploit](https://medium.com/@CYberVIaz/pico-ctf-transformation-writeups-a5496cb3377b)
p.s.我其實看不懂為什麼character2那行要[-1],[-1]不是反轉嗎

### crackme-py
:::info
:bulb: 1. 看source code     2. [ROT47 online decoder](https://www.dcode.fr/rot-47-cipher)
:::
1. 看到source code裡面放著secret
2. 下面說它用ROT47 decode
3. 直接丟ROT47 online decoder
4. flag就出來了!

### Shop
:::info
:bulb: 整數溢位 可以看[這篇文章](https://hackmd.io/@sa072686/cp/%2F%40sa072686%2FB1tr_OtOS)
:::
1. 因為之前遇過類似題目所以我就直接照著直覺試
2. 到Sell an item,賣東西賺錢
3. fruit flag的錢最多,所以賣它
4. 但因為我們沒東西可以賣所以物品數量那邊輸入負數
6. 之後發現金額改變了,變成負數
7. 因為整數有可能會溢位,所以推測數量輸入的負數如果很大就能把剩下的錢錢變正數
8. 經過一番測試之後發現它收的input應該也是整數,所以輸入的時候不能輸太小
9. 我用`-100000000`試兩次就成功獲得錢錢了
10. 再拿這些錢去買
11. fruit flag就得到一串東西了
12. 看起來是Ascii值,再把它轉成文字就得到flag了!

## Binary Exploitation
### buffer overflow 0
:::info
:bulb: buffer overflow
可以看看這篇簡介 [[Day23] 攻擊行為-緩衝區溢位 Buffer Overflow](https://ithelp.ithome.com.tw/articles/10188599)
:::
1. 看一下source code
```c =
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#define FLAGSIZE_MAX 64
char flag[FLAGSIZE_MAX];
//目標是要進這裡
void sigsegv_handler(int sig) {
printf("%s\n", flag);
fflush(stdout);
exit(1);
}
//這個input只需要16
void vuln(char *input){
char buf2[16];
strcpy(buf2, input);
}
int main(int argc, char **argv){
FILE *f = fopen("flag.txt","r");
if (f == NULL) {
printf("%s %s", "Please create 'flag.txt' in this directory with your",
"own debugging flag.\n");
exit(0);
}
fgets(flag,FLAGSIZE_MAX,f);
signal(SIGSEGV, sigsegv_handler); // Set up signal handler
gid_t gid = getegid();
setresgid(gid, gid, gid);
printf("Input: ");
fflush(stdout);
char buf1[100];
gets(buf1); //這裡吃輸入可以吃100
vuln(buf1); //最好是不要讓vuln() return
printf("The program will exit now\n");
return 0;
}
```
2. 綜合上述(註解的部分),我應該要輸入超過 16 + $x$ 個字蓋掉vuln()的return (( $x$ 是vuln()的return佔的大小
3. 所以輸入一大堆a給他,flag就出來了!

### basic-file-exploit
:::info
:bulb: 看程式碼!
:::
1. 在data_read()裡面看到

2. entry是我的input,所以我輸入0就會滿足判斷式
3. 去試試!
- 先輸入1 建資料 --> 後面隨便輸
- 再輸入2 印出資料 --> 這裡的entry number輸入0
- flag就出來了!

### CVE-XXXX-XXXX
:::info
:bulb: CVE介紹可參考這篇文章 [公共漏洞和暴露 CVE 簡介](https://medium.com/@jieshiun/%E5%85%AC%E5%85%B1%E6%BC%8F%E6%B4%9E%E5%92%8C%E6%9A%B4%E9%9C%B2-cve-%E7%B0%A1%E4%BB%8B-f362626c9fc7)
:::
1. 題目給了一段描述,要找出這個漏洞的編號
2. 這種事就丟給AI哈哈哈哈

3. 結果他找錯漏洞了超好笑
4. 從下面的推薦問題看到

5. ~~終於對了~~
- 後來發現google都比他強 笑死

### keygenme-py
:::info
:bulb: 看程式碼!
:::
1. 在開頭看到前半的flag

2. 照著他的變數名稱來看,另一半flag要動態找
3. 往下看程式碼看到下面這段
```python=
#根據前段程式碼可以知道下面兩個變數
#key = user_key
#username_trial = bUsername_trial
def check_key(key, username_trial):
global key_full_template_trial
if len(key) != len(key_full_template_trial):
return False
else:
# Check static base key part --v
i = 0
for c in key_part_static1_trial:
if key[i] != c:
return False
i += 1
# TODO : test performance on toolbox container
# Check dynamic part --v
# 以下這段就是我們要找的東西!
if key[i] != hashlib.sha256(username_trial).hexdigest()[4]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[5]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[3]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[6]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[2]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[7]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[1]:
return False
else:
i += 1
if key[i] != hashlib.sha256(username_trial).hexdigest()[8]:
return False
return True
```
4. 照著他的邏輯逆推,得到sha256完的第1~8個字元是 `6b8e5433`
5. 再依照他的順序重新組合 (4, 5, 3, 6, 2, 7, 1, 8)
6. 得到後半flag是 `e584b363`

## Forensics
### information
::: info
:bulb: 圖片題先丟進線上工具看
    先看圖片本身,再看檔案資訊
:::
1. 把圖片丟到 這裡--> https://fotoforensics.com/
2. 旁邊能用的功能都看
3. 在神奇的地方找到了好像有用的東西

4. 看起來像base64 encode過的東西 --> 試一下用base64 decode

:sparkles: <補充>
。把picoCTF用base64 encode --> cGljb0NURg==
。把picoCTF用base32 encode -->OBUWG32DKRDA====
base32 encode過 --> 英文大寫或數字
base64 encode過 --> 英文大小寫或數字
### Redaction gone wrong
:::info
:bulb: 這裡看不到就換別的地方!
:::
1. 下載檔案 -> 打開發現是一個有部分文字被擋住的pdf檔
2. 看起來很可疑 -> 全部複製之後貼到word
3. flag就出來了!

### Lookey here
:::info
:bulb: `strings 檔名 | grep 關鍵字` 超好用!
:::
1. 題目的標籤說了會用到grep
2. 直接用`strings 檔名 | grep picoCTF{*`
3. flag就出來了!

### extensions
:::info
:bulb: `file 檔名` 可以看出檔案真實身分!
:::
1. 先打開題目給的txt檔,看到一坨看不懂的東西
2. 用 `file flag.txt` 發現他的本體是
3. 把副檔名.txt改成.png,再打開它
4. flag就出現了!

### Matryoshka doll
:::info
:bulb: 是時候該學binwalk怎麼用了!
:::
1. 先 `binwalk --help` 看一下怎麼用
2. `binwalk dolls.jpg` 發現藏了很多檔案
3. `unzip dolls.jpg` 再繼續無限拆 ((就跟題目說的俄羅斯娃娃一樣
<tips\> 可以直接 `binwalk -M -e dolls.jpg` 就不用手動一直拆了
4. 最後看到flag.txt,再沿著路徑進去把它cat出來


### PcapPoisoning
:::info
:bulb: pcap是封包哦!封包分析用wireshark
:::
1. 用Edit/Find Packet,它會跳出我打pico的那個框框
2. 前面記得要選擇string
3. flag通常藏在後面那個地方,所以最前面那格選Packet bytes
4. 然後flag就出來了!

話說看到flag出現在那裡
我才突然想到也可以用 `strings 檔名 | grep "pico{*"`

### Glory of the Garden
::: info
:bulb: 圖片題先丟進線上工具看
    先看圖片本身,再看檔案資訊
:::
1. 把圖片丟到 這裡--> https://fotoforensics.com/
2. 旁邊能用的功能都看
3. 在strings的地方用F3找pico

### Wireshark doo dooo do doo...
:::info
:bulb: pcap是封包哦!封包分析用wireshark
   或是用 `strings 檔名 | grep ` 找字串
:::
1. 經過上次的經驗所以這次先 `strings 檔名 | grep "pico{*" `
2. 發現沒東西,再換成 `strings 檔名 | grep "{" `
3. 找到一串像凱薩過後的flag的東西

4. 丟到online decoder,flag就出來了!

### MacroHard WeakEdge
:::info
:bulb: binwalk超會找東西!
:::
1. 直接打開打不開
2. 一樣`strings | grep `先試一下 --> 沒東西
3. 丟給binwalk看有什麼東西 --> 一堆檔案 ((我找超久
4. 看到一個檔名是hidden的檔案,看起來就是個藏flag的地方

5. 沿著路徑進去,把它cat出來
6. 看到一串英文 --> 去掉空格之後看起來像base64編碼過的東西

7. 丟去 [base64 online decoder](https://www.base64decode.org/)
8. flag就出來了!
### Enhance!
:::info
:bulb: 到處找找,張大眼睛
:::
1. 先用strings掃過
2. 看到看起來有點像html語法的東西
3. cat看看這個檔案
4. 在程式碼(?)裡面找到分散的flag
5. 把它組起來就完成了!

## PicoCTF 2023
### repetitions
:::info
:bulb: Base64 decoder
:::
1. 下載檔案用記事本開,發現結尾是==,所以應該是base64
3. 題目都叫repetitions了,所以base64瘋狂decode,弄到Flag出來

### Rules 2023
:::info
:bulb: F12真的很好用
:::
1. 先試試看用尋找找picoCTF{ ,但沒找到
2. 按F12開啟開發人員工具到處找找

### money-ware
:::info
:bulb: 直接google
:::
1. 根據題目敘述他應該是中了勒索病毒,先猜Wannacry,但不對
2. 用以下關鍵字去google,然後就找到了
`1Mz7153HMuxXTuR2R1t78mGSdzaAtNbBWX malware`

### findme
:::info
:bulb: 睜大眼睛用心觀察,flag就在你眼前
:::
1. 照著他打的用test當帳號 test.當密碼 --> 毫無意外的進不了
2. 他又跟我說密碼是test!
3. 姑且相信他第二次 -->跑得有點慢,但順利進到一個頁面
4. F12看一下有寶藏 --> 沃!有提示,叫我fetch keyword value

5. 於是我打開F12的network再重來一次
看到他噴出了好東西!!!!但他跑超快

6. 在我不知道第幾次試圖點到他但沒成功之後,我決定用截圖的

7. 善用工具直接讓他圖片轉文字
8. 然後看到這個==大概99.99%是base64,所以丟base64 decorder
9. 嗚呼!成功

## BreakAllCTF
### CSIE_strace
:::info
:bulb: strace -s 顯示字元數
:::
1. 題目叫我們strace
2. 發現字沒有全部跑出來
3. -s 100讓他全部出來

### EasyCTF_adder
:::info
:bulb: 看程式碼
:::
1. 先執行看看 --> 他叫我輸入三個數字
2. 用ida開起來,看程式碼

3. 看到第20行 --> 三個數字加起來要是1337
4. 執行程式 --> 輸入1337 0 0
5. 拿到flag!
