Ctfs

ksnctf: #9 digest is secure!

  • ctf
問題 http://ksnctf.sweetduet.info/q/9/q9.pcap 解法 問題文から分かるようにdigest認証の問題。 basic認証がガバガバだったのと違い、digest認証はもう少し安全。 wikipedia曰く以下のように認証する。 A1 = ユーザ名 “:” realm “:” パスワード A2 = HTTPのメソッド “:” コンテンツのURI response = MD5( MD5(A1) “:” nonce “:” nc “:” cnonce “:” qop “:” MD5(A2) ) ユーザーはサーバーからnonce、nc、conce、qopが与えられてresponseを作る。 サーバーはA1を持っているので、responseを作って照合する。 なるほど確かに逆ハッシュが出来ないと厳しそう。 hydraというツールがあるくらいなので出来ないことは無いのだろうが… と思ってpcapファイルを眺めていると、なんとhtdigestを覗いているではないか! GET /~q9/htdigest HTTP/1.1 Host: ctfq.sweetduet.info:10080 Connection: keep-alive Authorization: Digest username="q9", realm="secret", nonce="bbKtsfbABAA=5dad3cce7a7dd2c3335c9b400a19d6ad02df299b", uri="/~q9/htdigest", algorithm=MD5, response="d9f18946e5587401c303b34e00a059eb", qop=auth, nc=00000002, cnonce="6945eb2a7ba8cf7f" User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.

ksnctf: #17 math2

  • ctf
問題 How important is modulo arithmetic in cryptography? Let x = 2748040023408750324411119450523386950660946398855386842074606380418316981389557916980086140301887947706700698930830779678048474531538039134089675000612962004189001422715316147779554460684462041893073445562829316520071658956471592707597247194589999870235577599858641217209525243986680999448565468816434633441308131788183291153809253610695081752296732033298647222814340913466738465892791206393936089466068684809286651197884210187525269355913763182559833600649423167126622527203197940618965341674710993871930168655984019611567024681974446413864111651893113475795042753452042221938667445789706741508160949598322950403760355305740757495122850819958219745478009476321531997688864567881328571570240278649150057863614800304034452842380274161491817926949213762740941829027657311016236224840157689532838274458699038989430527152474540367086746579688987076042252804910459873636444778218434530247647760637770881658596016745610672707638583665201858035977485748775481448417394363801163664632527695106599930657132405666766730530997168969743603771751166591137309462845077320233889570871715682231576283485837079838925927845291565664213349164253238166525895494203520538861102027123057706413048503799598270037162337386882901940037500301040636118696723417952777083334146545991127148023661461455142653367976629308434919237639329808504561590505864983890552051987234096577849288536293631380950881787840319976968198704697701966146561843819563765280293823120028941691560894722032503932540560461794190408016359786029679686957711035845785762377768203676919060935155382104877926736292611130243057909501332528103700463961697932230444978571571548190911155741113324573679444638703192583211952316173122745153529542339170631749363019742630339456502772150867703497326010832217054307087826776870481852284816747574983354077170761286175754243223519482572371717625453405597596790583499145036350302955327521461648262537855645876387858201576107385450844609238327605056916243564458120595540013872075267316304999752934829122583429168665162743589578036716137649553856654996867605565582594039606555708509284616434305172100068285925706963351193710675088846623856567419346569873886366829228933416064828304824833588800700991940600359503453201939139663042787644390810036292415117714919711827630953170559057272633043896443339064006637234499569232762828723613158050896065355005775876910820958296537497557737916521798848004761708690607167573807307291510879396794861418856342383200817566360552405183866698509354047737422523253071467100174078467454351746681775690022510266842064132386305358891086764558955802257688899610117102582837343655907837234028334304769930810792079059216436489942124896722072971246781926084943216581585837400274934104255861076781834022322597318553478829221018993823759479304536464719195824731739557957722610850860725276329731096193041588880149698625007746958307472328762247329346952956782896672291984502790479223886842985800649168009891087704339671376795754679245964575179873102014722210341771266309855717402003098724600141420936602986387680283404929020457247001371544838792904086327642729822000980710278752669990211765608002907900832262843253793831541691706704836397397798869236939393204666502455311086553874765248631328418556164635889080357612074921368044611251307530838475840480894307375072202500636365832958938363048173011687247738236161480446422712858040552310006617829659443118541556912488329721272939472554467384944920030182974546889304443711910957344160175437149714520561879951921970795705645045936350875827028675689840953101114431720413756855193291198455863087675930604549263160397353363504597829924339064422377323361781720524799661393081986371074530022532621955945720583925291264598924971169093688390536693144593482790588893095052569365154072722966434676949346037949263628957665599420417719951187489606010866702371368012263032537375401145460592536898818245350468847674995676417425737655723761467908866712060720593684978725896677308273. Find the value of y such that y101 = x. The flag is FLAG_y (in decimal notation). 解法 求めるものは自明なので、問題はどうやって解くか。 自分でべき乗を計算する処理を書いても良いのだが、今後同じようなことをしたい時簡単に解けるように楽な方法を探すことにした。 MPFRを使えるgmpy2というライブラリが良さそう。他にsageなどもある。 自分で書くなら2分木探索をしたらいい。 point 881 参考 http://stackoverflow.com/questions/39794338/precise-nth-root

