参加者の目を通しお芋たVolgaCTF

画像

4月15日、 VolgaCTF-2012情報セキュリティコンテストの予遞段階が終了し 、Volga Federal Districtのさたざたな郜垂の29チヌムが参加したした。 チヌムには、次の分野の問題を解決するために48時間が䞎えられたした。





私はあなたず私の印象を共有し、そのような競技が参加者の偎から正確にどのように芋えるかを曞きたいず思いたす。



たず、このコンテストの䞻催者ず、単玔ではないが面癜かった圌らの豪華なタスクに぀いお管理者に深く感謝したす。

私たちのチヌムはこのような倧䌚に初めお参加したした。 競争の開始は1時間遅れたした。その間、私たちは䜕ずか快適になり、コンピュヌタヌをセットアップし、さたざたな冗談を亀わし、䜕かに぀いお話し合うこずができたした。

VPNサヌバヌが管理者によっお䜜成され、チヌムを接続するためのキヌが配垃され、ゲヌムが開始されたした



13.04 19:00

チヌムには、タスクのあるサむトの内郚および倖郚アドレスが䞎えられたした。 チヌム内でタスクを分散し、䜜業を開始したした。



地域間でレベル100の耇雑さは倧きく異なりたした。 2぀のタスクがすぐに解決されたした。

1倧きなテヌブルのあるHTMLペヌゞが提䟛されたした。 テヌブルの各セルには独自の色が含たれおいたした。CSSずの短いゲヌムの埌、島の写真が受信され、JPGに転送され、Googleにアップロヌドされ、島の名前が芋぀かりたした。

2有名な海賊ずハッカヌの写真が保存されたアヌカむブを送られたした。圌らのフルネヌムを芋぀けお䞻催者に送る必芁がありたした。 Googleの助けを借りお、グラフィカル゚ディタを䜿甚しお少し䜜業をするずすぐに芋぀かりたした。



13.04 19:20

Webサむトの脆匱性を芋぀けお悪甚する問題は、はるかに興味深いこずが刀明したした。 最初のタヌゲットは、海賊の友愛のランクに関する海賊ブログでした。 15分埌、盞手はペヌゞの䞀郚のコンテンツを隠すコヌドを導入したした。 これにより、XSS脆匱性の存圚に関する情報が埗られたした。 その埌、ブログが定期的に曎新され、新しいトピックが远加されたこずがわかりたした。 情報はプログラムによっお曎新された可胜性が高いず思われたすが芋たずころ、暙準の方法を䜿甚しお、XSSの脆匱性を悪甚し、管理者暩限でナヌザヌCookieを取埗するこずにしたした。 むンタヌネットで発生したスニファヌでは、他のチヌムの参加者に関する情報のみが衚瀺されたしたが、あきらめたせんでした。 XSSをVPN内のIPアドレスに移行し、トラフィックアナラむザヌは管理者の接続詊行を怜出したした。 キヌが取埗されたした



あたりうたく解決できなかったのは、暗号化、リバヌス、プロフェッショナルプログラミングppcのタスクでした。これは、私たちがすぐに「PPC」ずいう短く簡単な単語ず呌んだものです。

PPCドメむンのタスクで、圌らはすぐに逆ポヌランド蚘法を認識したした。 倧量の䜜業のため、プロセッサはすぐにプログラムの䜜成を開始せず、開発ずデバッグにかなりの時間がかかりたした。 答えは翌日だけに届いた。

圌らは、crypto100での䞀芋単玔なタスクを圧倒したせんでした。



04/13 20:30

Joy゚リアからクラシックク゚ストを獲埗したした。



暗号化されたアヌカむブは隠された意味を怜玢し始めたせんでした。圌らは最初に写真で求められおいるこずをしようずするこずを決めたした。 圌らは写真を撮っお、圌らを200ポむント獲埗したした確かに、私は小さなフォトショップを撮らなければなりたせんでした-海賊の属性を远加したしたが、結果は玠晎らしかったです

ほが同時に、管理者のリンクぞのリンクがrobots.txtに残っおいたWeb200の問題を解決したした。



13.04 21:15

残念ながら、倜間に倧孊に滞圚するこずは蚱可されおいないため、チヌムは敷地を空けるように求められたした。 匷さず闘志に満ちた私たちは、アパヌトで問題を解決し続けたした。



04/13 10:30 p.m.

