33C3 CTF: pay2win
SECCON本戦に向けてweb問中心に解いていた。まだwebは初心者なので経験値と能力の効率がよく、pwnを頑張るより効率がよいという判断。
solution
buttonがふたつある。cheapとflag。
まずcheapから。
9999999999
や1111111111111111111111111111111111111111
(<input>
にmaxlength="16"
属性が付いてるのでcurl経由でやる)を送ると認証を通る。
次はflag。
だめ。
URLに付いている?data=...
の値が怪しい。これを整理すると以下のようになる。一致する部分がいくらかある。
/pay (cheap) 5e4ec20070a567e06ce74ade0984b44f 5c8c244fd5679b023b5b0554edda4f88 28df361f896eb3c3706cda0474915040
/pay (flag) 5e4ec20070a567e06ce74ade0984b44f d3cecf05a77eeacb4f75c9736d3b8e06 41e7995bb92506da1ac7f8da5a628e19ae39825a916d8a2f
/payment/callback (cheap) 5765679f0870f4309b1a3c83588024d7 c146a4104cf9d2c86842c15a91ea9769 28df361f896eb3c3706cda0474915040
/payment/callback (flag) 232c66210158dfb23a2eda5cc945a0a9 650c1ed0fa0a08f6ca019a8c229bc4d9 aef38fd25e8ce9872f7ef761e2bbe791
block暗号のECB modeのように、適当に切り貼りしてみる。以下のように貼り合わせてできる http://78.46.224.78:5000/payment/callback?data=5765679f0870f4309b1a3c83588024d7c146a4104cf9d2c86842c15a91ea9769aef38fd25e8ce9872f7ef761e2bbe791 が正解。
/payment/callback (cheap) 5765679f0870f4309b1a3c83588024d7 c146a4104cf9d2c86842c15a91ea9769
/payment/callback (flag) aef38fd25e8ce9872f7ef761e2bbe791
flag: 33C3_3c81d6357a9099a7c091d6c7d71343075e7f8a46d55c593f0ade8f51ac8ae1a8