ksnctf_math1

  • ctf
問題 Let e = 65537, n = 1517330236262917595314610888889322115651087080826711948897066340883208205571592392362650858571076247939805436226544833224526137582834770402681005343930059463684528957271778199162575053306238099823295117697031968370690372250916935800738698142103275969223264184374648246277564306900886005299731265812255274723175925185522344831066577166867786835955092059346244885587228196357297758371381557924676260190209536670230008561217008649261974735505203813478978893582292682827884118215872470401293272325715864815977064075988643101088355047954735427424641386870772845440782632933485165110172437511822736907550777817722248753671107339823410418938404382732079381329288400012929311347390423061254658780185245562668131009832293474920208834795460061115101364091252176594144096675899952570380792978037217747311595899301451192342027799533264325948876556110474850761538179748318187805312451895898751337975457949549497666542175077894987697085521882531938339334715190663665300179658557458036053188152532948734992896239950564081581184284728802682982779186068791931259198917308153082917381616147108543673346682338045309449569430550618884202465809290850964525390539782080230737593560891353558335337408957948041667929154230334506735825418239563481028126435029, c = me mod n = 225549592628492616152632265482125315868911125659971085929712296366214355608049224179339757637982541542745010822022226409126123627804953064072055667012172681551500780763483172914389813057444669314726404135978565446282309019729994976815925850916487257699707478206132474710963752590399332920672607440793116387051071191919835316845827838287954541558777355864714782464299278036910958484272003656702623646042688124964364376687297742060363382322519436200343894901785951095760714894439233966409337996138592489997024933882003852590408577812535049335652212448474376457015077047529818315877549614859586475504070051201054704954654093482056493092930700787890579346065916834434739980791402216175555075896066616519150164831990626727591876115821219941268309678240872298029611746575376322733311657394502859852213595389607239431585120943268774679785316133478171225719729917877009624611286702010936951705160870997184123775488592130586606070277173392647225589257616518666852404878425355285270687131724258281902727717116041282358028398978152480549468694659695121115046850718180640407034795656480263573773381753855724693739080045739160297875306923958599742379878734638341856117533253251168244471273520476474579680250862738227337561115160603373096699944163. You have succeeded in factorization of n using Shor’s algorithm as follows: n = pq, p = 34111525225922333955113751419357677129436029651245533697825114748126342624744832960936498161825269430327019858323450578875242014583535842110912370431931233957939950911741013017595977471949767235426490850284286661592357779825212265055931705799916913817655743434497422993498931394618832741336247426815710164342599150990608143637331068220244525541794855651643135012846039439355101027994945120698530177329829213208761057392236875366458197098507252851244132455996468628957560178868724310000317011912994632328371761486669358065577269198065792981537378448324923622959249447066754504943097391628716371245206444816309511381323, q = 44481453884385518268018625442920628989497457642625668259648790876723318635861137128631112417617317160816537010595885992856520476731882382742220627466006460645416066646852266992087386855491152795237153901319521506429873434336969666536995399866125781057768075533560120399184566956433129854995464893265403724034960689938351450709950699740508459206785093693277541785285699733873530541918483842122691276322286810422297015782658645129421043160749040846216892671031156465364652681036828461619272427318758098538927727392459501761203842363017121432657534770898181975532066012149902177196510416802134121754859407938165610800223. 解法 RSA暗号のNが量子コンピュータで素因数分解出来たという設定。 素因数分解が出来たら後は簡単。 d = e^-1 (mod (p-1)*(q-1)) m = c^d (mod n) である。 modのインバースや巨大数のべき乗の計算はうまいことしないと計算量が増大するのでライブラリを使うようにした。 pycryptoのnumberは便利なんだけど少し物足りない。numpyやsympyを使ったほうがいいのかな? point 831 参考 https://ja.wikipedia.org/wiki/RSA%E6%9A%97%E5%8F%B7