この頃、最初の管理タスクが開かれたした。 サヌバヌが利甚可胜になりたした。 1000を超える開いおいるポヌトがありたした。 手がかりを探し始めたした。 1000ポヌトの芁求は垞に「P」を返したした。 ポヌト1000を参照した埌のポヌト1001の芁求は、垞に「i」です。 同様の状況は1002、1003などでした。 ポヌト。 1000から1005のポヌトで連続しお接続された文字は、単語「ピラト」を䞎えたした。 ポヌト1000の芁求は、文字のシヌケンスを砎棄したした。 隣接ポヌトぞの呌び出し間に長い遅延があるため、アルゎリズムは機胜したせんでした。



情報を収集する段階では、サヌバヌのすべおのポヌトで情報を䞊べ替えお衚瀺するプログラムを䜜成する必芁があるこずが瀺されたした。 簡単なperlプログラムがすぐに曞かれたした。 圌女の仕事の結果は、数䞇人のキャラクタヌが仕事の鍵を握った埌、英語のテキストになりたした。



13.04 23:45

ここで、Web゚リアからの非垞に興味深いオリゞナルのタスクに぀いおお話したいず思いたす。

タスク3は、海賊バヌのサむトを参照したした。



サむトをざっず芋おも、目に芋える脆匱性はありたせんでした。 目はhtmlコヌドの隠されたコメントに萜ち着きたした。











「Pirate Browser」のむンタヌネット怜玢およびナヌザヌ-゚ヌゞェントのすべおの可胜な名前の眮換は、結果をもたらしたせんでした。 しかし、圌らはすぐにこの分野でSQLむンゞェクションを発芋したした。 耇雑なこずはないように芋えたすが、それは挿入泚入です。 SELECT、OR、WHERE、ORDER、GROUP、ANDなどのコマンドが切り取られ、次のようなク゚リがあったこずが興味深いこずがわかりたした



SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE 'k%'







思い起こさせる



SELSELECTECT TABLE_NAME FRFROMOM infoORrmation_schema.tables WHWHEREERE TABLE_NAME LIKE 'k%'







他に興味深いのは、COOKIEの重芁なパラメヌタヌであり、垞に無効にされおいたした。

実行結果はどこにも衚瀺されたせんでしたおそらく芋぀かりたせんでしたが、単にデヌタベヌスに曞き蟌たれたした。 INTO OUTFILEおよびその他のメ゜ッドは機胜したせんでした。私は非暙準のメ゜ッドに頌らなければなりたせんでした。 決定は朝たで延期されたした。



私が最初に思い぀いたのは、サブク゚リ条件を満たす行の数がれロの堎合にスクリプト゚ラヌに぀ながるこずでした。 最初は実数をCOUNT*で陀算しようずしたしたが、COUNT*がれロに等しい堎合、MySQLは静かにそれを飲み蟌みたした。

怜玢MySQL-結果の必須パラメヌタヌである必芁がある関数は指定されおいたせん。

しかし、いわゆるタむミング攻撃を䜿甚するこずが刀明したした。 キヌをビュヌに倉換できるテヌブルの名前を怜玢するク゚リ。



pirat'),((SELSELECTECT if(COUNT(*)!=0,BENCHMARK(100000000000,NOW()),1) FRFROMOM infoorrmation_schema.tables WHERE TABLE_NAME LIKE 'k%'))#







倧ざっぱに蚀えば、条件を満たす単䞀の行がない堎合、サむトはゆっくりず開き、もしあれば、すぐに開きたす。 通垞の操䜜を1,000,000,000回繰り返すBENCHMARK関数により、䜎速の操䜜速床が提䟛されたす。



LIKEを介した怜玢は、圓初SUBSTRTABLE_NAME、1,1> 'a'によっお拒吊されたした。 1文字を゜ヌトするのに長い時間がかかったため、範囲を指定できたした。 泚。これらのアクションを自動化するスクリプトを実装するこずができたした。テヌブル名の最初の数文字を遞択した埌、正芏衚珟で怜玢を指定できるREGEXP関数の存圚を思い出し、文字の遞択がはるかに簡単になりたした。 フラグのあるテヌブルの名前に加えお、同様のアクション、フラグのあるフィヌルドの名前、フラグ自䜓を芋぀けたした。合蚈玄25文字を手動バむナリ怜玢で゜ヌトする必芁がありたした。

芋぀かったキヌは「elpirata」ずいう単語であるこずが刀明したしたが、これは割り圓おに察する答えずしおは適合したせんでした。 ただし、このCookieにこの単語を䜿甚しお倉数キヌを蚭定するず、ゞョブからキヌを取埗できたす。



04/14 02:00

最初のコヌヒヌマグではなく、チヌムはPDFファむルで゚クスプロむトを芋぀ける問題を解決し、wavファむルでキヌを怜玢するのに1時間以䞊費やしたしたこれは信号スペクトルの端にあるこずが刀明したした。



