{"id":363,"date":"2023-09-15T19:58:56","date_gmt":"2023-09-15T19:58:56","guid":{"rendered":"https:\/\/d-mashina.net\/?p=363"},"modified":"2023-09-15T19:58:56","modified_gmt":"2023-09-15T19:58:56","slug":"ctf-ranges-io-ali-koliko-vem-o-forenziki-kriptografiji-in-varnosti","status":"publish","type":"post","link":"https:\/\/d-mashina.net\/index.php\/2023\/09\/15\/ctf-ranges-io-ali-koliko-vem-o-forenziki-kriptografiji-in-varnosti\/","title":{"rendered":"CTF &#8211; ranges.io ali koliko vem o forenziki, kriptografiji in varnosti &#8230;"},"content":{"rendered":"<p>Zanimiv CTF, \u017ee najla\u017eje naloge so na medium te\u017eavnosti. Re\u0161il sem jih kar nekaj. Potrebno je zelo dobro poznavanje Linux sistemov in ukazov kot so:<\/p>\n<p><strong>strace, strings, lsof, nc<\/strong> &#8230; razli\u010dnih orodij kot so <strong>john, radare2, binwalk, nmap,<\/strong> &#8230; seveda je nuja imeti <strong>Kali Linux<\/strong> oz. podoben OS v virtalki, da se preko nje re\u0161ujejo naloge.<\/p>\n<p>Na spletu je ogromno materialov, kako re\u0161evati naloge, kako izgledajo naloge. Zelo uporabna je stran:<\/p>\n<p><a href=\"https:\/\/github.com\/9p4\/cyber-camp-2020-writeup\/tree\/master\">https:\/\/github.com\/9p4\/cyber-camp-2020-writeup\/tree\/master<\/a> (naloge na tej strani so enostavne).<\/p>\n<p>Zanimiva naloga je bila tale; odpre se spletna stran z <strong>Log In (username \/ password)<\/strong>. Na za\u010detku sem pogledal izvorno kodo strani:<\/p>\n<blockquote><p>&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;title&gt; Log Me In&lt;\/title&gt;<br \/>\n&lt;script src=&#8221;js\/jquery-3.4.1.min.js&#8221;&gt;&lt;\/script&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;div&gt;<br \/>\n&lt;h1&gt;Log Me In&lt;\/h1&gt;<br \/>\n&lt;form&gt;<br \/>\n&lt;label for=&#8221;username&#8221;&gt;Username: &lt;\/label&gt;<br \/>\n&lt;input type=&#8221;text&#8221; id=&#8221;username&#8221; class=&#8221;username&#8221; name=&#8221;username&#8221; \/&gt;&lt;br&gt;<br \/>\n&lt;label for=&#8221;password&#8221;&gt;Password: &lt;\/label&gt;<br \/>\n&lt;input type=&#8221;password&#8221; id=&#8221;password&#8221; class=&#8221;password&#8221; name=&#8221;password&#8221; \/&gt;&lt;br&gt;<br \/>\n&lt;input type=&#8221;submit&#8221; id=&#8221;submit&#8221; class=&#8221;submit&#8221; value=&#8221;Submit&#8221; type=&#8221;button&#8221; \/&gt;<br \/>\n&lt;\/form&gt;<br \/>\n&lt;div id=&#8221;output&#8221;&gt;&lt;\/div&gt;<br \/>\n&lt;\/div&gt;<br \/>\n&lt;script&gt;<br \/>\n$(document).ready(function() {<br \/>\n$(&#8220;#submit&#8221;).click(function(e) {<br \/>\ne.preventDefault();<br \/>\nvar user = $(&#8220;#username&#8221;).val();<br \/>\nvar pass = $(&#8220;#password&#8221;).val();<br \/>\nwords = [&#8220;vary&#8221;, &#8220;ends&#8221;, &#8220;broccoli&#8221;, &#8220;alike&#8221;]<br \/>\nif ((user === &#8220;admin&#8221;) &amp;&amp; (pass === words[1] + &#8220;-&#8221; + words[0] + &#8220;-&#8221; + words[3] + &#8220;-&#8221; + words[2])) {<br \/>\n$(&#8220;#output&#8221;).empty().append((function(){var P=Array.prototype.slice.call(arguments),S=P.shift();return P.reverse().map(function(B,c){return String.fromCharCode(B-S-29-c)}).join(&#8221;)})(6,155,145,116,150,140,72,97,141,134,144,105)+(10).toString(36).toLowerCase().split(&#8221;).map(function(f){return String.fromCharCode(f.charCodeAt()+(-13))}).join(&#8221;)+(35).toString(36).toLowerCase().split(&#8221;).map(function(q){return String.fromCharCode(q.charCodeAt()+(-39))}).join(&#8221;)+(function(){var U=Array.prototype.slice.call(arguments),W=U.shift();return U.reverse().map(function(T,B){return String.fromCharCode(T-W-49-B)}).join(&#8221;)})(54,214,211,218,182,174,204,208)+(30).toString(36).toLowerCase().split(&#8221;).map(function(e){return String.fromCharCode(e.charCodeAt()+(-39))}).join(&#8221;)+(1).toString(36).toLowerCase()+(function(){var H=Array.prototype.slice.call(arguments),k=H.shift();return H.reverse().map(function(I,N){return String.fromCharCode(I-k-14-N)}).join(&#8221;)})(29,92)+(324).toString(36).toLowerCase());<br \/>\n}<br \/>\n})<br \/>\n});<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>V izvorni kodi se tako vidi, da je geslo sestavljeno iz spremnljivke words:<\/p>\n<p><strong>if ((user === &#8220;admin&#8221;) &amp;&amp; (pass === words[1] + &#8220;-&#8221; + words[0] + &#8220;-&#8221; + words[3] + &#8220;-&#8221; + words[2]))<\/strong><\/p>\n<p>in da je pass potem pravilno zaporedje besed v spremeljivki words, ki ima vmes &#8220;-&#8220;:<\/p>\n<p><strong>words = [&#8220;vary&#8221;, &#8220;ends&#8221;, &#8220;broccoli&#8221;, &#8220;alike&#8221;]<\/strong><\/p>\n<p>Torej je pravilen rezultat beseda: <strong>ends-vary-alike-broccoli<\/strong><\/p>\n<p>Par nalog je bilo takih, da je bilo potrebno pogledati <strong>strings<\/strong> programa in se je besedna zveza za <strong>flag<\/strong> skrivala v stringsih oz. je v\u010dasih \u017ee deloval navaden <strong>cat<\/strong> ukaz, da si lahko izlu\u0161\u010dil besedilo za re\u0161itev. Naslednje naloge so bile bolj kriptografske narave, kjer je bilo potrebno pretvarjati med razli\u010dnimi stringi oz. najprej ugotoviti tip stringa. Tu je \u0161e nabolj v pomo\u010d pri\u0161el <a href=\"https:\/\/gchq.github.io\/CyberChef\/\"><strong>CyberChef<\/strong><\/a>.<\/p>\n<p>Naslednja zanimiva naloga je bila ti. <strong>EPOCH Time Converter<\/strong> (2 nalogi). V obeh nalogah je bilo potrebno priti do flaga. Prva je bila enostavna, saj sem kar hitro ugotovil da se v okence na spletni strani lahko vpisujejo Linux ukazi, katerim damo predpono ; (podpi\u010dje). Tako sem z ukazom <strong>;ls \/<\/strong> dobil imeni\u0161ko strukturo Linuxa OS, nato sem izvedel ukaz <strong>;ls -latrh \/<\/strong> in videl ukaz flag.txt ter enostavno izpisal vsebino flag.txt datoteke z ukazom <strong>;cat \/flag.txt<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-365\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochTimeConverter-300x173.png\" alt=\"\" width=\"300\" height=\"173\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochTimeConverter-300x173.png 300w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochTimeConverter.png 678w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Naslednja naloga z EPOCH Time Converterjem je bil zelo podobna: pri tej nalogi je bilo pomembno, da ne izbri\u0161emo predpone ukzaz, ki je v tem primeru bila EPOCH vrednost. Tako sem izvedel ukaz <strong>ls -ltrha \/<\/strong>, ki pa ni deloval, saj je javil, da ne prepozna &#8220;character&#8221;. Kmalu sem ugotovil, da je &#8220;character&#8221; presledek in \u017ee pred \u010dasom sem nekje prebral, da je oznaka za presledek <a href=\"https:\/\/www.baeldung.com\/linux\/ifs-shell-variable\"><strong>${IFS}<\/strong><\/a>. Tako sem ukaze kombiniral z oznako za preledek, s tem, da se je tukaj flag.txt nahajal v skritem imeniku &#8220;___&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-366\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Epoch2-300x217.png\" alt=\"\" width=\"300\" height=\"217\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Epoch2-300x217.png 300w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Epoch2.png 680w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> \u00a0\u00a0\u00a0\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-367\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochResitev-300x175.png\" alt=\"\" width=\"300\" height=\"175\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochResitev-300x175.png 300w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/EpochResitev.png 676w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Tako je kon\u010dni ukaz za prebrat flag.txt bil:<\/p>\n<p><strong>1349361711.169942&amp;&amp;cd${IFS}___&amp;&amp;cat${IFS}flag.txt<\/strong><\/p>\n<p>Sledile so naloge v stilu naredi nc na port in se poskusi prijaviti ipd.<\/p>\n<p>Sledila je \u0161e ena, kjer je bilo potrebno pregledati cookie, ki je bil md5 hash:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-371\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/SeEna-189x300.png\" alt=\"\" width=\"189\" height=\"300\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/SeEna-189x300.png 189w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/SeEna.png 476w\" sizes=\"auto, (max-width: 189px) 100vw, 189px\" \/><\/p>\n<p>Pri nekaterih se je dalo pomagati z <strong>&#8220;Buffer overflow&#8221;<\/strong>, nekaterih nisem re\u0161eval, saj CTF vzame kar precej \u010dasa, saj dogodek traja 48 ur.<\/p>\n<p>Enostavno, z majhno mero iznajdljivosti. \ud83d\ude00 Odli\u010dna izku\u0161nja, za naslednji\u010d vem kako deluje in bo tudi rezultat bolj\u0161i.<\/p>\n<p>Najte\u017eje naloge so zame bile, naloge v katerij je potrebno iz exe datoteke izlu\u0161\u010diti string. Orodij je ogromno in tukaj moje znanje \u0161e rahlo \u0161epa. V nalogi, kjer sem dobil datoteko, kjer je ukaz <strong>file imedatoteke<\/strong> izpisal, da je filetype DATA, sem sklepal, da je z datoteko nekaj narobe. Odprl sem jo z binwalk, ki mi ni povedal ni\u010d novega. Zato sem jo odprl v hexeditorju, kjer sem videl, da manjka zapis ELF, torej menjka header, kjer je zapisano, da je datoteka ELF executable.<\/p>\n<p>Torej manjka tole:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-377\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/1-3Ni7aPhW8CSVxYnDHbHqBQ-1-300x21.webp\" alt=\"\" width=\"300\" height=\"21\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/1-3Ni7aPhW8CSVxYnDHbHqBQ-1-300x21.webp 300w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/1-3Ni7aPhW8CSVxYnDHbHqBQ-1-768x54.webp 768w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/1-3Ni7aPhW8CSVxYnDHbHqBQ-1.webp 889w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>in to je potrebno vpisat v datoteko file. To lahko naredimo z recimo ghex editorjem, kar je rahlo nepregledno ali pa uporabimo xxd, da posortiramo vrstice v navadno TXT datoteko in dodamo ELF zapis:<\/p>\n<p><strong>xxd -c 16 -p file &gt; output<\/strong><\/p>\n<p>odpremo datoteko output in dodamo:<\/p>\n<p><strong>7f454c46020101000000000000000000<\/strong><\/p>\n<p>v prvo vrstico, ter datoteko shranimo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-379\" src=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Screenshot-2023-09-15-at-18.57.51-300x293.png\" alt=\"\" width=\"300\" height=\"293\" srcset=\"https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Screenshot-2023-09-15-at-18.57.51-300x293.png 300w, https:\/\/d-mashina.net\/wp-content\/uploads\/2023\/09\/Screenshot-2023-09-15-at-18.57.51.png 360w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Datoteko konvertiramo nazaj:<\/p>\n<p><strong>xxd -r -p output &gt; final<\/strong><\/p>\n<p>in preverimo ali imamo pravilen format oz. popravljeno datoteko:<\/p>\n<p><strong>file .\/final <\/strong><br \/>\n<strong>.\/final: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter \/lib64\/ld-linux-x86-64.so.2, for GNU\/Linux 3.2.0, BuildID[sha1]=d61ed43c5cdb98fa520d9ddad1c338d23ca0301d, not stripped<\/strong><\/p>\n<p>in dobimo \u017eeljen rezultat: <strong>Flag: headersAreImportANT91-91<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zanimiv CTF, \u017ee najla\u017eje naloge so na medium te\u017eavnosti. Re\u0161il sem jih kar nekaj. Potrebno je zelo dobro poznavanje Linux sistemov in ukazov kot so: strace, strings, lsof, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117,10],"tags":[],"class_list":["post-363","post","type-post","status-publish","format-standard","hentry","category-ctf","category-linux"],"_links":{"self":[{"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/posts\/363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/comments?post=363"}],"version-history":[{"count":8,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/posts\/363\/revisions"}],"predecessor-version":[{"id":380,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/posts\/363\/revisions\/380"}],"wp:attachment":[{"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/media?parent=363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/categories?post=363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mashina.net\/index.php\/wp-json\/wp\/v2\/tags?post=363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}