ksnctf: #13 proverb

  • ctf
問題 SSH: ctfq.sweetduet.info:10022 ID: q13 Pass: 8zvWx00MakSCQuGq 解法 sshで接続すると以下のようなファイルがあるホームディレクトリに接続する。 [q13@localhost ~]$ ll total 28 -r-------- 1 q13a q13a 22 Jun 1 2012 flag.txt ---s--x--x 1 q13a q13a 14439 Jun 1 2012 proverb -r--r--r-- 1 root root 755 Jun 1 2012 proverb.txt -r--r--r-- 1 root root 151 Jun 1 2012 readme.txt 見ての通りflag.txtはq13aユーザーでしか見れない。 proverbは実行可能で実行するとことわざを出力してくれる。 でこのことわざはproverb.txtにかかれているものと同じみたい。 readme.txtは、 [q13@localhost ~]$ cat readme.txt You are not allowed to connect internet and write the home directory.

ksnctf: #14 john

  • ctf
問題 user00:$6$Z4xEy/1KTCW.rz$Yxkc8XkscDusGWKan621H4eaPRjHc1bkXDjyFtcTtgxzlxvuPiE1rnqdQVO1lYgNOzg72FU95RQut93JF6Deo/:15491:0:99999:7::: user01:$6$ffl1bXDBqKUiD$PoXP69PaxTTX.cgzYS6Tlj7UBvstr6JruGctoObFXCr4cYXjIbxBSMiQZiVkKvUxXUC23zP8PUyXjq6qEq63u1:15491:0:99999:7::: user02:$6$ZsJXadT/rv$T/2gVzYwMBaAsZnHIjnUSmTozIF/ebMvtHIJjikFehvB8pvy28DUIQYbTJLG6QAxhzJAKOROnZq0xV4hUGefM1:15491:0:99999:7::: user03:$6$l0NHH5FF0H/U$fPv3c5Cdls/UaZmglR4Qqh8vhpIBsmY1sEjHi486ZcDQ2Vx5GY0fcQYSorWj6l42jfI47w437n.NBm8NArFyT/:15491:0:99999:7::: user04:$6$wAnAP/NMiLa/yE$.gi4r3xYuPTg5z2S59z2EzFbqpmwZYy1tBSVA9/hqTFnWY0tHqXbwL.dFQwHzKTuzXV6WMgjEZlyzUPGzVtPb0:15491:0:99999:7::: user05:$6$jTgFhKHk/$xQIdn7snYAAGvifxC02YLXcAKkiuPbJ3KBkH2Q8BZ12TL2aepaUJotgfKfNSPCXWebyCY/skOmOymok.KIm5D0:15491:0:99999:7::: user06:$6$8LXZt/zPbLtIn1o$ynsZxueG88Kz0vDr3cyK.21cv4GWw9iaW9oYZcmZ9SY5UpMQS1wl2/dbXGyR8WzVBKKP/6k8VYvWuiNQ3We52/:15491:0:99999:7::: user07:$6$jnA8m/S5aU0/$PGrG8mDy.vs3W9xhG1qd56eOEainH9xntY48.duznt989TXMn6J.scOBqp4BWg3fHWxoFgBn26LYvcnqWGcoF1:15491:0:99999:7::: user08:$6$ITB7n/qsP$fmrmItHX9B96PmhsxIX21vdYDvFHiIPnyzRFjWIbcd3y/DRHCm0lzyJEnWlQChdDAiFUFXtqwoTbEdREXQ99M.:15491:0:99999:7::: user09:$6$LpgLJrjPV$6sa0KW08Q10S.C/BSUHlHaQZT5n8uIygZSsWP5drdmuhI7c17wWCK/GEzQS7g8EL//5bqdjo1C90smTDhLEcF1:15491:0:99999:7::: user10:$6$0VSPwOzcL//6QR$RgtMpkfVPb5Cli7cjVE5jMgJlN10xY1R3jxRNrY0l/84R3.NvxP3I8XtkMkonU6DKhge0JGp54DZLQqUN9kL7/:15491:0:99999:7::: user11:$6$zryub/lvSKj7Xl$eazV2fmcJa5M3qMovQqARGK59Qxtfv2zjUJvphKNnyUMVyBn.SjEFhRT/mAjz3QFroNbwmrYLtrpyxjH.q64n/:15491:0:99999:7::: user12:$6$tAkM0dDUFe76d8K/$OnNGFEuIf1seMlLHb.8.y5/cpmBUcMbhLhOfFdd0E/DKASXPS4riB4uz2Fg3om9Atg.g7s.JFoKV0uuJ461KV/:15491:0:99999:7::: user13:$6$0cCdE5Nfqu/HFS$PwnLdS.chtm6qGwf2Uuiko7V3fMwjcQ52M8hslvoReFQ9XOBXw603Ok20VJwWAwR6RNv6adn6a6kuRm5Y3.ge1:15491:0:99999:7::: user14:$6$RgPs7j4eSa/v$71CeLB9Z1Fafi6vi2ou5LzRz5xXWTzvZeZgelnm2przx.JQYp21p8h2BCyTYFd10MKD/cquPvn42vSzlJJJ8Q1:15491:0:99999:7::: user15:$6$1uhGQ/5DwMp/$UjYTEVaChEzmUITvWpaZVvYYDLBULpI4IEyieClSsyC2NHwEnaDx6xwtUVpQPxEhi6R7OQhX68Oo5CfilYqDQ.:15491:0:99999:7::: user16:$6$V/InSacMp8U$UpDgdL/GS/kdFmn1rO97YkLAeTgofu4fDVUGoV1PWnVFxUtVyx24ix5hJp53FkBuqdzmXgwGcb6MU5AWJWjaB1:15491:0:99999:7::: user17:$6$d6mWSrE8vxDe$UqTgKPfKxm0/Aboz8DeFNNiZsFBYyE6iGpqUzSX4UpWSDfXt1DERBtI29H2Gz5q.6ls3730naAo31wAacvs/L0:15491:0:99999:7::: user18:$6$ulcKu/ddomcNGRJj$i8XB1D4YtLGbAHX0XHX88ObUWw8dQsrTqoliGAU//zGHNLmLeWd.4k5YHViNSy3rlGTQSRPtutlKnub8aRnzy0:15491:0:99999:7::: user19:$6$cVnhE9CwfSIIA$wrn6p3cgfz.JOc6KVkieNCtc.FzkjUdcDDlivn0APnYv9/z4tt7hUpPft5T8kMmnx/hiF92vjnDxcauVyQySp.:15491:0:99999:7::: user20:$6$2Pg2VxXg$K8AqsCMPAFiXSxNjETBWqEHQom9Q5dDIz9/nItxpQatrG9gvv9CRJP3kQzKLbRf13FxfOXpeEYIpOEK.2i1HP0:15491:0:99999:7::: user99:$6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt:15491:0:99999:7::: 解法 調べてみるとlinuxのユーザーパスワードだと分かる。/etc/shadowで調べたら出てくる。 :で各フィールドが区切られていて、第一フィールドがユーザー名、第二フィールドがパスワードのハッシュである。 $6$なのでハッシュ方式はsha2だ。 johnという名前からjohn the ripperという有名なパスワードクラッキングツールを使うのだろう。 辞書ファイルをどうしようかと思ったが、幸いなことに最後の行にこう書かれている。 $6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt 辞書をダウンロードしてきてjohn the ripperを試す。 [vagrant@kali] ~/projects/ctf/ksnctf/16 # $ /usr/sbin/john --wordlist=dicti0nary_8Th64ikELWEsZFrf.txt shadow ... HELD (user10) ADDITIONAL (user02) QUESTION (user16) SPIRITS (user06) DELIGHT (user20) __________ (user04) GENDER (user03) FREQUENT (user00) SUFFERS (user11) zecht (user14) applies (user05) LATTER (user01) LEAVE (user12) .