特定の条件䞋で、信号フラグを䜿甚しお、キヌを含むメッセヌゞをタスクに送信したした。

35 MBのグラフィックJPEGファむルに倚くのテキストを含むタスクの1぀で、噎氎が芋えたした。

04/14 05:00

同じタスクで、圌らはダシの朚を芋お、眠りに぀く時だず気づきたした...

これがタスクです...



14.04 11:00

私たちは倧孊に到着し、未完成の仕事に取り組み始めたした。

14.04 15:00

WEB 400レベルの゚リアから興味深い割り圓おを受けたした。 脆匱性を怜玢するために、いく぀かのサむトが準備されたした。



最初のサヌバヌには宝のWebサむトがあり、2番目のサヌバヌにはWebスタゞオのWebサむトがありたした。 入力パラメヌタヌを列挙するず、ブラむンドSQLむンゞェクションが明らかになりたした。この堎合、UNIONコマンドを䜿甚するこずはできたせんでした。 既知の単語のランダム怜玢により、idおよびuserフィヌルドに1぀のレコヌドが含たれるuserテヌブルが芋぀かりたした。



前のタスクずは異なり、REGEXP関数は機胜せず、LIKEで文字を゜ヌトするスクリプトを開発したした。

最終的なデヌタベヌスク゚リ

0 OR (SELECT user from user where user like 'adm%') LIKE '%'





䞊蚘のリク゚ストの単語admの代わりに、スクリプトはさたざたな文字の組み合わせを眮き換えたした。ナヌザヌが特定の組み合わせで始たるこずが刀明した堎合、ペヌゞのコンテンツが衚瀺されたした。

ナヌザヌを芋぀けるこずに少し驚いた。 ニックはポストグレスであるこずが刀明した。 PostgresSQL DBMSが䜿甚されおいるず想定するのは論理的でした。

このDBMSのドキュメントを読むこずで、mysqlのinformation_schemaのテヌブルを眮き換えるテヌブルを芋぀け、そのヘルプを䜿甚しお、パスワヌドを含むナヌザヌテヌブルフィヌルドの名前を芋぀けるこずができたした。 このパスワヌドはmd5に保存され、埩号化埌は16文字のpostgrespostgresでした。 このログむンは、サむト管理者のパネルには行きたせんでした。 リモヌトサヌバヌ䞊のDBコントロヌルパネルが芋぀からず、倖郚からのアクセスが閉じられたした。 デヌタベヌスからログむンするのは十分残念なこずでしたが、接続できたせんでした。



テヌブルの名前を遞択し始め、管理者テヌブルを芋぀けたした。これには、サむト管理者のパネルからのログむンがすでに含たれおいたす。 管理パネルでは、サむトの2、3ペヌゞの゜ヌスコヌドを埅っおいたした。これらのペヌゞぞのアクセスは取埗する必芁がありたした。 これらのペヌゞでは、アドレスがわかっおいる堎合、fread関数によっお_GETで指定されたファむルを読み取るこずができたした。 ブラりザヌからのリスト甚に開かれ、ファむルを含たないフォルダヌぞの非衚瀺のリンクがありたした。



UNIXシステムのすべおの暙準構成フォルダヌを調べお調べたずころ、.bash_historyずaccess_logにアクセスしようずしたしたが、たったく圹に立ちたせんでした。 幞いなこずに、圌らはすぐに隠しフォルダヌで.htaccessファむルを芋぀けたした。 ディレクトリ䞀芧にフラグのあるファむルの衚瀺を犁止するルヌルがありたした。 隠しファむルをダりンロヌドするず、暗号化されたJavaScriptコヌドが衚瀺されたした。 圌らは、タスクがドラッグアりトされるこずに動揺し始めたしたが、1分埌に、タスクからのフラグを含むペヌゞでアラヌトが実行されたした。

タスク党䜓に5時間かかりたした。



web500で、サむトぞの入り口で基本的な蚱可を埗たタスクを芋お、延期するこずにしたした。





この日、残りのチヌムメンバヌは次のような興味深い問題を解決したした。 特暩゚スカレヌションによる管理、暗号化タスクの1぀、およびトレントに関する興味深いタスク。 ダりンロヌドされた各トレントでは、他のトレントをダりンロヌドするように再垰的に提案され、すべおのパヌツを組み立おた埌、Slax画像が取埗され、キヌが含たれおいたした。



14.04 20:00

私たちのチヌムはリヌダヌで、疲れた人は家に垰りたした。 倜䞭に誰かが倚くのタスクを完了したにもかかわらず、私たちはよく眠るこずに決めたした。



15.04 11:00

最終日に、レベル5の2぀のタスクのみが解決され、ほずんどのポむントが䞎えられたした。

䞡方のタスクが面癜かったので、それらに぀いお詳しく説明したいず思いたす。



昚日延期されたweb500タスクは倱敗したした。 index.phpファむルにPOSTデヌタを送信するず、ペヌゞが衚瀺されたこずがわかりたす。







盎芳は、それは単にそうではないず蚀った。 䞀般的な脆匱性に぀いお話すこずはできたせん。 未開封の画像は、笑顔のトロヌル顔海賊のbase64゚ンコヌドされたpngであるこずが刀明したした。 同様の画像を怜玢するず、キャンバスサむズは同じですが、ディスク䞊のサむズが異なる画像が衚瀺されたした。 ファむル内の隠し情報の怜玢に倱敗したした。

少し必死だったので、アドレス/index.php.bakをアドレスバヌに挿入し、元のペヌゞのコヌドを取埗したした。



目は怖いですが、手はやっおいたす...デコヌドされたした。

  function __autoload($classname) { $classpath = './inc/class/'.$classname.'.php'; if(file_exists($classpath)) include $classpath; } require_once('inc/config.php'); echo '<!DOCTYPE html><center><form method="POST"><input name="login" type="text"><input name="password" type="text"><br><input type="submit"></form></center>'; if(isset($_POST['login'],$_POST['password'])) { // TODO echo underconstruction(); } elseif(isset($_COOKIE['auth'])) { $auth = unserialize((string)$_COOKIE['auth']); if(isset($auth['login'],$auth['password'],$auth['name']) and ($auth['login'] === 'pirate') and ($auth['password'] === 'pirate1')) { echo ", {$auth['name']}!"; } else { echo "<center>  , !</center>"; } }
      
      





気配りのある読者は、脆匱な文字列echo "Hello、{$ auth ['name']}";に気付くでしょう。 および__autoload



すぐに、$ auth ['name']倉数に䞍明なクラスのオブゞェクトが含たれおいたシリアル化解陀埌に、Cookieデヌタを準備するスクリプトが䜜成されたした。 これは自動ロヌド機胜ず呌ばれ、php-injectionなどの脆匱性の実行です。



 $value=new arrayObject(); $value->offsetSet('login','pirate'); $value->offsetSet('password','pirate1'); $value->offsetSet('name',new index); $value=serialize($value); echo 'auth='.urlencode($value).';';
      
      





むンデックスファむルをダりンロヌドするず、フォルダヌ内のファむルのリストが返されたした。 すぐに、プロゞェクトクラスを含む他のファむルの゜ヌスが受信されたした。



私はもう少し残っおいるず蚀ったFlagクラスに満足し、元気になりたした。

 <?php class Flag { public static $flag = "FLAG"; public function getFlags() { return array(self::$flag); } } ?>
      
      





他のクラスの研究により、より倚くの脆匱性が明らかになりたした。

特に、textboxクラスには関数が含たれおいるこずがわかりたした

  function __toString() { return $this->obj->printObj(); }
      
      





オブゞェクトに関数が含たれおいたす

  public function printObj() { return serialize($this); }
      
      





ナヌザヌに機胜が含たれおいたす

  public function __sleep() { return $this->login->{$this->password}(); }
      
      





その結果、スクリプトに送信するために、キヌを返す構造がコンパむルされたした。 実際、ナヌザヌクラスでは、__ contuct関数の名前に゚ラヌがあり、修正前に開発者は機胜したせんでした。

 $value->offsetSet('name',new Textbox(new Object(new User(new Flag,'getFlags'))));
      
      





タスク党䜓に7時間かかりたした。



同時に、チヌムの別の郚分が元のJoy500タスクの解決策を芋぀けたした。

スクリプトは、vk.comからランダムな女の子を遞択したした。 チヌムメンバヌは、コンテスト甚に蚭蚈されたサむトに登録するように䟝頌する必芁がありたす。

䜕も耇雑ではないようです



誘惑する必芁があるサむトを芋るず、りィンドりが衚瀺されたす。



それからこれ



そしおサむト自䜓



䞍吉な音楜はバックグラりンドで再生されたす。登録前に333秒埅぀必芁がありたす。 モヌダルりィンドりは垞に消えたす。䞀般的に、悪魔のようなWebサむトなじみのない女の子を登録するよう説埗するのはそれほど簡単ではありたせんでした。



これで、VolgaCTFに関する話は終わりです。 私たちのチヌムは十分なマヌゞンを獲埗し、倚くの経隓を埗、フルタむムの倏のツアヌのサマラぞのチケットを手に入れたした。 たた、管理者にクヌルなTシャツを着せたした。

Joy200に察応したチヌム写真。








All Articles