ksnctf: #25 reserved

  • ctf
問題 length q chr uc and print chr ord uc qw q flock q and print chr oct ord q or no and print chr ord uc q each ne and print chr ord uc qw q gt q and print chr oct hex ord uc q my m and print chr ord uc q each ne and print chr ord qw q sin q and print chr oct ord uc q each le and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr ord qw q ge q and print chr ord uc q eval le and print chr ord uc qw q sin q and print chr ord uc qw q no q and print chr ord qw q use q and print chr ord q mkdir m and print chr ord q each le and print chr ord q pop and print chr oct ord q open no and print chr ord q eval le and print chr ord q eval le and print chr oct hex ord uc q gt log and print chr ord q q eq and print chr ord q q eq and print chr ord q q q and print chr ord qq q q and print chr ord uc q lt eval and print chr ord q chr lc and print chr ord q map m and print chr ord qw q ne q and print chr ord q mkdir m and print chr ord q q q and print chr ord q my alarm and print chr ord q pop and print chr ord qw q uc q and print chr oct oct ord uc qw q bind q and print chr ord q q eq and print chr ord q split s and print chr ord q open do and print chr ord q ge log and print chr ord qw q not q and print chr ord q oct no and print chr ord q xor x and print chr ord qw q die q and print chr ord q ne sin and print chr oct oct ord uc qw q fork q

ksnctf: #8 basic is secure?

  • ctf
問題 http://ksnctf.sweetduet.info/q/8/q8.pcap 解法 basicと言っているのでベーシック認証なのだろう。 pcapファイルをwiresharkで開く。 2回分の通信しかない短い記録なので上から見ていく。 二つ目のTCPストリームを見るとbasic 認証を通っているのが分かる。 GET /~q8/ HTTP/1.1 Host: ctfq.sweetduet.info:10080 Connection: keep-alive Authorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dB User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3 HTTP/1.1 200 OK Date: Sat, 26 May 2012 20:54:05 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Sat, 26 May 2012 12:24:46 GMT ETag: "422da-b8-4c0ef920b3f8e" Accept-Ranges: bytes Content-Length: 184 Connection: close Content-Type: text/html; charset=UTF-8 <!

ksnctf #10 #!

  • ctf
問題 What’s this? ↓ #!/usr/bin/python print "Hello world" The flag is FLAG_S?????? (in capital letters). 解法 shellscriptの先頭にあるおまじないの名称。 ググり力が試される。 「shellscript 先頭」で調べたら出て来た。 https://moneyforward.com/engineers_blog/2015/05/21/bash-script-tips/ flag FLAG_SHEBANG point 471

ksnctf: #7 programing

  • ctf
問題 http://ksnctf.sweetduet.info/q/7/program.cpp 解法 c++コードが渡される。 インデントが崩れていて読めないけど、コンパイルは通る。 実行するとFROG_This_is_wrong_:(となった。 で、実はこれC++ではなくてwhitespaceという言語。 覚えていたからいいけど、初見だと分からないと思う。スペースとタブが混じっているところから気づくのかな? まあ分かってしまえばインタプリタを探して実行するだけなんだけど、このインタプリタがなかなか見つからない! いやいっぱいあるんだけどまともに動くのがない。 とりあえずいかのものがまともに動いた。 https://github.com/hostilefork/whitespacers のC言語版 http://ws2js.luilak.net/interpreter.html https://whitespace.kauaveel.ee/ 実行するとPINコードを求められる。 PIN: 一番最後のインタプリタはアセンブリぽいコードを表示してくれてさらにステップ実行出来るのでこれで見ると、PINが33355524だと分かる。 入力するとflagが出て来た。 flag FLAG_EmTx6FTbGLieiMcA point 451

ksnctf: #6 login

  • ctf
問題 http://ctfq.sweetduet.info:10080/~q6/ 解法 開くとLoginページ。adminで入れとのこと。 まあSQLインジェクションだろう。 ID: admin Pass: ' OR 1=1 -- であっさり入れた。 Congratulations! It's too easy? Don't worry. The flag is admin's password. Hint: <?php function h($s){return htmlspecialchars($s,ENT_QUOTES,'UTF-8');} $id = isset($_POST['id']) ? $_POST['id'] : ''; $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; $login = false; $err = ''; if ($id!=='') { $db = new PDO('sqlite:database.db'); $r = $db->query("SELECT * FROM user WHERE id='$id' AND pass='$pass'"); $login = $r && $r->fetch(); if (!