Jekyll2023-09-26T21:31:55+00:00https://www.aucyberclub.org/feed.xmlAnkara University Cyber ClubAnkara University Cyber Club, Ekim 2016'da Ankara Üniversitesi Bilgisayar Mühendisliği Bölümü’nde kurulmuş olup hacker etiğini ve kültürünü benimseyerek bilgi güvenliği farkındalığı oluşturmayı, üretmeyi ve bilgisini paylaşmayı hedeflemektedir.
Prototype Pollution2023-01-31T08:17:00+00:002023-01-31T08:17:00+00:00https://www.aucyberclub.org/makaleler/2023/01/31/prototypepollution<h1 id="prototype-pollution">Prototype Pollution</h1>
<p>Yazının medium’daki haline ulaşmak için -> <a href="https://jeustache.medium.com/prototype-pollution-a585e40e004a">Buraya tıklayınız</a></p>
<p><img src="https://miro.medium.com/max/700/0*gfpBhKEzd7YF6mYb.jpeg" alt="img" /></p>
<p>Prototype Pollution son yıllarda git gide daha çok karşımıza çıkan, duruma göre client-side’a XSS veya arka planda RCE tetikleyebilen bir zafiyettir. Bu yazıda çok genel ve basit bir şekilde bu zafiyeti anlatmaya çalışacağım. Yazının başında Prototype Pollution’un çalışma ve exploit edilme mantığını anlatırken sonlarına doğru ise gördüğüm hazır lab’lardan veya katıldığım CTF’lerden bulduğum örnekleri inceleyeceğim.</p>
<p>Prototype Pollution front-end’de pure javascript veya Angular, React, Vue.js gibi framework’lerin içinde karşımıza çıkabilir. Bu durumda genellikle DOM-XSS tetiklenir. Fakat bazı durumlarda back-end nodejs veya türevi bir yapı olduğu zaman back-end’de de tetiklebilir. Bu gibi durumlarda RCE gibi bir durum da oluşabilir.</p>
<p>JavaScript prototypal inheritance model kullanır. Bu yapı aslında günün sonunda herhangi bir class’tan bir obje oluşturulduğunda onun inherit aldığı başka bir class’ın olmasını sağlar. Örnek olarak herhangi bir string tanımladığımızda bu string String.prototype’dan inherit olur. Inherit’in tanımından da bildiğimiz gibi parent objesinin property ve method’larını alır. Dolayısıyla herhangi bir string String.prototype’ın sahip olduğu toLowerCase() method’una sahip olur.</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">myObject</span> <span class="o">=</span> <span class="p">{};</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">getPrototypeOf</span><span class="p">(</span><span class="nx">myObject</span><span class="p">);</span> <span class="c1">// Object.prototype</span>
<span class="kd">let</span> <span class="nx">myString</span> <span class="o">=</span> <span class="dl">""</span><span class="p">;</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">getPrototypeOf</span><span class="p">(</span><span class="nx">myString</span><span class="p">);</span> <span class="c1">// String.prototype</span>
<span class="kd">let</span> <span class="nx">myArray</span> <span class="o">=</span> <span class="p">[];</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">getPrototypeOf</span><span class="p">(</span><span class="nx">myArray</span><span class="p">);</span> <span class="c1">// Array.prototype</span>
<span class="kd">let</span> <span class="nx">myNumber</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">getPrototypeOf</span><span class="p">(</span><span class="nx">myNumber</span><span class="p">);</span> <span class="c1">// Number.prototype</span>
</code></pre></div></div>
<p>Herhangi bir objenin property’si çağrıldığı zaman öncellikle objenin kendi property’lerine bakılır. Orada yoksa bir üst inherit aldığı prototype’ınınkilere bakılır. Tabii yapı gereği prototype alınan class’ın da prototype’ı olabilir. Bu yapı bir chain yaratır.</p>
<p><img src="https://miro.medium.com/max/668/1*z1Tv0vH9fJhzeFZPs9p45Q.png" alt="img" /></p>
<p>Yine aynı yapıda objelerin prototype’ına aşağıdaki gibi ulaşılabilir.</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">username</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">;</span>
<span class="nx">username</span><span class="p">[</span><span class="dl">'</span><span class="s1">__proto__</span><span class="dl">'</span><span class="p">];</span>
<span class="nx">username</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">;</span> <span class="c1">// String.prototype</span>
<span class="nx">username</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">;</span> <span class="c1">// Object.prototype</span>
<span class="nx">username</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">.</span><span class="nx">__proto__</span><span class="p">;</span> <span class="c1">// null</span>
</code></pre></div></div>
<p>Client-Side’da karşımıza çıkan ve genellikle DOM-XSS ile sonuçlanan Prototype Pollution’da JavaScript kullanıcıdan gelen input’u bir objeyle birleştirir. Bu sayade saldırgan <strong>proto</strong> gibi bir kullanım ile isteği yeri override etmeye çalışır. Bu da genellikle tüm objelerin inherit aldığı Object.prototype olur.</p>
<p>Back-end tarafında ise yine aynı şekilde node-js gibi backend’lerde duruma göre <strong>proto</strong> aracılığı ile direk OS modülleri veya child process açıp orada komut çalıştırma gibi saldırı vektörleri kullanılabilir.</p>
<p><img src="https://miro.medium.com/max/626/0*XmamdDNyvC-jA1cy.gif" alt="img" /></p>
<p><strong>Örnekler üzerinden Prototype Pollution</strong></p>
<p>Lab : DOM XSS via client-side prototype pollution</p>
<p>Deneme yanılma yaparken direkt URL’e <strong>proto</strong> vererek basit bir deneme yapıyoruz.</p>
<p><img src="https://miro.medium.com/max/700/1*sE-AlY_u0i11Z8CfyoX4JQ.png" alt="img" /></p>
<p>/?<strong>proto</strong>[can]=oztas</p>
<p><img src="https://miro.medium.com/max/700/1*EHc3OPcxRq3N6KlyqhH-kA.png" alt="img" /></p>
<p>Client-side’da Object.prototype çağırarak aslında bu özellikleri override edebildiğimizi doğruluyoruz.</p>
<p>Aslında tam bu anda kelimenin anlamından da gelen prototype’ı kirletmeyi başardık. Fakat bunun bir etkisi olması için client-side’daki DOM’a bir şeyler yapmamız gerekiyor. Sonuç olarak Client-Side JavaScripti daha iyi anlamamız gerekiyor.</p>
<p><img src="https://miro.medium.com/max/700/1*-l5EFwORiX65kNN1EbRr0Q.png" alt="img" /></p>
<p>Ön tarafı detaylı incelediğimiz zaman iki şey dikkatimiz çekiyor. öncelikle searchLogger.js içinde document.body’ye bir append yapılıyor. Ve bu append config objesinin transport_url property’sindeki değeri append ediyor. Biz bulduğumuz bu pollution ile transport_url’i override ettiğimiz zaman aslında DOM’a eklenen obje kullanıcının Prototype Pollute ettiği obje olacak. En basit haliyle ile bir DOM-XSS tetikleyeceğiz.</p>
<p>/?<strong>proto</strong>[transport_url]=data:,alert(1);</p>
<p><img src="https://miro.medium.com/max/485/1*63t7Fm8v9y7ZMKPMzPoh9w.png" alt="img" /></p>
<p>Hack The Box Web Challenge: Breaking Grad</p>
<p>Statik olarak baktığımızda router’ların iki tane endpointi olduğunu görüyoruz. /debug/:action ve /api/calculate</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">randomize</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">randomatic</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">path</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">express</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">express</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">router</span> <span class="o">=</span> <span class="nx">express</span><span class="p">.</span><span class="nx">Router</span><span class="p">();</span>
<span class="kd">const</span> <span class="nx">StudentHelper</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">../helpers/StudentHelper</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">ObjectHelper</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">../helpers/ObjectHelper</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">DebugHelper</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">../helpers/DebugHelper</span><span class="dl">'</span><span class="p">);</span>
<span class="nx">router</span><span class="p">.</span><span class="kd">get</span><span class="p">(</span><span class="dl">'</span><span class="s1">/</span><span class="dl">'</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">sendFile</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="dl">'</span><span class="s1">views/index.html</span><span class="dl">'</span><span class="p">));</span>
<span class="p">});</span>
<span class="nx">router</span><span class="p">.</span><span class="kd">get</span><span class="p">(</span><span class="dl">'</span><span class="s1">/debug/:action</span><span class="dl">'</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">DebugHelper</span><span class="p">.</span><span class="nx">execute</span><span class="p">(</span><span class="nx">res</span><span class="p">,</span> <span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">action</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">router</span><span class="p">.</span><span class="nx">post</span><span class="p">(</span><span class="dl">'</span><span class="s1">/api/calculate</span><span class="dl">'</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">student</span> <span class="o">=</span> <span class="nx">ObjectHelper</span><span class="p">.</span><span class="nx">clone</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">body</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">StudentHelper</span><span class="p">.</span><span class="nx">isDumb</span><span class="p">(</span><span class="nx">student</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="nx">StudentHelper</span><span class="p">.</span><span class="nx">hasBase</span><span class="p">(</span><span class="nx">student</span><span class="p">.</span><span class="nx">paper</span><span class="p">))</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">send</span><span class="p">({</span>
<span class="dl">'</span><span class="s1">pass</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">n</span><span class="dl">'</span> <span class="o">+</span> <span class="nx">randomize</span><span class="p">(</span><span class="dl">'</span><span class="s1">?</span><span class="dl">'</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="p">{</span><span class="na">chars</span><span class="p">:</span> <span class="dl">'</span><span class="s1">o0</span><span class="dl">'</span><span class="p">})</span> <span class="o">+</span> <span class="dl">'</span><span class="s1">pe</span><span class="dl">'</span>
<span class="p">});</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">send</span><span class="p">({</span>
<span class="dl">'</span><span class="s1">pass</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Passed</span><span class="dl">'</span>
<span class="p">});</span>
<span class="p">});</span>
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">router</span><span class="p">;</span>
</code></pre></div></div>
<p>/api/calculate/ /helpers/ObjectHelper ait bir obje kullanıyor. ObjectHelper’a baktığımızda ise</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">isObject</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="k">typeof</span> <span class="nx">obj</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">function</span><span class="dl">'</span> <span class="o">||</span> <span class="k">typeof</span> <span class="nx">obj</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">object</span><span class="dl">'</span><span class="p">;</span>
<span class="p">},</span>
<span class="nx">isValidKey</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">key</span> <span class="o">!==</span> <span class="dl">'</span><span class="s1">__proto__</span><span class="dl">'</span><span class="p">;</span>
<span class="p">},</span>
<span class="nx">merge</span><span class="p">(</span><span class="nx">target</span><span class="p">,</span> <span class="nx">source</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">key</span> <span class="k">in</span> <span class="nx">source</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">isValidKey</span><span class="p">(</span><span class="nx">key</span><span class="p">)){</span>
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">isObject</span><span class="p">(</span><span class="nx">target</span><span class="p">[</span><span class="nx">key</span><span class="p">])</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">isObject</span><span class="p">(</span><span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">]))</span> <span class="p">{</span>
<span class="k">this</span><span class="p">.</span><span class="nx">merge</span><span class="p">(</span><span class="nx">target</span><span class="p">[</span><span class="nx">key</span><span class="p">],</span> <span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">target</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nx">target</span><span class="p">;</span>
<span class="p">},</span>
<span class="nx">clone</span><span class="p">(</span><span class="nx">target</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">merge</span><span class="p">({},</span> <span class="nx">target</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<p>merge kısmı Prototype Pollution’a işaret ediyor. Aslında POST gelen JSON</p>
<p><em>{ ‘<strong>proto</strong>’: { ‘target_property’: ‘value’ } }</em></p>
<p>olduğunda</p>
<p><em>source.<strong>proto</strong>.target_property = ‘value’;</em></p>
<p>olmuş olacak<em>.</em> Bu endpoint üzerinden objelere erişebileceğimiz anlamında geliyor. Aynı zamanda bu seferki örnekte back-end’deyiz. Dolayısıyla os ve benzeri kütüphane varsa içeride bunu override edip sadece XSS değil RCE de düşünebiliriz.</p>
<p>Bu örnekte <strong>proto</strong>’nun banlı bir keyword olduğunu görüyoruz. Bunun yerine constructor.prototype kullanabiliriz.</p>
<p>DebugHelper.js’i incelediğimiz zaman ise</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="p">{</span> <span class="nx">execSync</span><span class="p">,</span> <span class="nx">fork</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">child_process</span><span class="dl">'</span><span class="p">);</span>
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">execute</span><span class="p">(</span><span class="nx">res</span><span class="p">,</span> <span class="nx">command</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">res</span><span class="p">.</span><span class="nx">type</span><span class="p">(</span><span class="dl">'</span><span class="s1">txt</span><span class="dl">'</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">command</span> <span class="o">==</span> <span class="dl">'</span><span class="s1">version</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">proc</span> <span class="o">=</span> <span class="nx">fork</span><span class="p">(</span><span class="dl">'</span><span class="s1">VersionCheck.js</span><span class="dl">'</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{</span>
<span class="na">stdio</span><span class="p">:</span> <span class="p">[</span><span class="dl">'</span><span class="s1">ignore</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">pipe</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">pipe</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">ipc</span><span class="dl">'</span><span class="p">]</span>
<span class="p">});</span>
<span class="nx">proc</span><span class="p">.</span><span class="nx">stderr</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">res</span><span class="p">);</span>
<span class="nx">proc</span><span class="p">.</span><span class="nx">stdout</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">res</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">command</span> <span class="o">==</span> <span class="dl">'</span><span class="s1">ram</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="nx">execSync</span><span class="p">(</span><span class="dl">'</span><span class="s1">free -m</span><span class="dl">'</span><span class="p">).</span><span class="nx">toString</span><span class="p">());</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="dl">'</span><span class="s1">invalid command</span><span class="dl">'</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<p>child_process açıldığını görüyoruz. Yani ilk endpointimize giden json</p>
<p>degisken.constructor.prototype olarak fork fonksiyonuna erişebilir. NodeJS fork’a bakınca</p>
<p><img src="https://miro.medium.com/max/700/1*rg8vFq1ow48H9DQGgCSYow.png" alt="img" /></p>
<p>böyle bir kullanımı olduğunu görüyoruz. Dolayısıyla JSON kabul eden endpointimize</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span>
<span class="dl">"</span><span class="s2">constructor</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
<span class="dl">"</span><span class="s2">prototype</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
<span class="dl">"</span><span class="s2">execPath</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">ls</span><span class="dl">"</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">execArgv</span><span class="dl">"</span><span class="p">:</span> <span class="p">[</span>
<span class="dl">"</span><span class="s2">-la</span><span class="dl">"</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">.</span><span class="dl">"</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<p>attığımız zaman karşı tarafta bir fork açılarak ls -la çalışacaktır.</p>
<p>Bamboo CTF 2021 Time to Draw</p>
<p>Son örneğimiz de 2021 Bamboo CTF’den olacak:</p>
<p>Burada userData.token değişkeni admin cookie’si olmadan undefined, yani biz bir üst class’ın token’ini override ettiğimiz zaman objemiz inherit alacağı için değeri ile beraber alacak. Prototype Pollution ile bunu manipüle etmiş olacağız.</p>
<p><img src="https://miro.medium.com/max/700/1*4tpHAamdu0rwtdQbCUElPg.png" alt="img" /></p>
<p>Tokenin aşağıdaki gibi oluştuğu bilgisine sahibiz, dolayısıyla kendimize ait custom token üretebiliriz.</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">></span> <span class="kd">var</span> <span class="nx">crypto</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">crypto</span><span class="dl">'</span><span class="p">);</span>
<span class="kc">undefined</span>
<span class="o">></span> <span class="kd">const</span> <span class="nx">hash</span> <span class="o">=</span> <span class="p">(</span><span class="nx">token</span><span class="p">)</span> <span class="o">=></span> <span class="nx">crypto</span><span class="p">.</span><span class="nx">createHash</span><span class="p">(</span><span class="dl">"</span><span class="s2">sha256</span><span class="dl">"</span><span class="p">).</span><span class="nx">update</span><span class="p">(</span><span class="nx">token</span><span class="p">).</span><span class="nx">digest</span><span class="p">(</span><span class="dl">'</span><span class="s1">hex</span><span class="dl">'</span><span class="p">);</span>
<span class="kc">undefined</span>
<span class="o">></span> <span class="nx">hash</span><span class="p">(</span><span class="dl">"</span><span class="s2">42.29.23.221234567890123456</span><span class="dl">"</span><span class="p">)</span>
<span class="dl">'</span><span class="s1">f6726c5dcd8635dd2ae8da8dcef74bdfca22c5a27e309ef7bec5f533a7b4ffb6</span><span class="dl">'</span>
<span class="o">></span>
</code></pre></div></div>
<p><img src="https://miro.medium.com/max/700/1*1w36p7Wzc_U4tGPqhni0Gw.png" alt="img" /></p>
<p>[<a href="https://eine.tistory.com/entry/BambooCTF-2021-web-SSRFrog-Time-to-Draw-write-up">BambooCTF 2021] web - SSRFrog, Time to Draw write-upSSRFrog If you see the view-source of html code, you can easily find the syntax below. FLAG is on this server…eine.tistory.com</a></p>
<p>Sonuç</p>
<p>Bu yazıda Türkçe literatür ve kaynaklarda pek karşılaşmadığım Prototype Pollution’ı bildiğim kadarıyla açıkladım. Yazının en sonunu genel olarak Prototype Pollution’a karşı alınabilecek önlemler ile bitireceğim:</p>
<ul>
<li>-> Prototype Pollution payload’ları input sanitasyon süreçlerine dahil edilmedi.</li>
<li>-> Recursive merge operasyonlarından elden geldikçe kaçınılmalı</li>
<li>-> Object.freeze() method’u kullanımı tavsiye edilmektedir. Freeze olmuş objelerin property create, remove gibi işlemleri olmayacağından Prototype Pollution riski azalmaktadır.</li>
<li>-> Objeleri prototype’sız yaratma seçeneği varsa tercih edilmeli, bu prototype chain yapısını da etkileyeceğinden Prototype Pollution riskini de azaltacaktır.</li>
</ul>
<p>kaynaklar:</p>
<p><a href="https://portswigger.net/web-security/prototype-pollution">Client-side prototype pollution-Web Security Academy</a></p>
<p><a href="https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution">“NodeJS.hacktricks.xyz</a></p>
<p><a href="https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce">Prototype Pollution to RCEprocess is spawned with some method from child_process (like fork or spawn or others) it calls the method…book.hacktricks.xyz</a></p>
<p><a href="https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution">Client Side Prototype Pollution🎙️ HackTricks LIVE Twitch Wednesdays 5.30pm (UTC) 🎙️ - 🎥 Youtube 🎥 Discovering using Automatic tools Finding the…book.hacktricks.xyz</a></p>
<p><a href="https://github.com/BlackFan/client-side-prototype-pollution">GitHub - BlackFan/client-side-prototype-pollution: Prototype Pollution and useful Script GadgetsIf you are unfamiliar with Prototype Pollution Attack, you should read the following first: JavaScript prototype…github.com</a></p>
<p><a href="https://medium.com/@zub3r.infosec/exploiting-prototype-pollutions-220f188438b2">Exploiting Prototype PollutionsIntroduction:medium.com</a></p>
<p>(https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)</p>
<hr />
<p><strong><a href="https://www.linkedin.com/in/can-oztas/">Can ÖZTAŞ</a></strong></p>Prototype Pollution Yazının medium’daki haline ulaşmak için -> Buraya tıklayınızDLL Injection Nedir?2022-11-25T19:26:47+00:002022-11-25T19:26:47+00:00https://www.aucyberclub.org/cybercamp/malware/2022/11/25/dll-injection-nedir<p>DLL injection, kötü amaçlı etkinliği meşru bir Windows işleminin altına enjekte ederek kendini kullanıcıdan ve sistemden gizleme yöntemidir. Kötü amaçlı yazılım, kurban cihazı kendi DLL’ini yüklemeye zorlar ve onu meşru, tamamen doğal görünen bir işlemin alt işlemi haline getirir. Kendisini gizlemesi için kullanacağı bu işlem svchost.exe veya explorer.exe gibi herhangi bir işlem olabilir.</p>
<p>Artık, kötü amaçlı yazılımların normal bir process’in altına bir subprocess enjekte edeceğini ve etkinliğini gizleyerek yakalanmaktan kaçınmaya çalışacağını biliyoruz. Ancak konuyu kavrayabilmek için öncelikle DLL’nin tam olarak ne olduğunu ve ne işe yaradığını anlamamız gerekir. Dynamic-Link Library’nin (Dinamik Bağlantı Kütüphanesi) kısaltması olan DLL, Windows uygulamalarının birden çok uygulama arasında kod paylaşması için Windows tarafından sunulan kütüphanelerdir.</p>
<p>Windows’taki her büyük program bazı temel işlemlere ihtiyaç duyar ve DLL tarafından sağlanan, önceden tanımlamış, daha küçük işlevleri kullanır. Bu açıdan bakıldığında, Windows’taki programların kullandığı DLL’ler, kodlamada kullanılan ve yazılımcının işini kolaylaştıran hazır kütüphanelere benzemektedir.</p>
<p>Hepimiz Windows API’ı (Uygulama Programlama Arayüzü) daha önce duymuşuzdur. İşte bu DLL’leri Windows API’ın en temel bloğu olarak düşünebilirsiniz. Örneğin:</p>
<ul>
<li>kernel32.dll — dosya ve klasörlere erişir ve
bunlar üzerinde değişiklik yapar.</li>
<li>gdi32.dll — grafikleri görüntülemek ve işlemek
için kullanılır.</li>
<li>wsock32.dll — internet ve ağ uygulamaları
tarafından ağ bağlantılarını işlemek için kullanılır.</li>
</ul>
<p><strong>Daha derine inersek:</strong></p>
<p>Kötü amaçlı yazılımlar, Windows API işlevlerini kullanarak DLL oluşturur veya kötü amaçlı DLL dosyasının yolunu bir process içine yazar. target.exe yürütüldüğünde, “target.exe” önceden tanımlanmış yollardan gerekli DLL’leri çağırır ve yükler. Bu sayede normal bir uygulama mal.dll’i çalıştıracak ve tamamen normal olan uygulamanın zararsız bir subprocess’i olarak gösterecektir.</p>
<p><img src="/CyberCamp/assets/dll-injection-nedir/image1.png" alt="" /></p>
<p>Yukarıdaki resimde gösterildiği gibi, target.exe içine kötü amaçlı DLL enjeksiyonunu gerçekleştirmekten sorumlu olacak bir <em>başlatıcı</em> dosyamız var. target.exe her yürütüldüğünde, mal.dll de yürütülür. Bu teknik, meşru bir işlem (bizim senaryomuzda target.exe) içerisine kötü amaçlı etkinlikleri gizlemek için kullanılan bir tekniktir.</p>
<p><strong>Nasıl yapılır?</strong></p>
<p>İşleme özel güvenlik duvarını atlamak ve target.exe’ye erişmek için belirli adımlar vardır.</p>
<p><strong>-Zararlı DLL’in yolunu hazırlama</strong></p>
<p><img src="/CyberCamp/assets/dll-injection-nedir/image2.png" alt="" /></p>
<p>İlk olarak, başlatıcı olarak adlandıracağımız kötü amaçlı yazılım, mevcut çalışma dizinini almak için <a href="https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcurrentdirectory">GetCurrentDirectory</a>’yi ve mal.dll’in yolunu hazırlamak için <a href="https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lstrcata">lstrcatA</a>’i kullanır.</p>
<p><strong>-Hedef işlemin PID’sini (işlem kimliğini) alma</strong></p>
<p><img src="/CyberCamp/assets/dll-injection-nedir/image3.png" alt="" /></p>
<p>Bir sonraki adım target.exe’nin process ID’sini almaktır. <a href="https://learn.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-enumprocesses">EnumProcesses</a> isimli fonksiyon sistemde her bir process objesinin process tanımlayıcısını alıp bunları bir dizide depolar, daha sonra <em>launcher</em> bu listede gezip “target.exe”yi bulana kadar karşılaştırma yapar ve “target.exe”ye atanmış doğru PID’yi bulana kadar döngüyü tekrar eder.</p>
<p><strong>-target.exe’ye ulaşmak için tanıtıcı edinme</strong></p>
<p>PID alındıktan sonra, bu PID, target.exe’ye bir tanıtıcı elde etmek için <a href="https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess">OpenProcess</a> işlevine parametre olarak kullanılabilir.</p>
<p><strong>-target.exe <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/virtual-address-spaces">sanal adres alanı</a> içinde bellek ayırma</strong></p>
<p><img src="/CyberCamp/assets/dll-injection-nedir/image4.png" alt="" /></p>
<p><a href="https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualallocex">VirtualAllocEx</a>- Bu işlev, önceki adımdan alınan tanıtıcı kullanarak target.exe içindeki belleği ayırır.</p>
<p><strong>-Yeni oluşturulan belleğe mal.dll’in tam yolunu yazma</strong></p>
<p><img src="/CyberCamp/assets/dll-injection-nedir/image5.png" alt="" /></p>
<p>Bu kodda, “Buffer” parametresi, mal.dll’in tam yolunu içeren bir dizeye işaret eder. lpBaseAddress yeni oluşturulan belleğin başlangıç noktasıdır ve hProcess, target.exe için bir tanıtıcı içerir. Buffer’ı lpBaseAddress‘e yazmak için <a href="https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory">WriteProcessMemory</a> işlevi çağırılır. Bu da mal.dll’in yolunun target.exe içine yazıldığı anlamına gelir. DLL dosyasını çalıştırmak için kernel32.dll’den <a href="https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya">LoadLibraryA</a> işlevi gereklidir, bu nedenle <a href="https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya">LoadLibraryA</a>‘in adresini manuel olarak çözer ve bir değişkene depolar.</p>
<p><strong>-Çalıştırma</strong></p>
<p>Son olarak, <a href="https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createremotethread">CreateRemoteThread</a> sanal adres alanında çalışan iş parçacığı oluşturucu çağrılır. Böylece target.exe ile mal.dll de çalıştırılmış olur.</p>
<p>Yukarıdaki örnek, DLL injection yöntemlerinden biridir ancak enjeksiyon farklı yollarla da gerçekleştirilebilmektedir.</p>
<h3 id="sources">Sources:</h3>
<ul>
<li><a href="https://vvelitkn.com/malware%20analysis/What-is-DLL-Injection/">What is DLL Injection?</a></li>
<li><a href="https://medium.com/malware-autopsy/dll-injection-f4b512cacaf4">Preet Kamal’s DLL Injection Article</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/win32/api/">Windows API Documantation</a></li>
<li><a href="https://cocomelonc.github.io/tutorial/2021/09/20/malware-injection-2.html">Further Information of DLL Injection by cocomelonc</a></li>
</ul>İsmail BaşaranDLL injection, kötü amaçlı etkinliği meşru bir Windows işleminin altına enjekte ederek kendini kullanıcıdan ve sistemden gizleme yöntemidir. Kötü amaçlı yazılım, kurban cihazı kendi DLL’ini yüklemeye zorlar ve onu meşru, tamamen doğal görünen bir işlemin alt işlemi haline getirir. Kendisini gizlemesi için kullanacağı bu işlem svchost.exe veya explorer.exe gibi herhangi bir işlem olabilir.Zararlı Yazılım (Malware) Nedir? Statik ve Dinamik Analizi2022-11-21T19:30:47+00:002022-11-21T19:30:47+00:00https://www.aucyberclub.org/cybercamp/malware/2022/11/21/Zararl%C4%B1-Yaz%C4%B1l%C4%B1m-Malware-Nedir-Statik-Dinamik-Analiz<p>Zararlı yazılım (Malicious Software aka Malware) siber tehtitler tarafından karşı tarafa zarar verme ya da karşı taraftan faydalanmak için üretilmiş yazılımlardır. Bir zararlı yazılımın bulaştırılması, karşı tarafta çalıştırılması ve saldıran taraf için avantaj elde edilmesini bir operasyon olarak nitelendirirsek, bu operasyonu gerçekleştiren siber tehtit unsurları amaçlarına ulaşmak için farklı yollar izleyebilirler.</p>
<h1 id="zararlı-yazılım-türleri-ve-konsepti-anlama">Zararlı Yazılım Türleri ve Konsepti Anlama</h1>
<p>Zararlı yazılımların, siber tehtit unsurlarının çıkarına olması yönünde türleri vardır:</p>
<ul>
<li><strong>Truva atı:</strong> Hepimiz eski Greko-Romen hikayelerinden duymuşuzdur “Truva Atı” kavramını. Aynı o hikayelerde olduğu gibi zararlı yazılım kendini gizleyerek, kendisini karşı tarafın fayda göreceği bir dosya gibi göstererek sisteme bulaşır.</li>
<li><strong>Worm</strong>: Genellikle e-posta ile gönderilen ekler, çeşitli web siteleri ve ağ üzerinde paylaşılan dosyaları kullanarak yayılırlar. Solucanlar, bir sistemi ele geçirdiklerinde, kullanıcının başka bir eylemine ihtiyaç duymadan, kullanıcının veri kaynaklarını kullanarak (e-posta adres listesi gibi) kendi kaynak dosyalarını hızlı bir şekilde diğer kullanıcılara da ulaştırmayı denerler ve bu yolla kendilerini çok fazla sayıda çoğaltabilirler.</li>
<li><strong>Spyware</strong>: Bilgisayar kullanıcısının kendi rızası ve/veya bilgisi dışında veri toplayan casus yazılımlardır. Sisteme bulaştıktan sonra kendi çıkarları doğrultusunda işlemler gerçekleştirebilir.</li>
<li><strong>Keylogger:</strong> Hedef sisteme bulaştıktan sonra bilgisayarın aldığı girdileri kaydeden ve saldırgana bu verileri gönderen yazılımlardır. Örneğin bankacılık işlemlerinde, kişisel hesap bilgilerinin çalınmasında rol oynayabilir, çünkü kullanıcının girdiği girdiler kaydedilip daha sonra saldırgan tarafından kullanılmak üzere saldırgana ulaştırılıyor.</li>
<li><strong>Rootkit:</strong> Bulaştıktan sonra bilgisayarınıza format dahi atsanız kurtulamayacağınız zararlı yazılım türüdür.</li>
<li><strong>Adware:</strong> Bulaştıktan sonra bilgisayarınızda rastgele reklamlar çıkartabilen ya da bilgisayarınızdaki çalışan işlemlere reklam enjekte edebilen zararlı yazılım türüdür.</li>
<li><strong>Ransomware:</strong> Bulaştıktan sonra dosyalarınızı şifreleyip sizden fidye ödemenizi isteyerek dosyalarınızı eski haline döndüreceğini söyleyip buna inanan insanlardan fidye toplayan yazılım türüdür.</li>
<li><strong>Backdoor:</strong> Bulaştıktan sonra herhangi bir aktivite göstermeyip daha sonraki zamanlarda yeniden erişilebilmesi için açık bir arka kapı oluşturan zararlı yazılım türüdür.</li>
</ul>
<p>Zararlı yazılımlar saydıklarımızla bitmiyor, çünkü zararlı yazılımın amacına göre ne yaptığı değişiyor. Bazen saldırgan tamamen karşı taraftaki dosyaları silip hedef bilgisayarı işlevsiz konuma getirmek isteyebilir, bazen de zararlı yazılım ile karşı tarafta backdoor açıp uygun zamanı kollayabilir. Hedef bilgisayarı botnet ağına katıp daha büyük bir saldırıda enfekte olmuş bilgisayar ağları sayesinde önemli bir rol oynayabilir.</p>
<p>Buna örnek verirsek (varsayalım ki) Rusya - Ukrayna savaşında birçok botnet aktif hale getirilip dünya genelinde enfekte olmuş bilgisayarlar ile saldırılar gerçekleştirildi, örneğin Türkiye’deki enfekte olmuş bilgisayar Rusya’daki saldırganın emri ile Ukrayna’daki bir websitesine DDoS saldırı gerçekleştirmeyi denedi. Belki Türkiye’deki kullanıcının bilgisayarı 10 dakika kitlendi, ekranı dondu sonra geri geldi. O 10 dakikada Rusya’daki saldırgan DDoS saldırısını gerçekleştirmiş ve saldırdığı hedefi etkisiz hale getirmiş olabilir.</p>
<h1 id="zararlı-yazılım-analizi">Zararlı Yazılım Analizi</h1>
<p>Belirli bir dosyanın veya örneğin davranışını veya amacını anlama sürecidir. Basit görünebilir fakat göründüğü kadar basit değil, olmaz da. Unutulmaması gereken bir şey var zararlı yazılımı üreten kişi, ürettiği yazılımın kolay anlaşılmasını engellemek, olabildiğince çözümleme sürecini geciktirmek ve daha fazla piyasada tutabilmek için analiz eden kişiye çeşitli eziyetler çektirecektir. Kimse emeğinin heba olmasını istemez, hele ki kötü amaçlı biri ise bu kimse, yazdığı yazılım üzerinde çeşitli karmaşıklaştırma işlemleri gerçekleştirerek ve analiz edecek kişinin analiz programları ile düzgünce açmasını engelleyerek emeğini(!) korumaya çalışacaktır. Zararlı yazılım analizi 3 başlık altında ifade edilebilir:</p>
<ol>
<li>Statik Analiz</li>
<li>Dinamik Analiz</li>
<li>Hibrit Analiz (Eş zamanlı Statik+Dinamik Analiz)</li>
</ol>
<h2 id="1-statik-analiz">1. Statik Analiz</h2>
<p>Zararlı yazılımı sanal makine üzerinde çalıştırmadan disassembler gibi araçlar kullanarak makine kodundan veya makine kodundan dönüştürülmüş C/C# kodundan anlamaya ve ipucu yakalamaya çalıştığımız analizdir. Zararlı yazılım ile direkt olarak etkileşim kurulmaz, sistemde harekete geçirdiği, kullandığı veya manipüle ettiği dataları tespit etmek; zararlı yazılımın daha detaylı analizi için bir taban oluşturmak için yapılır. Örneğin zararlı yazılımın sanal makine ortamında çalışmasını engelleyen, sanal ortam veya araçların kullanıldığını tespit eden kodlar varsa bunların temizlenmesi veya uygun ortamı yaratmak için makine koduna müdahale etmek gibi işlemler yapılabilir.</p>
<ol>
<li><strong>Makine koduna dönüştürülmesi</strong> – Zararlı olabileceği düşünülen yazılımın makine kodunun incelenmesi, temel düzeyde bir kod düzleminde incelenmesidir.</li>
<li><strong>Dosyanın parmak izi</strong> – Her dosyanın kendi parmak izi, MD5/SHA256/SHA1, vardır ve bunların internet ortamında aratılması ile zararlının tanımlanması sağlanabilir</li>
<li><strong>Zararlı taraması</strong> - Zararlı olabileceği düşülen dosyanın içinde virüs izleri aramasıdır. Öğrneğin: VirusTotal, Payload Security</li>
<li><strong>Bellekte bıraktığı izler</strong> - Diğer yazılımlar gibi zararlı yazılımlar da bellekte veya bilgisayarın farklı bölümlerinde [RAM dump, pagefile.sys, hiberfile.sys] izler bırakacaktır. Bu izlerin tespiti ve incelenmesidir.</li>
<li><strong>Paketleyici</strong> – Zararlı yazılımların tespitinin zorlaştırılması için paketleyiciler (packer) kullanılabilir, çeşitli araçlarla paketleyicinin tespit edilmesidir.</li>
</ol>
<h4 id="statik-analiz-araçları"><strong>Statik analiz araçları</strong></h4>
<ul>
<li>Hybrid-analysis</li>
<li>Virustotal.com</li>
<li>BinText</li>
<li>Dependency Walker</li>
<li>IDA</li>
<li>Md5deep</li>
<li>PEiD</li>
<li>Exeinfo PE</li>
<li>RDG Packer</li>
<li>D4dot</li>
<li>PEview</li>
<li>DnsSpy</li>
</ul>
<h2 id="2-dinamik-analiz">2. Dinamik Analiz</h2>
<p>Dinamik analiz aslında zararlı yazılımın uygun laboratuvar ortamında (sandbox veya izole edilmiş sanal bir makine) çalıştırılıp davranışının izlenilmesidir, yani dinamik analizi olarak kastettiğimiz şey davranışsal analizidir. Sistemde açtığı, okuduğu ve düzenlediği dosyaların takip edilmesi, kayıt defteri üzerindeki değişiklikleri, bilgisayar sisteminde çalışan işlemlere müdahalesi (mesela process hooking, DLL injection, hollowing) gibi unsurların tespit edilip incelenmesidir. Dinamik analizi yapmak için, konsepte hakim olmak gerekir. Bu sebeple analiz sürecinde statik analizin de yer alması gerekir.</p>
<p><strong>Sanal ortamın izole edilmiş olması çok önemli bir husustur</strong>, zararlı yazılımın çalışmasını incelerken özel hazırlanmış ortamımızdan kaçmasını veya dışarı sinyal göndermesini, ağda yayılmasını istemeyiz.</p>
<h4 id="dinamik-analiz-araçları"><strong>Dinamik analiz araçları</strong></h4>
<ul>
<li>Procmon</li>
<li>Process Explorer</li>
<li>Anubis</li>
<li>Comodo Instant Malware Analysis</li>
<li>Process MonitorRegshot</li>
<li>ApateDNS</li>
<li>OllyDbg</li>
<li>Regshot</li>
<li>Netcat</li>
<li>Wireshark</li>
</ul>
<h2 id="3-hibrit-analiz">3. Hibrit Analiz</h2>
<p>Genellikle yapılan analiz türüdür, çünkü yukarıda açıkladığım üzere dinamik analizi daha iyi anlayabilmek için statik analiz yapılmış olması gerekir. Dinamik analiz sırasında değişen işaretçileri, bellek adreslerini, bellek verilerini ve belleğin izlenmesi analiz edilmesi süreci hem statik hem de dinamik analiz sürecine dahildir. Günümüz zararlı yazılımları çeşitli yöntemler kullanarak kendilerini gizlemeye ve bu statik/dinamik analiz sürecini zorlaştırmaya çalışmaktadırlar, bu sebeple hibrit analiz zararlı yazılımın anlaşılması ve karşılık verilmesi aşamalarında kilit rol oynamaktadır.</p>
<p>Bu analiz çeşitinde statik ve dinamik analiz araçları birlikte kullanılır. Ayrıyeten debugger dediğimiz çalışma sürecinde koddaki ve bellekteki değişikleri görmemizi sağlayan, istediğimiz yerlere breakpoint koyup çalışma süreci üzerinde söz hakkı olmamızı sağlayan araçlar da vardır.</p>
<h4 id="başlıca-hibrit-analiz-kombinasyonları"><strong>Başlıca Hibrit analiz kombinasyonları</strong></h4>
<ul>
<li>IDA + x64dbg/x32dbg</li>
<li>IDA + x64dbg/x32dbg + ProcessHacker/Procmon</li>
<li>OllyDbg + IDA</li>
<li>x64dbg + Wireshark</li>
</ul>Veli TekinZararlı yazılım (Malicious Software aka Malware) siber tehtitler tarafından karşı tarafa zarar verme ya da karşı taraftan faydalanmak için üretilmiş yazılımlardır. Bir zararlı yazılımın bulaştırılması, karşı tarafta çalıştırılması ve saldıran taraf için avantaj elde edilmesini bir operasyon olarak nitelendirirsek, bu operasyonu gerçekleştiren siber tehtit unsurları amaçlarına ulaşmak için farklı yollar izleyebilirler.MetaTwo CTF Write-Up2022-11-21T10:00:00+00:002022-11-21T10:00:00+00:00https://www.aucyberclub.org/cozumler/2022/11/21/MetaTwoHackTheBoxWriteup<p>CTF linki: https://app.hackthebox.com/machines/MetaTwo</p>
<p>Hackthebox tarafından sağlanan ip üzerinde çalışan servisleri tespit etmek ve karşı makine hakkında fikir sahibi olmak için hedef makineyi tarıyoruz.</p>
<p><code class="language-plaintext highlighter-rouge">nmap -sV -sC 10.10.11.186</code></p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/55d8bbde8c00789008f78880adc5fbf5.png" alt="55d8bbde8c00789008f78880adc5fbf5.png" width="1500" height="auto" /></p>
<p>Karşı tarafın 21. portunda FTP servisi, 22. portunda SSH servisi, 80. portunda ise http servisi yani bir web sitesi çalıştığını görüyoruz.
Ayrıca karşıda bir WordPress web sitesi olduğunu ve bu web sitesinin 5.6.2 sürümünü çalıştırdığını görüyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/7a1f8069e8151dfc5c198839291bb67b.png" alt="7a1f8069e8151dfc5c198839291bb67b.png" width="1500" height="auto" /></p>
<p>Bize verilen IP’yi tarayacımızda açtığımızda “http://metapress.htb/” web adresine yönlendirdiğini görüyoruz. Bizim elimizde bir IP adresi var fakat karşı tarafta bir domain çalışmakta bu IP adresini bilgisayarımızda domain adresine yönlendirmemiz gerekmekte. Bu sebeple “/etc/hosts” dosyasını düzenlememiz gerekiyor.
<code class="language-plaintext highlighter-rouge">sudo nano /etc/host</code></p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/6dd7d8b73d662ae918b2d9f20be61403.png" alt="6dd7d8b73d662ae918b2d9f20be61403.png" width="1500" height="auto" /></p>
<p>Web sitesine girdiğimizde bu ekranla karşılaşıyoruz ve bu ekranda bir randevu sistemine yönlendiren bir link olduğunu görüyoruz</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/ce832d8ec9f827b508c5e52d55023a69.png" alt="ce832d8ec9f827b508c5e52d55023a69.png" width="1500" height="auto" /></p>
<p>Bu randevu sistemi bir eklenti ile çalışmak zorunda, bu eklentinin sürümünü bularak bu sürümde herhangi bir zafiyet olup olmadığını öğreneceğiz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/f82b8607196691ed56f9b3c674cb55f8.png" alt="f82b8607196691ed56f9b3c674cb55f8.png" width="1500" height="auto" /></p>
<p>Sitenin kaynak koduna bakarak eklenti sürümünü görebiliriz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/c3d2d4dfd43458dba1b7618d174b6a68.png" alt="c3d2d4dfd43458dba1b7618d174b6a68.png" width="1500" height="auto" /></p>
<p>Bu sürümü internette aratarak zafiyet arıyoruz.</p>
<p>https://wpscan.com/vulnerability/388cd42d-b61a-42a4-8604-99b812db2357
<img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/5a616b1f0e22a982733f5c7e6d239e49.png" alt="5a616b1f0e22a982733f5c7e6d239e49.png" width="1500" height="auto" />
CVE-2022-0739</p>
<p>Aratınca karşımıza bir SQL Injection zafiyeti çıkıyor. Ve CVE’sini internette aratarak bu zafiyeti sömüren bir python kodunu buluyoruz.</p>
<p>https://github.com/destr4ct/CVE-2022-0739</p>
<p>Bu python kodunu çalıştırmak için nonce bulmamız gerekiyor. Bunun için çalışan servisin yine kaynak kodunda “nonce” aratıyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/26cd298a3e481e1c99d322fa17a96d9b.png" alt="26cd298a3e481e1c99d322fa17a96d9b.png" width="1500" height="auto" /></p>
<p>Kodumuzu çalıştırıyoruz, admin ve manager kullanıcılarının SQL sunucsunda şifrelenmiş olarak depolanan hallerini elde ediyoruz. Bunları kullanmadan önce bruteforce yöntemi ile asıl şifreyi bulmamız gerekiyor.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/2bbc0cbb9a51d12eb70121bfe93b1242.png" alt="2bbc0cbb9a51d12eb70121bfe93b1242.png" width="1500" height="auto" /></p>
<p>Admin kullanıcısı için herhangi bir eşleşme bulamıyoruz fakat manager kullanıcısı için şifreyi bize kullandığımız araç veriyor.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/765b0709340547631192c42c841108a0.png" alt="765b0709340547631192c42c841108a0.png" width="1500" height="auto" /></p>
<p>Elde ettiğimiz şifre ve kullanıcı adını kullanarak sitedeki manager kullanıcısına giriş yapıyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/06c0c4af07f14c67cb31dd14d8d38657.png" alt="06c0c4af07f14c67cb31dd14d8d38657.png" width="1500" height="auto" /></p>
<p>Manager kullanıcısının sitede çok yetkisinin olmadığını görüyoruz. Ama siteye dosya yükleyebiliyoruz, en başta bulduğumuz wordpress sürümünün eski olduğu için zafiyetli olabileceğini düşenerek bu sürümle alakalı zafiyetleri internette aratıyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/25cd62d725bf1bb1c4860d439677691f.png" alt="25cd62d725bf1bb1c4860d439677691f.png" width="1500" height="auto" /></p>
<p>https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/</p>
<p>Sitede verilen yönergeleri takip ederek evil.dtd ve payload.wav dosyalarını oluşturuyoruz. Daha sonra php sunucusu başlatıp wav dosyamızı karşı tarafa yüklüyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/72d46dc40aaa4e995daba3bf81818647.png" alt="72d46dc40aaa4e995daba3bf81818647.png" width="1500" height="auto" /> <img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/c75a8564a3b899a2c66103680f128df3.png" alt="c75a8564a3b899a2c66103680f128df3.png" width="1500" height="auto" /></p>
<p>Elde ettiğimiz veri base64 formatında olduğu için decode ediyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/f7def063623f9af9c4f8dcb460a08586.png" alt="f7def063623f9af9c4f8dcb460a08586.png" width="1500" height="auto" /></p>
<p>Karşı tarafta dosya okuyabiliyoruz, o zaman wordpress web sitelerinin önemli bilgilerini tutan “wp-config” dosyasını okuyarak kayıtlı kullanıcıların giriş bilgilerini elde edebilriz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/a4b0c8239d45304c06db27f75d1d290d.png" alt="a4b0c8239d45304c06db27f75d1d290d.png" width="1500" height="auto" /></p>
<p>Kodumuzu tekrar çalıştırıp decode ettiğmizde FTP sunucusu için giriş bilgilerini buluyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/8f9d64b86ef8ca155f13451aea433a71.png" alt="8f9d64b86ef8ca155f13451aea433a71.png" width="1500" height="auto" /></p>
<p>FTP sunucusna giriş yapıp içinde bilgiler barındırabilecek dosyayı kendi bilgisayarımıza indiriyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/5dfa6eba4ab6a6a314349f4be794d0cb.png" alt="5dfa6eba4ab6a6a314349f4be794d0cb.png" width="1500" height="auto" /></p>
<p>Bu dosyaya baktığımızda SSH giriş bilgileri elde ediyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/00785069dcc6240e788f1a624fda101f.png" alt="00785069dcc6240e788f1a624fda101f.png" width="1500" height="auto" /></p>
<p>Bilgileri kullanıp giriş yaptığımızda ilk flagimizi buluyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/cf083896af4842b95720873f9ba7e87f.png" alt="cf083896af4842b95720873f9ba7e87f.png" width="1500" height="auto" /></p>
<p>Daha sonra home klasörümüze baktığımızda .passpie isimli bir klasör buluyoruz. Passpie isimli bir şifre yöneticisi uygulamasının karşı tarafta kurulu olduğunu görüyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/f3ef1c1fa96960d46b27d8567a0f6c2f.png" alt="f3ef1c1fa96960d46b27d8567a0f6c2f.png" width="1500" height="auto" /></p>
<p>“.keys” dosyasındaki PGP anahtarını alıp bilgisayarımızda key adlı dosyaya kaydediyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/329a38dad80dca20eceba09cbf89864b.png" alt="329a38dad80dca20eceba09cbf89864b.png" width="1500" height="auto" /> <img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/0a12771fcbfaaa41ee88d44f0c327e90.png" alt="0a12771fcbfaaa41ee88d44f0c327e90.png" width="1500" height="auto" /></p>
<p>Önce gpg2john adlı aracı kullanarak bu private keyi hash formatına çeviriyoruz. Ve john ile bruteforce yöntemiyle şifreyi elde ediyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/c969425d78cb4394be101dddb7f84a43.png" alt="c969425d78cb4394be101dddb7f84a43.png" width="1500" height="auto" /></p>
<p>Bu elde ettiğimiz şifre passpie’ın şifresi. Bu şifreyi kullanarak passpie’daki kayıtlı kullanıcı giriş bilgilerini elde ediyoruz. Sonra bu şifreyi kullanarak root kullanıcısına giriş yapıp root flagimizi alıyoruz.</p>
<p><img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/378902ba001aca78892db89b2be2f4cc.png" alt="378902ba001aca78892db89b2be2f4cc.png" width="1500" height="auto" /> <img src="/assets/img/MetaTwoHackTheBoxCTFWriteup/6e99989eb38bec4b03e93749f03b07c8.png" alt="6e99989eb38bec4b03e93749f03b07c8.png" width="1500" height="auto" /></p>
<p>Eren İşlek</p>CTF linki: https://app.hackthebox.com/machines/MetaTwoBotnet Saldırılarında C2 Sunucularından Nasıl Yararlanılır?2022-10-30T19:26:47+00:002022-10-30T19:26:47+00:00https://www.aucyberclub.org/cybercamp/intro/2022/10/30/BotnetSaldirilarindaC2SunucularindanNasilYararlanilir<p>Komut ve kontrol (Command and Control/C2) saldırısı, ele geçirilmiş ana bilgisayar ile saldırganın sunucusu arasında gizli bir kanal oluşturmak için kullanılan kötü amaçlı yazılım saldırılarının bir bileşenidir. Bu tür saldırılarda saldırganın sunucusuna genellikle Komut ve Kontrol Sunucusu, C2 sunucusu veya C&C sunucusu denir. Daha fazla bilgi için <a href="https://www.aucyberclub.org/cybercamp/intro/2022/10/30/KomutveKontrolSunucusuNedir.html">“Komut ve Kontrol Sunucusu (Command and Control Server/C2) Nedir?”</a> yazımızı inceleyebilirsiniz.</p>
<p><strong>C2 Saldırılarında Kullanılan Modeller</strong></p>
<p>C2 saldırılarında virüslü sitemlere komut göndermek için kullanılan çeşitli modeller vardır. Farklı komuta yöntemleri kullanılmasın ardındaki neden, komutların geldiği yerin tespit edilmesini zorlaştırmaktır.</p>
<p><strong>Merkezi Model:</strong> Merkezi model istemci-sunucu işlem modeline oldukça benzerdir. Bu yöntemde virüs bulaşmış ana bilgisayar, yürütülecek işlemlerle ilgili komutlar talep etmek için C2 sunucusunu sorgulayabilir.</p>
<p>Bu modelin algılanması ve engellenmesi genellikle kolaydır, çünkü komutlar hızlı bir şekilde algılanabilen ve engellenebilen IP’ye sahip tek bir kaynaktan gelir. Ancak bazı saldırganlar, C2 sunucu kurulumlarında proxy’ler, yönlendiriciler ve yük dengeleyiciler kullanarak algılama işlemini zorlaştırır.</p>
<p><strong>Eşler Arası (peer-to-peer/P2P) Model:</strong> Eşler Arası Model, botnet üyelerinin bir düğümden diğerine mesaj ilettiği merkezi olmayan bir yapıyı benimser. Merkezi bir sunucu bulunmadığından düğümleri tespit nispeten zordur.</p>
<p>Düğümler tespit edilse dahi tek seferde yalnızca bir düğüm etkisiz hale getirilebilir. Bu model genellikle merkezi modelle birlikte karışık şekilde kullanılır. Bu karma senaryoda, P2P iletişimi, merkezi sunucu kapatıldığında geri dönüşe ve kaybedilen cihazları/sistemleri tekrar ele geçirmeye imkân tanır.</p>
<p><strong>Randomize Model:</strong> Randomize Model siber güvenlik uzmanlarının bir botnet’in komuta zincirini tespit edememesini veya C2 sunucusunu izleyip kapatamamasını sağlamak için geliştirilmiştir. Takibi zorlaştırma işlemi, virüs bulaşmış ana bilgisayara veya botnet’e rastgele kaynaklardan komutlar gönderilerek gerçekleştirilir. Bu kaynaklar sosyal medya yorumları, içerik dağıtım ağları (CDN’ler), Gmail, internet aktarımlı sohbet (IRC) odaları ve daha birçok ortamdaki bağlantılar olabilir. Saldırganların bu kaynaklarda aradığı ortak özelliklerden bazıları, insanların çoğunlukla onlara güvenmesi ve sık kullanmasıdır.</p>
<p><strong>C&C Sunucuları Kurbanları Sömürmek İçin Nasıl Kullanılır?</strong></p>
<p><strong>Veri Hırsızlığı:</strong> C2 kanalının yaygın kullanım amaçlarında biri veri hırsızlığıdır. Saldırganlar, oluşturulan arka kapıyı kullanarak bir kuruluşun sisteminden kritik verileri toplayabilirler. Çalınan veriler finansal kayıtlar, ticari sırlar, kullanıcı verileri olabileceği gibi darkweb’de yüksek meblağlara satılabilecek daha detaylı ve gizli veriler de olabilir.</p>
<p><strong>Devam Eden İşlemleri Sekteye Uğratma:</strong> Saldırganlar, önemli bir görev devam ederken virüslü sistem aracılığıyla bu görevi diledikleri gibi durdurabilir veya kendi istedikleri biçimde yeniden başlatabilirler. Örneğin muhtemel kayıplara karşı tüm verilerini yedekleyen bir şirketteki yedekleme işlemi, düzenli yeniden başlatmalarla asla bitmeyecek bir hale getirilebilir.</p>
<p><strong>Sistemleri veya Ağları Kapatma:</strong> Kötü amaçları yazılımın bir kuruluş içindeki sistemlerin bazı bölümlerinde veya tamamında geçiş yapabildiği durumlarda saldırganlar iş operasyonlarını sonlandırmak için tüm sistemi kapatabilir. Saldırganlar, şirket yöneticilerini talepleri karşılanana kadar sistemi kapalı tutmakla tehdit edebilir. Bu yöntem, şifrelemeye ihtiyaç duyulmayan fidye saldırılarından biridir.</p>
<p><strong>DDoS (Dağıtık Hizmet Engelleme) Saldırıları:</strong> Bazen virüslü sistemler asıl hedef değildir ve yalnızca farklı bir kuruluşa veya hizmete saldırı başlatmak için piyon olarak kullanılırlar. Saldırganlar, C2 sunucusu üzerinden zombi sistemlere bir hedefin hizmet kapasitesini tüketecek ve hizmet veren sunucuyu işlevsiz hale getirecek komutlar verebilirler.</p>
<p><strong>Verileri Şifreleme veya Tahrip Etme:</strong> C2 sunucularının kurban bilgisayarlara zarar vermek için gerçekleştirebileceği etkinliklerden bir diğeri de verileri şifrelemek veya kullanılamaz hale getirmektir. Bu işlemler, veriler yayınlanmadan önce fidye istemek veya bir kuruluşun faaliyetlerini sabote etmek için kullanılabilir.</p>
<p>Yukarıdakiler, bir C2 sunucusu aracılığıyla gerçekleştirilebilecek yaygın saldırılara yalnızca birkaç örnektir. C2 kanalları, virüslü bilgisayara veya ağa açılan bir arka kapıdır ve hasar potansiyelleri yalnızca saldırganın hayal gücüyle sınırlıdır.</p>
<p><strong>C&C Saldırıları Nasıl Algılanır ve Önlenir</strong></p>
<p><strong>Tüm Trafiği Tarayın ve Filtreleyin:</strong> Tarama ve filtreleme işlemi, bir kuruluşun C2 saldırılarını tespit etmek ve önlemek için alması gereken önlemlerin başında gelmektedir. Ağ trafiğinin yetkisiz şekilde şifrelenmesi (DNS tünelleme işlemlerinde yaygın olarak kullanılır), tanınmayan sunucularla veri transferlerinin gerçekleştirilmesi vb. şüpheli etkinlikleri tespit etmek için hem gelen hem de giden trafiğin izlenmesi gerekir.</p>
<p><strong>Sisteme Yüklenecek Her Tür Uygulama İçin Yönetici Onayını Zorunlu Kılın:</strong> C2 saldırılarından korunmak için bilgisayarınız yalnızca belirli uygulamaların yüklenmesi için değil, kaynağı bilinmeyen her uygulama için yöneticiden onay talep etmesi gerekmektedir. Bu sayede tehdit aktörlerine hizmet eden uygulamaların yüklenmesi zorlaşacak ve sisteminiz daha güvenli hale gelecektir.</p>
<p>Virüs bulaşmış ana bilgisayarları ağdaki diğer ana bilgisayarlardan ayırın: Virüs bulaşmış bir bilgisayar algılandığında, onu diğer ana bilgisayarlardan ayırmak için hemen ağdan kaldırın. Bu, kötü amaçlı yazılımın dönmesini ve ağın kontrolünü ele geçirmesini önler.</p>
<p><strong>Sisteminizi Antivirüs Yazılımlarıyla Sürekli Tarayın:</strong> Kötü amaçlı yazılımların algılanıp kaldırıldığından emin olmak için, güvenirliği test edilmiş virüsten koruma yazılımı kullanarak sistemlerinizi sürekli tarayabilirsiniz. Bu şekilde, C2 sunucularıyla iletişimde kullanılan kötü amaçlı yazılımlar kaldırılır ve gizli kanal sonlandırılır.</p>
<p><strong>Sonuç</strong></p>
<p>C&C saldırıları, saldırganların kötü niyetli faaliyetlerin engellenmelerini ve kuruluşların hasarları azaltmaları önlemek için gizli bir şekilde gerçekleştirilir. Bu nedenle, saldırı sonrasındaki iyileştirici çözümler kullanmak yerine saldırı öncesinde tedbirler almak çok daha önemlidir.</p>
<p>Kaynaklar:</p>
<ul>
<li>https://medium.com/dnsfilterofficial/how-a-c2-server-is-leveraged-in-a-botnet-command-and-control-attack-42d03da1e5f5</li>
</ul>
<hr />
<p><strong><a href="https://www.linkedin.com/in/ismail-ba%C5%9Faran-063000256/">İsmail Başaran</a></strong></p>İsmail BaşaranKomut ve kontrol (Command and Control/C2) saldırısı, ele geçirilmiş ana bilgisayar ile saldırganın sunucusu arasında gizli bir kanal oluşturmak için kullanılan kötü amaçlı yazılım saldırılarının bir bileşenidir. Bu tür saldırılarda saldırganın sunucusuna genellikle Komut ve Kontrol Sunucusu, C2 sunucusu veya C&C sunucusu denir. Daha fazla bilgi için “Komut ve Kontrol Sunucusu (Command and Control Server/C2) Nedir?” yazımızı inceleyebilirsiniz.Komut ve Kontrol Sunucusu (Command and Control Server/C2) Nedir?2022-10-30T19:26:47+00:002022-10-30T19:26:47+00:00https://www.aucyberclub.org/cybercamp/intro/2022/10/30/KomutveKontrolSunucusuNedir<p>Komut ve kontrol (Command and Control/C2) saldırısı, ele geçirilmiş ana bilgisayar ile saldırganın sunucusu arasında gizli bir kanal oluşturmak için kullanılan kötü amaçlı yazılım saldırılarının bir bileşenidir. Bu tür saldırılarda saldırganın sunucusuna genellikle Komut ve Kontrol Sunucusu, C2 sunucusu veya C&C sunucusu denir. Saldırı sunucusu, kurbanın bilgisayarında farklı türde kötü amaçlı faaliyetler gerçekleştirmek için oluşturulan arka kapıdan yararlanır. DNS (alan isimlendirme sistemi) tünellemesi ile veri sızdırma bu faaliyetlere örnek verilebilir.</p>
<p>Yeterli süre tanındığında kötü amaçlı yazılım, ağdaki daha savunmasız ana bilgisayarları tanımlayabilir ve bu bilgisayarlara yayılabilir. Bu işlem “pivoting” olarak da bilinir. Daha fazla sistem ele geçirildiğinde zombi sistemlerden oluşan botnet oluşturulmuş olur. Sonrasında bu botnet’ler, DDoS (Dağıtık Hizmet Engelleme) saldırıları yapmak gibi daha zararlı etkinlikleri gerçekleştirmek için komutlar alır.</p>
<p><img src="/CyberCamp/assets/KomutveKontrolSunucusuNedir/1.png" alt="" /></p>
<p>C2 oldukça tehlikeli bir saldırı yöntemidir çünkü yalnızca bir enfekte bilgisayar tüm ağı çökertebilir. Kötü amaçlı yazılım hedef makinede kendini bir kez çalıştırdığında C2 sunucusu onu çoğaltmak ve yaymak için komut verebilir —bu, ağ güvenlik duvarı çoktan geçildiği için kolayca gerçekleşebilir.</p>
<p>Virüs bir kez ağa bulaştığında saldırgan, kullanıcıları saf dışı bırakmak için ağı kapatabilir veya enfekte olan cihazları şifreleyebilir. 2017’deki WannaCry fidye saldırıları, hastaneler gibi kritik kurumlardaki bilgisayarlara bulaşarak, onları kilitleyerek ve Bitcoin cinsinden fidye talep ederek tam olarak bunu yaptı.</p>
<p><img src="/CyberCamp/assets/KomutveKontrolSunucusuNedir/2.png" alt="" /></p>
<h3 id="komut-ve-kontrol-c2-sunucuları-nasıl-çalışır"><strong>Komut ve Kontrol (C2) sunucuları nasıl çalışır?</strong></h3>
<p>Siber güvenlik alanında zincirin en zayıf halkası insanlardır. Bu nedenle çoğu durumda saldırganlar kişiyi panik yapmaya itecek, bilinçsizce hareket etmesini sağlayacak e-postalar ve dosyalar göndererek insanların zayıflıklarına saldırır. Kurban kötü amaçlı dosyayı indirip çalıştırdığında zararlı yazılım güvenlik duvarını aşarak ağı ve bilgisayarı tehlikeye atar.</p>
<p>C2 saldırıları, aşağıdaki gibi kanallardan meydana gelebilecek ilk bulaşmalarla başlar:</p>
<ul>
<li>kötü amaçlı web sitesi bağlantıları veya kötü amaçlı ekler içeren “phishing” e-postalarıyla</li>
<li>bazı tarayıcı eklentilerindeki güvenlik açıklarıyla</li>
<li>zararsız görünen virüslü yazılımlarla veya yazılım güncellemeleriyle</li>
<li>güvenilir sitelere yüklenmiş (örneğin Play Store) uygulamaların gerçekleştireceği iç güncellemelerde yüklenen yazılımlarla</li>
</ul>
<p>Örnek bir Command & Control saldırısı, aşağıda açıklanan bir dizi adımda gerçekleştirilebilir:</p>
<ol>
<li>
<p>Adım:</p>
<p>Saldırgan, kullanıcının sistemine veya bir kuruluş içindeki -genellikle güvenlik duvarının arkasındaki- bir sisteme kötü amaçlı yazılımı bulaştırır. Bulaştırma işlemi; “phishing” e-postaları, güvenlik açığı barındıran tarayıcı eklentileri, depolama birimleri, yüklenebilir programlar, kötü amaçlı reklamlar vb. farklı yollarla gerçekleştirilebilir.</p>
<p><img src="/assets/img/KomutveKontrolSunucusuNedir/3.png" alt="" /></p>
</li>
<li>
<p>Adım:</p>
<p>Ana bilgisayara virüs bulaştığında C2 kanalı oluşturulur ve ele geçirilen sistem, komutları almaya hazır olduğunu belirtmek için C2 sunucusuna bir bildirim gönderir. Bu iletişim çoğunlukla DNS gibi güvenilir trafik üzerinden yapılır.</p>
<p><img src="/CyberCamp/assets/KomutveKontrolSunucusuNedir/4.png" alt="" /></p>
</li>
<li>
<p>Adım:</p>
<p>C2 kanalı hazır hale geldiğinde kötü amaçlı yazılım tespit edilmediği sürece virüslü sistem C2 sunucusundan komutlar alabilir. C2 sunucusu, yüklenecek daha fazla yazılım göndermek, verileri şifrelemek ve hatta virüslü ana bilgisayardan tekrar tekrar veri ayıklamak için bu kanalı kullanabilir.</p>
<p><img src="/CyberCamp/assets/KomutveKontrolSunucusuNedir/5.png" alt="" /></p>
</li>
</ol>
<p>C2 sunucusu, ağ üzerinden geçiş yapmak için ağdaki diğer sistemlerdeki güvenlik açıklarını aramayı başlatacak komutlar da verebilir. Bu, bir kuruluşun BT (Bilgi Teknolojileri) altyapısını tamamen tehlikeye atabilir ve botnet olarak bilinen ele geçirilmiş bilgisayarlar ağının oluşturulmasına yol açabilir. Tüm bu zombi makineler ordusunun tek amacı, koordine saldırılar gerçekleştirmek için C2 sunucusundan komut almaktır.</p>
<h3 id="c2-sunucu-yapıları"><strong>C2 Sunucu Yapıları</strong></h3>
<p>Saldırganlar C2 sunucularını birkaç farklı yapıya veya topolojiye göre yapılandırılabilir:</p>
<ul>
<li>Yıldız topolojisi: Botlar tek bir merkezi sunucu etrafında düzenlenir.</li>
<li>Çoklu sunucu topolojisi: Karışıklık yaratmak için birden fazla C2 sunucusu kullanılır.</li>
<li>Hiyerarşik topoloji: Birden çok C2 sunucusu, bir hiyerarşi içinde düzenlenir.</li>
<li>Rastgele topoloji: Virüslü bilgisayarlar eşler arası “botnet” (peer-to-peer botnet/P2P botnet) olarak iletişim kurar.</li>
</ul>
<p>2017’ye kadar bilgisayar korsanları, Telegram gibi uygulamaları kötü amaçlı yazılımlar için komut ve kontrol merkezleri olarak kullanıyorlardı. Sadece bu yıl 130 vakada bilinçsiz insanlardan veri çalabilen ve kişileri bilgisayarları aracılığıyla izleyip kaydedebilen ToxicEye adlı bir program bulundu.</p>
<h4 id="kaynaklar">Kaynaklar:</h4>
<ul>
<li>https://www.howtogeek.com/726136/what-is-a-command-and-control-server-for-malware/</li>
<li>https://www.paloaltonetworks.com/blog/security-operations/from-the-hunter-diaries-detecting-c2-servers/</li>
<li>https://www.feroot.com/education-center/what-is-a-command-and-control-c2-server/</li>
<li>https://vvelitkn.com</li>
</ul>
<hr />
<p><strong><a href="https://www.linkedin.com/in/ismail-ba%C5%9Faran-063000256/">İsmail Başaran</a></strong></p>İsmail BaşaranKomut ve kontrol (Command and Control/C2) saldırısı, ele geçirilmiş ana bilgisayar ile saldırganın sunucusu arasında gizli bir kanal oluşturmak için kullanılan kötü amaçlı yazılım saldırılarının bir bileşenidir. Bu tür saldırılarda saldırganın sunucusuna genellikle Komut ve Kontrol Sunucusu, C2 sunucusu veya C&C sunucusu denir. Saldırı sunucusu, kurbanın bilgisayarında farklı türde kötü amaçlı faaliyetler gerçekleştirmek için oluşturulan arka kapıdan yararlanır. DNS (alan isimlendirme sistemi) tünellemesi ile veri sızdırma bu faaliyetlere örnek verilebilir.Dünya Tarihine Etki Bırakan İlk Modern Siber Savaş2022-08-29T20:17:00+00:002022-08-29T20:17:00+00:00https://www.aucyberclub.org/makaleler/2022/08/29/estonya-saldirisi%20(1)<h1 id="dünya-tarihine-etki-bırakan-i̇lk-modern-siber-savaş-estonya-saldırısı">Dünya Tarihine Etki Bırakan İlk Modern Siber Savaş: Estonya Saldırısı</h1>
<p>Siber ve savaş kelimelerinin yan yana gelmesi ne kadar ürkütücü değil mi? Öncelikle bu kavramları tek
tek ele almak gerek. Siber, <strong>“bilgisayarlara dahil olan, kullanan ve ilgili olan”</strong>; savaş, <strong>“bir şeye karşı
yapılan, ortadan kaldırma, yok etme uğraşı”</strong> anlamlarına gelmekte. Siber savaş ise devletler arası
gerçekleşen, bir devletin diğer devlete ait bilgisayar sistemlerinde/ağlarında kesintilere ve zarara
neden olan faaliyetlerin gerçekleştirilmesidir.
Siber uzayda bu zamana kadar yaşanmış çokça siber savaş bulunmaktadır. Bir şeyin ilki, devamının
nasıl geleceğinin yolunu çizer; günümüzde de bunun örneklerini görmekteyiz, tabi daha farklı
teknolojilerle. Yakın zamanda Rusya-Ukrayna ve Rusya-Romanya arasında olan siber savaşlar
konusunda fazlasıyla şey duyduk. Peki, tüm bunların temeli, ilki neydi?</p>
<h2 id="estonya-saldırısı">Estonya Saldırısı</h2>
<p>Sovyet ordusunun II. Dünya Savaşı anısına diktiği <strong>“Bronze Soldier of Tallinn”</strong> isimli bir anıtın Estonya
sınırlarında bulunması, savaşla direkt olarak sembolize edilmesi siyasi karmaşalara neden oldu. Bu
nedenlerden ötürü Estonya hükümeti tarafından 2007 yılında bu anıtı kaldırdı, Sovyet askerlere ait
cesetler ve kalıntıları Talinn’de bulunan Savunma Kuvvetleri Mezarlığına yerleştirildi.</p>
<p align="center">
<img src="/assets/img/estonya-saldirisi/anit.png" />
<i>Bronze Soldier of Tallinn</i>
</p>
<p>Bu yer değiştirmeden sonra <strong>“Bronze Night”</strong> olarak adlandırılan Estonya’da yaşayan etnik Rus nüfusu
tarafından bir ayaklanma baş gösterdi. Moskova’daki Estonya Büyükelçiliği kuşatıldı. Estonya
çevresinde kundaklamalar yapıldı, ölen ve yaralanan bireyler oldu.</p>
<p>Bu ayaklanma sürerken aynı zamanda devlet destekli olduğu bilinen Rus hacker’lar tarafından
Estonya websitelerinde DDoS saldırıları başladı. Başta Estonya devlet siteleri olmak üzere devlet
kurumları, bankalar, yayıncılar, haber portalları hedef oldu. Bu saldırılar genel halk üzerinde yoğun
etki yarattı.</p>
<p>Bu saldırılar birkaç ay devam etti, Estonya’da hayat resmen durma noktasına geldi. NATO’da olan
Estonya, NATO tarafından yardım istedi. NATO bu çağrıya olumlu yanıt verdi. Bu savaş sebebiyle
<strong>“Tallinn Kılavuzu”</strong> geliştirildi. Bu kılavuzda, siber alem için geçerli kabul edilen uluslararası yasalar
özetlendi.</p>
<p>Savaş sonunda Estonya, Rusya’yı suçlarken, Moskova iddiaları reddetti. Soruşturmalarda siber
saldırının boyutu göz önüne alındığında devlet olanaklarının kullanılmasının muhtemel olduğu
vurgulandı. Saldırı sonrası Estonya’da ordu bünyesinde siber savaş birimi oluşturuldu. NATO da ayrıca
üye bazı ülkelerin bir araya geldiği bir siber savunma birimi oluşturdu. Günümüzde bu birim belirli
aralıklarla siber savaş tatbikatları yapmaktadır.</p>
<h2 id="kaynakça">Kaynakça</h2>
<p><a href="https://www.bbc.com/news/39655415">How a cyber attack transformed Estonia</a></p>
<p><a href="https://en.wikipedia.org/wiki/Bronze_Night">Bronze Night</a></p>
<p><a href="https://en.wikipedia.org/wiki/2007_cyberattacks_on_Estonia">2007 cyberattacks on Estonia</a></p>
<p><a href="https://www.nytimes.com/2019/09/06/the-weekly/russia-estonia-election-cyber-attack.html">Russia-Estonia Election Cyber Attack</a></p>
<hr />
<p><strong><a href="https://www.linkedin.com/in/esincoban/">Esin ÇOBAN</a></strong></p>Dünya Tarihine Etki Bırakan İlk Modern Siber Savaş: Estonya Saldırısı Siber ve savaş kelimelerinin yan yana gelmesi ne kadar ürkütücü değil mi? Öncelikle bu kavramları tek tek ele almak gerek. Siber, “bilgisayarlara dahil olan, kullanan ve ilgili olan”; savaş, “bir şeye karşı yapılan, ortadan kaldırma, yok etme uğraşı” anlamlarına gelmekte. Siber savaş ise devletler arası gerçekleşen, bir devletin diğer devlete ait bilgisayar sistemlerinde/ağlarında kesintilere ve zarara neden olan faaliyetlerin gerçekleştirilmesidir. Siber uzayda bu zamana kadar yaşanmış çokça siber savaş bulunmaktadır. Bir şeyin ilki, devamının nasıl geleceğinin yolunu çizer; günümüzde de bunun örneklerini görmekteyiz, tabi daha farklı teknolojilerle. Yakın zamanda Rusya-Ukrayna ve Rusya-Romanya arasında olan siber savaşlar konusunda fazlasıyla şey duyduk. Peki, tüm bunların temeli, ilki neydi?HackKaradeniz Write-up2022-07-29T10:00:00+00:002022-07-29T10:00:00+00:00https://www.aucyberclub.org/cozumler/2022/07/29/hackkaradeniz<h1 id="hackkaradeni̇z-ctf-write-up">HACKKARADENİZ CTF WRITE-UP</h1>
<p align="center">
<img src="/assets/img/hackkaradeniz/aucc-logo.png" />
</p>
<p>Ankara Üniversitesi Siber Güvenlik Topluluğu (<strong>AUCC</strong>) üyeleri olarak 16.07.2022- 17.07.2022 tarihlerinde katılıp 6. olarak tamamladığımız Hackkaradeniz Yarı Final CTF’inin çözümleri.</p>
<p><strong>AUCC</strong> yarışmacıları:</p>
<ul>
<li>
<table>
<tbody>
<tr>
<td><strong><em>canoztas</em></strong></td>
<td><em>Can ÖZTAŞ</em></td>
<td><em>Ankara Üniversitesi</em></td>
</tr>
</tbody>
</table>
</li>
<li>
<table>
<tbody>
<tr>
<td><strong><em>allesfresser</em></strong></td>
<td><em>Mücahit KURTLAR</em></td>
<td><em>Ankara Üniversitesi</em></td>
</tr>
</tbody>
</table>
</li>
<li>
<table>
<tbody>
<tr>
<td><strong><em>krypton</em></strong></td>
<td><em>Yiğit GÜNDOĞDU</em></td>
<td><em>Ankara Üniversitesi</em></td>
</tr>
</tbody>
</table>
</li>
<li>
<table>
<tbody>
<tr>
<td><strong><em>f2u0a0d3v1</em></strong></td>
<td><em>Fuad ANZUROV</em></td>
<td><em>Ankara Üniversitesi</em></td>
</tr>
</tbody>
</table>
</li>
</ul>
<h2 id="network">NETWORK</h2>
<h3 id="n-t-w-1">N-T-W-1:</h3>
<ul>
<li><a href="https://apackets.com/pcaps?pcap=a311d973e9686a57240228c92979cf6f.pcap&view=flows">A-Packets</a></li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/n-t-w-1-1.png" />
</p>
<ul>
<li>HTTP requestlerine bakıldığında <code class="language-plaintext highlighter-rouge">dvwa</code> üzerine saldırı yapıldığı gözlemleniyor, örnek bir payloaddan <code class="language-plaintext highlighter-rouge">sql injection</code> olduğunu anlıyoruz.</li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{sql_injection}</code></p>
<h3 id="n-t-w-2">N-T-W-2:</h3>
<ul>
<li><a href="https://apackets.com/pcaps?pcap=f6c79bf84ed292eee13a47612fe7a6fc.pcap&view=ftp">A-Packets</a></li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/n-t-w-2-1.png" />
</p>
<ul>
<li>FTP loglarına baktığımızda bir shell dosyası attığını görüyoruz. Dosyanın adı da <code class="language-plaintext highlighter-rouge">bBHk1d.php</code></li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{bBHk1d.php}</code></p>
<h3 id="n-t-w-3">N-T-W-3:</h3>
<ul>
<li><a href="https://apackets.com/pcaps?pcap=f6c79bf84ed292eee13a47612fe7a6fc.pcap&view=graph">A-Packets</a></li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/n-t-w-3-1.png" />
</p>
<ul>
<li>Trafiği incelediğimizde en anomali durumun <code class="language-plaintext highlighter-rouge">4444</code> portu ile konuşma olduğunu fark ediyoruz.</li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{172.16.8.50,4444}</code></p>
<h2 id="web">WEB</h2>
<h3 id="interview">Interview:</h3>
<ul>
<li>Domainler şuan kapandığı için screenshot alamıyoruz ve flagi hatırlamıyoruz ama attığımız mailin logları ve mail screenshotu buradadır.</li>
<li>Siteyi dolanırken kariyer sayfasında mail atmamız gerektiğini anlıyoruz. Ayşe Zonguldak’ın e-mailini Twitter’da buluyoruz. Maili attığımızda bize kullanıcı-adı parola veriyor.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/interview-1.png" />
</p>
<ul>
<li>Bu bilgilerle girdiğimiz panelde hatırladığımız kadarıyla <code class="language-plaintext highlighter-rouge">md5</code> ile şifrelenmiş query stringdeki obje referansları vardı, bunu sırayla denediğimizde flag’e ulaşıyoruz.</li>
</ul>
<h2 id="misc">MISC</h2>
<h3 id="anıt">Anıt:</h3>
<ul>
<li><a href="https://anit.hackkaradeniz.xyz/robots.txt">/robots.txt</a></li>
<li><a href="https://anit.hackkaradeniz.xyz/canakkale.jpg">/canakkale.jpg</a></li>
<li><a href="https://anit.hackkaradeniz.xyz/img/">/img</a></li>
<li>Sitedeki bu endpointleri buluyoruz. robots.txt’den çıkan resim’den bozuk bir resim dosyası buluyoruz. Buradan bitlerini jpg jfife çevirince bu resmi buluyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/anit-1.jpg" />
</p>
<ul>
<li>Görsel bizi <code class="language-plaintext highlighter-rouge">anit.php</code>’ye götürüyor. Burada <code class="language-plaintext highlighter-rouge">ascii</code> ve <code class="language-plaintext highlighter-rouge">hex</code>’li bir şifreleme olduğunu verilen görsellerden ve sitenin yorumlarıdan tahmin ediyoruz ama biz bu pattern’i tam olarak kestiremesek de…</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/anit-2.png" />
</p>
<ul>
<li>…akıllıca bir brute force atarak <code class="language-plaintext highlighter-rouge">302</code> dönen yeri buluyoruz. Abide kelimesinin <code class="language-plaintext highlighter-rouge">Adlhh</code> olduğun bulduğunu buluyoruz.</li>
<li>Sonra gelen ekranda 2 fotoğrafın lokasyonu bize soruluyor reverse image search ile birinin Ankara Yenimahalle diğerinin Bursa Osmangazi olduğunu buluyoruz. İlgili yerleri girince flage ulaşıyoruz.</li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{4n1tl4r_t4r1ht1r}</code></p>
<h3 id="fernet">Fernet:</h3>
<ul>
<li><a href="https://fernet.hackkaradeniz.xyz">fernet</a></li>
<li>Sitede kırmızı ile HackKaradeniz yazılmıştı, buraya gidince Method not Allowed dönüyordu, biz de önce OPTIONS atıyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/fernet-1.png" />
</p>
<ul>
<li>response’da post atıldığını söylüyor, post atınca bize bir key ve ciphertext dönüyor.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/fernet-2.png" />
</p>
<ul>
<li>Sitenin domainin de adından bunun <code class="language-plaintext highlighter-rouge">fernet encryption</code> olduğunu anlıyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/fernet-3.png" />
</p>
<ul>
<li><a href="https://cryptography.io/en/latest/fernet/">class cryptography.fernet.Fernet(key)</a></li>
<li><code class="language-plaintext highlighter-rouge">python</code> kullanarak flag’i buluyoruz.</li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">FLAG{H4cK_kar4D3n1z_2o22-T3mMuz}</code></p>
<h2 id="malware">MALWARE</h2>
<h3 id="forrest-gump">Forrest Gump:</h3>
<ul>
<li>Verilen unity ile yapılmış programı dnSpy ile <code class="language-plaintext highlighter-rouge">HKGame_data>Managed>Assemly-CSharp.dll</code> ile açtığımızda <code class="language-plaintext highlighter-rouge">UnityMovement</code> classının içinde <code class="language-plaintext highlighter-rouge">DetectTouchingObject</code> fonksiyonun oyunun amacına göre flagı vereceğini düşündük.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/forrest_gump-1.jpg" />
</p>
<ul>
<li>Kodu kendimiz çalıştırdığımızda flagı elde ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/forrest_gump-2.jpg" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">FLAG{F1N4L3_DOGRU_4D1M_4D1M}</code></p>
<h3 id="windowsexe">windows.exe:</h3>
<ul>
<li>
<p>Verilen exe dosyasına <a href="https://www.virustotal.com/gui/">VIRUSTOTAL</a>‘a attık VIRUSTOTAL ile dosyayı tarattığımızda içinde farklı dosyaların olduğunu tespit ettik.</p>
</li>
<li>
<p><code class="language-plaintext highlighter-rouge">DirWatch</code> toolu ile incelediğimiz de <code class="language-plaintext highlighter-rouge">config.json</code> dosyası
olduğunu fark ettik. <code class="language-plaintext highlighter-rouge">config.json</code> dosyasının incelediğimizde <code class="language-plaintext highlighter-rouge">base64</code> formatında decode ettiğimizde flag karşımıza çıktı.</p>
</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/windows_exe-1.png" />
</p>
<p align="center">
<img src="/assets/img/hackkaradeniz/windows_exe-2.png" />
</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[{</span><span class="nl">"Algo"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"Coin"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"URL"</span><span class="p">:</span><span class="s2">"pool.hashvault.pro:80"</span><span class="p">,</span><span class="nl">"User"</span><span class="p">:</span><span class="s2">"46zddr14XunCANLoynmVXxSFZi15Af3qycbEPoH72qrS6dSFHdavYnHb29zTNXqqRHAFBMmWxW5QuKvfYdAQ5SU3GqqRfEA"</span><span class="p">,</span><span class="nl">"Pass"</span><span class="p">:</span><span class="s2">"RmxhZ3sweDQ2NkM2MTY3N0I2ODY1NzI3MzY1Nzk3NjM0NzQ2MTZFMzE2MzY5NkU3RH0="</span><span class="p">,</span><span class="nl">"RigID"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="nl">"NiceHash"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"KeepAlive"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"Enabled"</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span><span class="nl">"TLS"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"TLSFingerprint"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"Daemon"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"Socks5"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"SelfSelect"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"SubmitToOrigin"</span><span class="p">:</span><span class="kc">false</span><span class="p">}]</span><span class="err">,</span><span class="nl">"PrintTime"</span><span class="p">:</span><span class="mi">0</span><span class="err">,</span><span class="nl">"HealthPrintTime"</span><span class="p">:</span><span class="mi">0</span><span class="err">,</span><span class="nl">"DMI"</span><span class="p">:</span><span class="kc">false</span><span class="err">,</span><span class="nl">"Retries"</span><span class="p">:</span><span class="mi">0</span><span class="err">,</span><span class="nl">"RetryPause"</span><span class="p">:</span><span class="mi">0</span><span class="err">,</span><span class="nl">"Syslog"</span><span class="p">:</span><span class="kc">false</span><span class="err">,</span><span class="nl">"tls"</span><span class="p">:{</span><span class="nl">"Enabled"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"Protocols"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"Cert"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"CertKey"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"Ciphers"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"CipherSuites"</span><span class="p">:</span><span class="s2">""</span><span class="p">,</span><span class="nl">"Dhparam"</span><span class="p">:</span><span class="s2">""</span><span class="p">}</span><span class="err">,</span><span class="nl">"dns"</span><span class="p">:{</span><span class="nl">"IPv6"</span><span class="p">:</span><span class="kc">false</span><span class="p">,</span><span class="nl">"TTL"</span><span class="p">:</span><span class="mi">0</span><span class="p">}</span><span class="err">,</span><span class="nl">"UserAgent"</span><span class="p">:</span><span class="s2">""</span><span class="err">,</span><span class="nl">"Verbose"</span><span class="p">:</span><span class="mi">0</span><span class="err">,</span><span class="nl">"Watch"</span><span class="p">:</span><span class="kc">false</span><span class="err">,</span><span class="nl">"PauseOnBattery"</span><span class="p">:</span><span class="kc">false</span><span class="err">,</span><span class="nl">"PauseOnActive"</span><span class="p">:</span><span class="kc">false</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<ul>
<li><code class="language-plaintext highlighter-rouge">Pass</code> key’ine bakarsak:</li>
</ul>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"Pass"</span><span class="p">:</span><span class="s2">"RmxhZ3sweDQ2NkM2MTY3N0I2ODY1NzI3MzY1Nzk3NjM0NzQ2MTZFMzE2MzY5NkU3RH0="</span><span class="w">
</span></code></pre></div></div>
<ul>
<li>base64 decode edersek:</li>
</ul>
<p><code class="language-plaintext highlighter-rouge">Flag{0x466C61677B686572736579763474616E3163696E7D}</code></p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{herseyv4tan1cin}</code></p>
<h3 id="functionbomber">FunctionBomber:</h3>
<ul>
<li>ELF dosyasını <code class="language-plaintext highlighter-rouge">ida</code> ve <code class="language-plaintext highlighter-rouge">ghidra</code> ile incelediğimizde <code class="language-plaintext highlighter-rouge">CreateFlag</code> fonksiyonlarından 99999 tane olduğunu görüyoruz. Bu fonksiyonlardan sahte olanların yalnızca return 1 olduğunu. Doğru fonksiyonu bulabilmek için <code class="language-plaintext highlighter-rouge">objdump -d</code> ile fonksiyonlara ait bilgileri çektik. Yazdığımız <code class="language-plaintext highlighter-rouge">python</code> scripti ile fonksiyonların <code class="language-plaintext highlighter-rouge">assemble</code> kod kısımlarında 3.satırında <code class="language-plaintext highlighter-rouge">mov eax,1</code> olmayan fonksiyonu bulduk.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/functionbomber-1.jpg" />
</p>
<ul>
<li>çıktısı:</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/functionbomber-2.jpg" />
</p>
<ul>
<li>Belirlediğimiz fonksiyonun <code class="language-plaintext highlighter-rouge">assemble</code> koduna baktık.Daha sonrasında <code class="language-plaintext highlighter-rouge">gdb</code> asıl <code class="language-plaintext highlighter-rouge">main</code> kısmının <code class="language-plaintext highlighter-rouge">return</code> addresine breakpoint koyarak rip ye bu fonksiyonun adresini koyduk ve fonksiyonu çalıştırdık.Her aşamada rspyi kontrol ettik ve sonucunda <code class="language-plaintext highlighter-rouge">SEt7QzR5ZWxpbmRlbl9PdGV5ZTUzfQ</code> elde ettik.
<code class="language-plaintext highlighter-rouge">Cybershef</code> de magic modda cipherı verdiğimizde flagı elde etmiş olduk.</li>
</ul>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">HK{C4yelinden_Oteye53}</code></p>
<h3 id="hesap-makinesi">Hesap Makinesi:</h3>
<ul>
<li>Verilen <code class="language-plaintext highlighter-rouge">elf</code> dosyasının <code class="language-plaintext highlighter-rouge">go</code> ile yazılmış olduğunu ve <code class="language-plaintext highlighter-rouge">upx</code> ile packlendiğini fark ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/hesap_makinesi-1.jpg" />
</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">upx -d</code> ile unpack ettikten sonra file <code class="language-plaintext highlighter-rouge">ida</code>’da açtık. <code class="language-plaintext highlighter-rouge">main</code> kısımlarından <code class="language-plaintext highlighter-rouge">main_meh</code> kısmında gizli bölme olduğunu gördük.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/hesap_makinesi-2.jpg" />
</p>
<ul>
<li>Kodun ilerleyen kısımlarında password sorduğunu ve gördük. Password kısmına geçtikten sonra ise encode edilmiş datanın 3 kere <code class="language-plaintext highlighter-rouge">base64</code> formatında decode edildiğini fark ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/hesap_makinesi-3.jpg" />
</p>
<p align="center">
<img src="/assets/img/hackkaradeniz/hesap_makinesi-4.jpg" />
</p>
<ul>
<li>Sonrasında flag’i elde ediyoruz.</li>
</ul>
<p><code class="language-plaintext highlighter-rouge">Flag{0x466C61677B68617934747434656E68616B696B696D7572736974696C696D6469727D}</code></p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{hay4tt4enhakikimursitilimdir}</code></p>
<h3 id="mixer">Mixer:</h3>
<ul>
<li>Verilen exe dosyasını <code class="language-plaintext highlighter-rouge">ida</code> ile açtığımızda flage ulaşabilmek için <code class="language-plaintext highlighter-rouge">strcmp</code> yapıyor ancak <code class="language-plaintext highlighter-rouge">strcmp</code>in öncesinde bir <code class="language-plaintext highlighter-rouge">swap</code> işlemi yapıyor. Ayrıca <code class="language-plaintext highlighter-rouge">swap</code> işlemi girilen inputu ortadan ayırıp ters çeviriyor. Karşılaştırma yaptığımız değeri bu <code class="language-plaintext highlighter-rouge">swap</code> algoritmasına göre düzenleyip exe dosyasında çalıştırdığımızda bize flagi elde ediyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/mixer-1.png" />
</p>
<p align="center">
<img src="/assets/img/hackkaradeniz/mixer-2.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{H3y6!D!_K4R4D3N!2}</code></p>
<h3 id="ransomware">RansomWare:</h3>
<ul>
<li>Verilen exe dosyasını <code class="language-plaintext highlighter-rouge">ida</code> ile açtığımızda encode edilmiş partı keşfettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/ransomware-1.png" />
</p>
<ul>
<li>Encode edilmiş partta tam tersini yapacak bir script yazdık.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/ransomware-2.jpg" />
</p>
<ul>
<li>Daha sonrasında flagi elde etmiş olduk.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/ransomware-3.jpg" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{K4r4d3n!zD3_Ru264r_S3RT_3s3R}</code></p>
<h3 id="klasik">Klasik:</h3>
<ul>
<li>Verilen exe dosyasını çalıştırdığımızda direkt olarak flag karşımıza çıkıyor :)</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/klasik-1.jpg" />
</p>
<p><code class="language-plaintext highlighter-rouge">Flag{0x466C61677B6D696C347474616E6F6E63653230397D}</code></p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{mil4ttanonce209}</code></p>
<h3 id="dünya-dönüyor">Dünya Dönüyor:</h3>
<ul>
<li>Öncelikle verilen dosyayı ida ile açtığımızda <code class="language-plaintext highlighter-rouge">sub_C81320</code> fonksiyonunun <code class="language-plaintext highlighter-rouge">return</code> değeri 1 olacak şekilde patchledik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/dunya_donuyor-1.png" />
</p>
<ul>
<li>Sonra kodun bu kısmını eşit değilden eşit olacak şekilde pathcleyip her compare edildiğinde <code class="language-plaintext highlighter-rouge">edx</code> valuesunu yazdıracak şekilde conditional breakpoint koyduk.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/dunya_donuyor-2.png" />
</p>
<p align="center">
<img src="/assets/img/hackkaradeniz/dunya_donuyor-3.png" />
</p>
<ul>
<li>Daha sonrasında inputu orjinal exeye girince flagi elde ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/dunya_donuyor-4.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">HK{Z0n6uLD4K_y0Lcu5u_K4LM4S1N}</code></p>
<h3 id="asm">ASM:</h3>
<ul>
<li>Verilen <code class="language-plaintext highlighter-rouge">asm</code> kodunu <code class="language-plaintext highlighter-rouge">.s</code> uzantısı ile kaydettikten sonra <code class="language-plaintext highlighter-rouge">g++</code> ile derledik.Daha sonra <code class="language-plaintext highlighter-rouge">ida</code> ile açtığımızda okunabilir koda ulaştık.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/asm-1.jpg" />
</p>
<ul>
<li>Encode function:</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/asm-2.jpg" />
</p>
<ul>
<li>Burda <code class="language-plaintext highlighter-rouge">des</code> arrayini <code class="language-plaintext highlighter-rouge">ida</code>’da <code class="language-plaintext highlighter-rouge">hex</code> kısmından çekip düzenledik ve bu algoritmaya göre her karakter için <code class="language-plaintext highlighter-rouge">brute-force</code> yapacak scripti yazarak flagi elde ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/asm-3.jpg" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">HK{Karadenizin_bir_havasi_bir_yaylasi123}</code></p>
<h3 id="deep">Deep:</h3>
<p align="center">
<img src="/assets/img/hackkaradeniz/deep-1.png" />
</p>
<ul>
<li>Verilen file <code class="language-plaintext highlighter-rouge">ida</code>’da açtığımızda ilk başta kodun bu kısmını bakarak yaptık ancak yanlış flag geldiği için diğer fonksiyonlara baktık.<code class="language-plaintext highlighter-rouge">printf</code>‘in ayrı implementasyonunu olduğunu gördük ve baktığımızda bir şeyi decode ettiğini fark ettik ve bunu <code class="language-plaintext highlighter-rouge">python</code>‘da kodunu yazdık.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/deep-2.jpg" />
</p>
<ul>
<li>Register olarak 8-bit register kullandığından burada rotate rightada oluşabilecek maksimum kombinasyon 8 olmalıydı. Bunu da ekleyince <code class="language-plaintext highlighter-rouge">base64</code> formatında değer geldi.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/deep-3.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">HK{K4r4den1z1n_S1ber_Y1ld1zlar1}</code></p>
<h2 id="osint">OSINT</h2>
<h3 id="geoint">GEOINT:</h3>
<ul>
<li>Görseldeki kapının alt kısmındaki afişe dikkatlice baktığımızd <code class="language-plaintext highlighter-rouge">unterschriften sammelstelle</code> yazdığını görebiliriz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-1.png" />
</p>
<ul>
<li>Bu kelimeleri <code class="language-plaintext highlighter-rouge">Google Images</code> üzerinden arattığımızda karşımıza aşağıdaki gibi bir sonuç çıkıyor.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-2.png" />
</p>
<ul>
<li>Benzer afişli sonucun kaynağının <code class="language-plaintext highlighter-rouge">Aachen</code> merkezli bir bisikletçi aktivist topluluğu olduğunu görüyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-3.png" />
</p>
<ul>
<li>Buradan yola çıkarak Aachen’deki restoranları arıyoruz…</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-4.png" />
</p>
<ul>
<li>
<p>…ve konumun Macaroni olduğunu öğreniyoruz.</p>
</li>
<li>
<p>Sonrasında restoranın web sitesi üzerinde iletişim kanallarında bir mail adresi olduğunu görüyoruz.</p>
</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-5.png" />
</p>
<ul>
<li>Mail adresine ilişkin bir leak olup olmadığına baktığımızda ise <a href="https://123rf.com">123rf</a> üyeliğinin expose olduğunu öğreniyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-6.png" />
</p>
<ul>
<li>
<p><a href="https://www.bleepingcomputer.com/news/security/popular-stock-photo-service-hit-by-data-breach-83m-records-for-sale/">Bu</a> web sitesindeki habere göre sızan kullanıcı bilgileri arasında parola hash’lerinin de olduğunu öğreniyoruz.</p>
</li>
<li>
<p><a href="https://breachdirectory.org/">Bu</a> leak sitesinde mail adresini girğimizde ise aşağıdaki gibi bir sonuç karşımıza çıkmakta</p>
</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/geoint-7.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{d26fd6a8b28f2c2b3f2cdc3ac1c9d52bb41ca4ce}</code></p>
<h3 id="blackonblack">BlackOnBlack:</h3>
<ul>
<li>Soru dahilinde verilen siyah görseli <a href="https://aperisolve.fr">aperi</a> web sitesine upload ettiğimizde çıkan sonuçlardan biri aşağıdaki gibi oluyor.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/blackonblack-1.png" />
</p>
<ul>
<li>Okunabilirliği arttırmak adına Gimp üzerinden renk kanalları üzerinden kurcalama yaptıktan sonra aşağıdaki gibi bir görsel elde ettik.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/blackonblack-2.png" />
</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>OBQXG4Z2MU2HG6LQGRZXG5ZQOJSA====
</code></pre></div></div>
<ul>
<li><code class="language-plaintext highlighter-rouge">base64</code> ile encode edilmiş gibi görünüyor fakat anlamlı bir sonuç çıkmıyor. Base32 ile denediğimizde ise aşağıdaki gibi clean texti elde ediyoruz</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pass: e4syp4ssw0rd
</code></pre></div></div>
<ul>
<li>Password çıktığına göre muhtemelen görselde steghide ile bir dosya saklanmış durumda. Denediğimizde ise haklı olduğumuzu görüyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/blackonblack-3.png" />
</p>
<ul>
<li>Text dosyası içinde bahsi geçen BSSID’yi Wigle üzerinden arıyoruz ve flag’i buluyoruz.</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/blackonblack-4.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{bl4ck_ch405}</code></p>
<h3 id="rotasını-şaşıran-tır---1">Rotasını Şaşıran Tır - 1:</h3>
<ul>
<li>Soruda geçen +d0qbfGAndK82YmU0 hash analiz eden programlarca tanınamadı ve pastebin vb. sitelerde directory olarak çıkmadı. Fakat sonuç olarak Telegram invite linki olarak deneyince…</li>
</ul>
<p align="center">
<img src="/assets/img/hackkaradeniz/rotasini-sasiran-tir-1-1.png" />
</p>
<p><strong>FLAG:</strong> <code class="language-plaintext highlighter-rouge">Flag{M4sm4vi_K4r4d3niz4_H0sg3ldin}</code></p>
<hr />
<p><strong><a href="https://www.linkedin.com/in/mucahitkurtlar/">Mücahit KURTLAR</a></strong>
<strong><a href="https://www.linkedin.com/in/yigit-gundogdu">Yiğit GÜNDOĞDU</a></strong>
<strong><a href="https://www.linkedin.com/in/can-oztas/">Can ÖZTAŞ</a></strong>
<strong><a href="https://www.linkedin.com/in/f2u0a0d3/">Fuad ANZUROV</a></strong></p>HACKKARADENİZ CTF WRITE-UPSteganografi Nedir2021-03-29T13:00:00+00:002021-03-29T13:00:00+00:00https://www.aucyberclub.org/cybercamp/steganografi/2021/03/29/steganografi-nedir<p>Öncelikle tanımlardan başlayalım:</p>
<ul>
<li><strong>Steganografi</strong> : Görünüşte hiçbir zararı olmayan bir dosyaya, çeşitli yöntemlerle bir mesaj gizleme sanatıdır.</li>
<li><strong>Cover</strong>: Gizli mesajı bu dosyaya gömülür.</li>
<li><strong>Stego-medium</strong> , <strong>Stego-file</strong> : Gizli mesaj cover’a gömüldükten sonra oluşan dosyaya denir.</li>
</ul>
<p>Steganografi’yi üçe ayırmak da mümkün, Metin Steganografi, Resim Steganografi ve Ses Steganografi.</p>
<h3 id="1--metin-steganografi">1 ) Metin Steganografi</h3>
<p>Adından da anlaşılacağı gibi metinlere gizleme yöntemidir. Alıcı ve göndericinin yöntemde anlaştıkları sürece pek çok yöntem geliştirilebilir. Örnek olarak</p>
<ul>
<li>Baş harfleri kullanmak : After The Theater, All Clients Keep A Tab Down At Wesley’s Nook -> ATTACKATDOWN</li>
<li>Her kelimenin 3. harfine gizlemek : Fishing freshwater bends and saltwater coasts rewards anyone feeling stressed. Resourceful anglers usually find masterful leapers fun and admit swordfish rank overwhelming anyday. -> Send Lawyers, Guns, and Money.</li>
<li>Büyük harleri kullanmak : <strong>S</strong>usan sAys <strong>G</strong>aIl Lies. M<strong>A</strong>tt le<strong>T</strong>s <strong>S</strong>usan f<strong>E</strong>el jo<strong>V</strong>ial. <strong>E</strong>lated (or) a<strong>N</strong>gry? -> Sail at seven.</li>
</ul>
<p>Bu örnekler daha da çoğaltılabilir, CTFlerde kullanılabilecek toollar ile bu bölümü kapatacağım.</p>
<ul>
<li>Eğer <strong>snow</strong> ile ilgili bir şey geçiyor ise çok büyük ölçüde <strong>stegsnow</strong> tool’u kullanılmıştır. Bu tool basitçe boşlukları ve tabları kullanarak bir şifreleme yapıyor. <code class="language-plaintext highlighter-rouge">stegsnow -C file.txt</code> komutu ile şifreyi çözebilirsiniz. Ayrıca <a href="https://www.spammimic.com/">spammimic</a> toolu da bu işi yapmakta.</li>
<li>Bazı toollar unicode karakterleri kullanarak gizleme yapıyor, örnek olarak <a href="https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder">Unicode Text Steganography</a>. Bazı unicode karekterlerin yazılabilir(printable) olmamasını kullanarak oluşturulmuş yöntemdir kendileri.</li>
</ul>
<h3 id="2--resim-steganografi">2 ) Resim Steganografi</h3>
<p>Eveet geldik en çok kullanılan yöntemlere. Burda mesaj bir resmin içine gizlenmekte ve bir çok yolu var. Şimdilik sadece LSB’yi detaylı anlatıp CTF’lerde size yardımcı olacak toolları listeleyeceğim.</p>
<ul>
<li>
<p><strong>LSB</strong>:
Bildiğiniz üzere resimler RGB değerlerden oluşmakta (ve bazı diğer değerlerden). Bu değerlerinin birleşmiş haline piksel diyoruz. Kısaca <code class="language-plaintext highlighter-rouge">piksel = R.G.B..</code> diyebiliriz. Burdaki RGB değerleri 0 ile 255 arasında değişiyor ve bu RGB değerleri bir araya gelip farklı renkleri oluşturmamızı sağlıyor. Örnek olarak aşağıdaki resme bakabiliriz.<img src="/CyberCamp/assets/steganografi-nedir/01-color-table.png" alt="" />
Gördüğünüz gibi Kırmızı rengi oluşturmak için R’dan 255 G’den 0 B’den 0 alınmış.
Bilgisayar dilinde konuşursak bu değerler binary olarak <strong>00000000</strong> yani 0’dan <strong>11111111</strong> yani 255’e kadar değişiyor. LSB yöntemi ise bu binary değerlerin sadece belirli indexteki kısmını değiştirerek, rengi çok bozmadan içine mesaj gizlemektir. Örneğin 255 sayısının binary değerini düşünün <strong>11111111</strong>, sondaki <strong>1</strong>‘i <strong>0</strong> yaparsak 254 olacaktır. Bu renki o kadar da çok etkilemeyecektir. Sondaki bitleri istediğimiz gibi manipule edebiliriz yani. Mantığını anladıysanız sadece sondaki biti değil, sondaki iki biti de manipule edebiliriz çok farketmeyecektir yine. Hadi aucc logomuzun içine <a href="https://stegano.readthedocs.io/en/latest/installation/">stegano</a> toolu ile bir mesaj gizleyelim.</p>
<p><img src="/CyberCamp/assets/steganografi-nedir/AUCC-LSB.png" alt="" /></p>
<p><code class="language-plaintext highlighter-rouge">pipenv install Stegano</code> komutuyla Stegano toolunu kurduk, ardından <code class="language-plaintext highlighter-rouge">pipenv shell</code> komutu ile environment’i etkinleştiridik. <code class="language-plaintext highlighter-rouge">stegano-lsb hide -i AUCC-logo.png -m AUCyberClub -o AUCC-logo-stego-medium.png</code> komutuyla <code class="language-plaintext highlighter-rouge">AUCC-logo-stego-medium.png</code> ‘a <code class="language-plaintext highlighter-rouge">AUCyberClub </code> mesajını gizledik. Eğer iki resme de bakacak olursanız aralarında gözle görülür bir fark yok. Gizlediğimiz mesajı açığa çıkarmak için ise <code class="language-plaintext highlighter-rouge">stegano-lsb reveal -i AUCC-logo-stego-medium.png</code> komutunu kullandık. Başka bir sürü tool kullanılabilir ama mantık genelde böyle işlemekte.</p>
<p>İncelemek isteyenler için dosyalar burada -> <a href="/CyberCamp/assets/steganografi-nedir/AUCC-logo.png">AUCC-logo.png</a> , <a href="/CyberCamp/assets/steganografi-nedir/AUCC-logo-stego-medium.png">AUCC-logo-stego-medium.png</a></p>
</li>
<li>
<h4 id="diğer-toollar">Diğer Toollar</h4>
<ul>
<li>
<p><a href="https://aperisolve.fr/">Aperisolve</a> bu site bir sürü toolu aynı anda çalıştırmanızı sağlıyor, ctflerde çok iş yapıyor.
İçerisinde barındırdığı toollardan biraz bahsetmem gerekirse</p>
<p><strong>View</strong> kısmında resmin renk kanallarıyla oynayarak eğer varsa gizlenmiş mesajı çıkarmaya çalışıyor.</p>
<p><a href="https://github.com/zed-0xff/zsteg"><strong>Zsteg</strong></a> toolu ruby ile yazılmış bir stego toolu. PNG ve BMP dosyalarındaki gizlenmiş datayı bulmaya yarıyor.</p>
<p><a href="http://manpages.ubuntu.com/manpages/xenial/man1/steghide.1.html"><strong>Steghide</strong></a> toolu ise resim ve ses dosyalarına mesaj gizlemek için kullanılıyor ve genelde bir parola ile gizlendiğinden eğer elinizde parola ve resim varsa bu tool tam size göre.</p>
<p><a href="http://manpages.ubuntu.com/manpages/xenial/man1/outguess.1.html"><strong>Outguess</strong></a> , <a href="http://manpages.ubuntu.com/manpages/bionic/man8/foremost.8.html"><strong>Foremost</strong></a> , <a href="http://manpages.org/binwalk"><strong>Binwalk</strong></a> toolları ise genelde magic bytelara bakarak gizlenmiş bir dosya var mı diye bakıyor. Burada bir <strong>Not</strong> bırakmak istiyorum, kendimden biliyorum png dosyalarında her zaman <strong>zlib</strong> türünde bir dosya vardır, sorular genelde bunlarla ilgili değildir, o yüzden zlibten uzak durun :)</p>
<p><a href="https://linux.die.net/man/1/exiftool"><strong>ExifTool</strong></a> ise resimlerin metadatasını görmenizi sağlar, burada genelde lokasyon , fotoğrafın sahibi gibi bilgiler olur.</p>
<p><a href="https://linux.die.net/man/1/strings"><strong>Strings</strong></a> bu kısım ise dosyadan çıkarabildiği yazılabilir yazıları gösterir, sadece resim dosyaları için değil ses dosyalarında da işe yarar</p>
</li>
<li><a href="https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve">stegsolve.jar</a> bu tool da offline olarak bir sürü tool barındırıyor.</li>
<li><a href="https://github.com/ragibson/Steganography">Steganography</a> bu tool ise içinde WavSteg LSBSteg StegDetect araçlarını barındırıyor ki, ctflerde çok işe yarıyorlar.</li>
</ul>
<h3 id="3--ses-steganografi">3 ) Ses Steganografi</h3>
<p>Her dosya türüne olduğu gibi ses dosyalarına da mesaj gizlenebilir. CTF’lerde en çok karşımıza çıkan ses dosyası türü wav olmakta. Kullanabileceğiniz toollara bakalım.</p>
<ul>
<li>
<p><a href="https://github.com/ragibson/Steganography#WavSteg">WavSteg</a> LSB yöntemi sadece resimlerde değil ses dosyalarında da kullanılıyor. Ses datasının son bitleriyle oynamak biraz gürültülü bir ses oluştursada mesaj gizlemek için birebir.</p>
</li>
<li>
<p><a href="https://www.sonicvisualiser.org/">Sonic Visualizer</a> Bazen mesaj ses dosyalarının kanallarına gizleniyor ve gizleme işlemi için <a href="https://www.abc.se/~re/Coagula/Coagula.html">Coagula</a> toolu kullanılıyor. Eğer bize verilen ses dosyasını sonic visualizer de açıp <code class="language-plaintext highlighter-rouge">Layer-> Add Spectrogram</code> yolunu izleyerek spectogram eklersek müzikteki gizli mesajı buluruz.</p>
<p>Merak edenler için aşağıdaki ses dosyası -> <a href="/CyberCamp/assets/steganografi-nedir/AUCC-spectrogram.wav">AUCC-spectrogram.wav</a></p>
<p><img src="/CyberCamp/assets/steganografi-nedir/AUCC-spectrogram.png" alt="" /></p>
</li>
</ul>
</li>
</ul>
<h2 id="yararlı-linkler">Yararlı linkler</h2>
<p>Buradaki makalelere de göz atmanızı şiddetle tavsiye ederim.</p>
<ul>
<li><a href="https://github.com/mdisec/topluluk-makale/blob/master/Steganografi/steganografi.md">steganografi ,mdisec/topluluk-makale</a></li>
<li><a href="https://0xrick.github.io/lists/stego/">0xrick.github.io , stego</a></li>
<li><a href="https://book.hacktricks.xyz/stego/stego-tricks">hacktricks, stego</a></li>
<li><a href="https://github.com/JohnHammond/ctf-katana#steganography">ctf-katana, steganography</a></li>
</ul>
<p>Ve yazımızın sonuna geldik. Teorik bilgiden çok bildiğim ve karşılaştığım kadarıyla öğrendiklerimi anlattım. Sağlıcakla kalın.</p>Ebubekir TürkerÖncelikle tanımlardan başlayalım:Web Nasıl Çalışır?2021-03-28T19:02:47+00:002021-03-28T19:02:47+00:00https://www.aucyberclub.org/cybercamp/web/2021/03/28/web-nasil-calisir<h1>Web Nasıl Çalışır?</h1>
<p>
Bilgisayarın başına oturduk ve bir şeyi merak ettik: Web Nasıl Çalışır? Bunu
anlamak için tarayıcımızı açtık, google’a girdik, sonra “Web Nasıl Çalışır”
yazdık ve karşımıza en üstte bu yazı çıktı ve tıkladık okumaya başladık diyelim.
Bu yazıda, bu yazıyı okuyabilmemiz için arkada nelerin çalıştığını ve bunların
nasıl çalıştığını anlamaya çalışacağız.
</p>
<p>
<img src="/CyberCamp/assets/2020-03-28-web-nasil-calisir/image2.jpg" width="" alt="alt_text" title="image_tooltip" />
</p>
<p>
İlk olarak adım adım neler olduğunu anlamamız lazım. Sonrasında ise bu olan
şeylerin nasıl olduğuna bakacağız.
</p>
<p>
Bu yazıyı açmak için linke tıkladık:
</p>
<p>
1-> Tarayıcımız (Google Chrome,Firefox,Opera vs.) tıklama sinyalini anladı
bununla ilgili veriyi işletim sistemimize gönderdi.
</p>
<p>
2-> İşletim sistemimiz paketi aldı modeme gönderdi
</p>
<p>
3-> Modemimiz bu paketi aldı ve internete gönderdi
</p>
<p>
4-> İnternette paket yolunu buldu sunucu paketi anladı cevabı geri internete
gönderdi
</p>
<p>
5-> Paket tekrardan modeme modemden bilgisayarımıza, ordan işletim sisteminden
tarayıcımıza geldi ve ordan da ekrana sayfamız geldi.
</p>
<p>
Böyle bakıldığı zaman bi sinyal bizden sunucuya sunucudan bize geliyor. Basitçe
olan şeyler bu fakat kısaca 5 adımda özetlediğimiz bu olaylar zincirinde
“aldı,anladı,buldu” gibi bazı kelimeler kullandık. Bilgisayar bilimlerinde
maalesef anladı deyince kurtulmak olmuyor. Şimdi de daha derinden neler olduğuna
bakalım.
</p>
<p>
Her şey yazıya tıklamamızla başlıyor. Ulaşmak istediğimiz site “<a href="www.aucyberclub.org">www.aucyberclub.org</a>” olsun. Tarayıcımızın ilk
görevi bu adresin IP adresini bulmak. Bunun için “<strong>cache</strong>”
dediğimiz bir tabloya bakıyor ve daha önce bu siteye girmişsek hiç uğraşmadan ip
adresini buluyor. Eğer ki bulamazsa işletim sistemimize soruyor ve eğer işletim
sistemimiz de daha önceden hiç gidilmemişse o zaman işler karışıyor.
</p>
<h4>DNS(Domain Name System)</h4>
<p>
Ev telefonlarının ilk yaygınlaştığı zamanlarda insanlar birinin telefon
numarasını bulmak için dağıtılan adres defterlerinden alırmış ve aradığı
numarayı oradan bulurmuş. DNS dediğimiz şey de aynı işi yapan bir çeşit adres
defteri sistemi. “aucyberclub.com” aradığımız yer ve bu sitenin tam adresini
bulabilmek için; belli bir hiyerarşiye sahip olan bu DNS sunucularına sormamız
gerekiyor ve böylece adresin tam yerini bulabilmemiz mümkün oluyor.
</p>
<p>
<img src="/CyberCamp/assets/2020-03-28-web-nasil-calisir/image3.png" width="" alt="alt_text" title="image_tooltip" />
</p>
<p>
Şimdi DNS’in ne olduğu hakkında birazcık fikrimiz var ve modemimiz de paketi
göndermek için hazır. Modemi aldığımız zaman o hiç dokunmadığımız internet
kablosunun nereye gittiğini açıklama vakti geldi.O kablo kullandığınız internet
servis sağlayıcısına gidiyor. Evet öyle çok da ilginç bir şey değil. Bu kablo
sayesinde modemimiz, internet servis sağlayıcısı(ISP)’nin “DNS Çözümleyici”
dediğimiz sunucuları üzerinden gitmek istediği adresi öğrenebiliyor. DNS
Çözümleyici’yi de bilgisayardaki “cache”in büyük hali gibi düşünebiliriz.
Diyelim ki burası da bulamadı o zaman önce Root Server dediğimiz bir üst
sunucuya soruyor, orda da yoksa bir üstteki Top Level Domain(TLD) sunucularına
soruyor.O da bilemezse en son Authorative Name Server dediğimiz bi sunucu bize
söylüyor. Yani dediğimiz gibi o ona soruyor o ona soruyor ve biri diyor ki
sonunda abi ben biliyorum onun adresi ***.***.***.** diyor ve tekrar adres bizim
işletim sistemimize kadar ulaşıyor.
</p>
<p>
Daha hiçbir şey olmuş değil. Nereye göndereceğimizi öğrendik şimdi ne
istediğimizi sunucuya iletmek için paketi oluşturmamız gerekiyor.
“aucyberclub.org” güvenli bir site olduğu için https ile bağlanmamız gerekiyor.
Şimdi işler biraz daha teknik olmaya başlıyor.
</p>
<p>
HTTPS için paketlerimizin şifrelenmesi ve bunların SSL ya da TLS dediğimiz
protokoller üzerinden şifrelenmiş haliyle aktarılması gerekiyor. Böylece
“ortadaki adam saldırıları” gibi saldırılardan korunmuş oluyoruz. Protokol mü
adam mı? diye soruyorsanız Network101 yazımızı okumanızı öneririm.
</p>
<p>
Son olarak paketimizi oluşturabilmemiz için bir takım metodları öğrenmemiz
gerekiyor:
</p>
<p>
<strong><span style="text-decoration:underline;">GET :</span></strong> URI
kullanarak belirli bir sunucudan bilgi istemek için kullanılır. GET isteği ile
sadece veri alırız ve herhangi bir değişiklikte bulunmayız.
</p>
<p>
<strong><span style="text-decoration:underline;">DELETE : </span></strong>Adı
üstünde karşı sunucudan bir şey silmek için kullanılır.
</p>
<p>
<strong><span style="text-decoration:underline;">PUT : </span></strong>Sunucuda
veri oluşturmak ya da güncellemek için kullanılır.
</p>
<p>
<strong><span style="text-decoration:underline;">POST : </span></strong>Post da
sunucuda veri oluşturmak için kullanılır.
</p>
<p>
Şimdi biz sadece linke tıkladık ve sayfayı görmek istiyoruz. Bu yüzden GET
isteğinde bulunacağız. Paketimizi hazırladık ve fırlatmaya hazırız.
</p>
<p>
Paketi fırlatmadan önce bilmemiz gereken bir şey var, sunucu şu an açık mı? Bizi
kabul edecek mi? Bunları öğrenmemiz için öncelikle sunucuyla aramızda TCP
bağlantısı kurmamız gerekiyor. TCP’nin ne olduğunu merak ediyorsanız yine
Network101 yazımızı okuyabilirsiniz. TCP bağlantısını kurduktan sonra HTTP
paketimizi göndermeye hazırız. Paketi modemden adrese gönderdik ISP üzerinden
kablolar aracılığıyla o routerdan bu router’a derken paketimiz gideceği yere
ulaştı.
</p>
<p>
<img src="/CyberCamp/assets/2020-03-28-web-nasil-calisir/image1.jpg" width="" alt="alt_text" title="image_tooltip" />
</p>
<p>
Yukarıdaki fotoğraftaki diz üstü bilgisayarların olduğu tarafı bizim kendi
evimiz, diğer tarafı da ,duvar da dahi,l ulaşmak istediğimiz sunucu olarak
düşünelim.
</p>
<p>
Paketimiz sunucu tarafına ulaştığı anda bu duvara toslayacak. Bu duvar
birçoğumuzun duyduğu o malum Firewall(Güvenlik Duvarı,Ateş Duvarı). Firewall’un
basitçe yaptığı şey aslında şu şu portlardan, şu şu adreslerden gelen paketlere
izin ver diğerlerine izin verme demek. Bizim paketimizi firewall inceledikten
sonra uygun olduğuna karar verdikten sonra içeri alacak. İçerisi de birçok
farklı görev için gruplandırılmış çeşitli bilgisayarlardan oluşuyor. Mesela web
sayfasındaki fotoğraflar için farklı bir sunucu, oturum için farklı bir sunucu
olabilir. Bu, sunucu sisteminin tasarımına göre değişebilir. Biz şimdilik basit
gidelim bir tane içinde Apache(bir çeşit web sunucusu) yüklü olan bir
bilgisayara ulaştığımızı varsayalım. Paketimiz bu yazılıma ulaştıktan sonra
yazılım bizim gönderdiğimiz paketin içeriğini okuyacak: “hmm GET aucyberclub.org
demiş, o zaman bu siteyi ona geri gönderelim diyecek” o sırada aramızdaki TCP
bağlantısı da devam ettiği için bizimle iletişimin kopmadığından emin olunca o
da yine bir paket oluşturacak ve o paket sunucudan bize kadar yine uzuun bir
yoldan geçip gelecek. Bize ulaştıktan sonra da yine işletim sistemimiz
tarayıcıya bu paketi ulaştıracak. Tarayıcımız da bu paketi içindeki motor
sayesinde ekrana yansıtacak.
</p>
<p>
Bu şekilde anlatılınca bile aslında çok yüzeysel kalan birçok konu var. Fakat
kendi başına bir ders olarak okutulan webin nasıl çalıştığını her ayrıntısı ile
tek yazıda anlatmak mümkün değil. Bu yüzden takipte kalın ve daha da derine
ineceğimiz diğer yazılarımızı bekleyin.
</p>Berkay ÇelebiWeb Nasıl Çalışır? Bilgisayarın başına oturduk ve bir şeyi merak ettik: Web Nasıl Çalışır? Bunu anlamak için tarayıcımızı açtık, google’a girdik, sonra “Web Nasıl Çalışır” yazdık ve karşımıza en üstte bu yazı çıktı ve tıkladık okumaya başladık diyelim. Bu yazıda, bu yazıyı okuyabilmemiz için arkada nelerin çalıştığını ve bunların nasıl çalıştığını anlamaya çalışacağız. İlk olarak adım adım neler olduğunu anlamamız lazım. Sonrasında ise bu olan şeylerin nasıl olduğuna bakacağız. Bu yazıyı açmak için linke tıkladık: 1-> Tarayıcımız (Google Chrome,Firefox,Opera vs.) tıklama sinyalini anladı bununla ilgili veriyi işletim sistemimize gönderdi. 2-> İşletim sistemimiz paketi aldı modeme gönderdi 3-> Modemimiz bu paketi aldı ve internete gönderdi 4-> İnternette paket yolunu buldu sunucu paketi anladı cevabı geri internete gönderdi 5-> Paket tekrardan modeme modemden bilgisayarımıza, ordan işletim sisteminden tarayıcımıza geldi ve ordan da ekrana sayfamız geldi. Böyle bakıldığı zaman bi sinyal bizden sunucuya sunucudan bize geliyor. Basitçe olan şeyler bu fakat kısaca 5 adımda özetlediğimiz bu olaylar zincirinde “aldı,anladı,buldu” gibi bazı kelimeler kullandık. Bilgisayar bilimlerinde maalesef anladı deyince kurtulmak olmuyor. Şimdi de daha derinden neler olduğuna bakalım. Her şey yazıya tıklamamızla başlıyor. Ulaşmak istediğimiz site “www.aucyberclub.org” olsun. Tarayıcımızın ilk görevi bu adresin IP adresini bulmak. Bunun için “cache” dediğimiz bir tabloya bakıyor ve daha önce bu siteye girmişsek hiç uğraşmadan ip adresini buluyor. Eğer ki bulamazsa işletim sistemimize soruyor ve eğer işletim sistemimiz de daha önceden hiç gidilmemişse o zaman işler karışıyor. DNS(Domain Name System) Ev telefonlarının ilk yaygınlaştığı zamanlarda insanlar birinin telefon numarasını bulmak için dağıtılan adres defterlerinden alırmış ve aradığı numarayı oradan bulurmuş. DNS dediğimiz şey de aynı işi yapan bir çeşit adres defteri sistemi. “aucyberclub.com” aradığımız yer ve bu sitenin tam adresini bulabilmek için; belli bir hiyerarşiye sahip olan bu DNS sunucularına sormamız gerekiyor ve böylece adresin tam yerini bulabilmemiz mümkün oluyor. Şimdi DNS’in ne olduğu hakkında birazcık fikrimiz var ve modemimiz de paketi göndermek için hazır. Modemi aldığımız zaman o hiç dokunmadığımız internet kablosunun nereye gittiğini açıklama vakti geldi.O kablo kullandığınız internet servis sağlayıcısına gidiyor. Evet öyle çok da ilginç bir şey değil. Bu kablo sayesinde modemimiz, internet servis sağlayıcısı(ISP)’nin “DNS Çözümleyici” dediğimiz sunucuları üzerinden gitmek istediği adresi öğrenebiliyor. DNS Çözümleyici’yi de bilgisayardaki “cache”in büyük hali gibi düşünebiliriz. Diyelim ki burası da bulamadı o zaman önce Root Server dediğimiz bir üst sunucuya soruyor, orda da yoksa bir üstteki Top Level Domain(TLD) sunucularına soruyor.O da bilemezse en son Authorative Name Server dediğimiz bi sunucu bize söylüyor. Yani dediğimiz gibi o ona soruyor o ona soruyor ve biri diyor ki sonunda abi ben biliyorum onun adresi ***.***.***.** diyor ve tekrar adres bizim işletim sistemimize kadar ulaşıyor. Daha hiçbir şey olmuş değil. Nereye göndereceğimizi öğrendik şimdi ne istediğimizi sunucuya iletmek için paketi oluşturmamız gerekiyor. “aucyberclub.org” güvenli bir site olduğu için https ile bağlanmamız gerekiyor. Şimdi işler biraz daha teknik olmaya başlıyor. HTTPS için paketlerimizin şifrelenmesi ve bunların SSL ya da TLS dediğimiz protokoller üzerinden şifrelenmiş haliyle aktarılması gerekiyor. Böylece “ortadaki adam saldırıları” gibi saldırılardan korunmuş oluyoruz. Protokol mü adam mı? diye soruyorsanız Network101 yazımızı okumanızı öneririm. Son olarak paketimizi oluşturabilmemiz için bir takım metodları öğrenmemiz gerekiyor: GET : URI kullanarak belirli bir sunucudan bilgi istemek için kullanılır. GET isteği ile sadece veri alırız ve herhangi bir değişiklikte bulunmayız. DELETE : Adı üstünde karşı sunucudan bir şey silmek için kullanılır. PUT : Sunucuda veri oluşturmak ya da güncellemek için kullanılır. POST : Post da sunucuda veri oluşturmak için kullanılır. Şimdi biz sadece linke tıkladık ve sayfayı görmek istiyoruz. Bu yüzden GET isteğinde bulunacağız. Paketimizi hazırladık ve fırlatmaya hazırız. Paketi fırlatmadan önce bilmemiz gereken bir şey var, sunucu şu an açık mı? Bizi kabul edecek mi? Bunları öğrenmemiz için öncelikle sunucuyla aramızda TCP bağlantısı kurmamız gerekiyor. TCP’nin ne olduğunu merak ediyorsanız yine Network101 yazımızı okuyabilirsiniz. TCP bağlantısını kurduktan sonra HTTP paketimizi göndermeye hazırız. Paketi modemden adrese gönderdik ISP üzerinden kablolar aracılığıyla o routerdan bu router’a derken paketimiz gideceği yere ulaştı. Yukarıdaki fotoğraftaki diz üstü bilgisayarların olduğu tarafı bizim kendi evimiz, diğer tarafı da ,duvar da dahi,l ulaşmak istediğimiz sunucu olarak düşünelim. Paketimiz sunucu tarafına ulaştığı anda bu duvara toslayacak. Bu duvar birçoğumuzun duyduğu o malum Firewall(Güvenlik Duvarı,Ateş Duvarı). Firewall’un basitçe yaptığı şey aslında şu şu portlardan, şu şu adreslerden gelen paketlere izin ver diğerlerine izin verme demek. Bizim paketimizi firewall inceledikten sonra uygun olduğuna karar verdikten sonra içeri alacak. İçerisi de birçok farklı görev için gruplandırılmış çeşitli bilgisayarlardan oluşuyor. Mesela web sayfasındaki fotoğraflar için farklı bir sunucu, oturum için farklı bir sunucu olabilir. Bu, sunucu sisteminin tasarımına göre değişebilir. Biz şimdilik basit gidelim bir tane içinde Apache(bir çeşit web sunucusu) yüklü olan bir bilgisayara ulaştığımızı varsayalım. Paketimiz bu yazılıma ulaştıktan sonra yazılım bizim gönderdiğimiz paketin içeriğini okuyacak: “hmm GET aucyberclub.org demiş, o zaman bu siteyi ona geri gönderelim diyecek” o sırada aramızdaki TCP bağlantısı da devam ettiği için bizimle iletişimin kopmadığından emin olunca o da yine bir paket oluşturacak ve o paket sunucudan bize kadar yine uzuun bir yoldan geçip gelecek. Bize ulaştıktan sonra da yine işletim sistemimiz tarayıcıya bu paketi ulaştıracak. Tarayıcımız da bu paketi içindeki motor sayesinde ekrana yansıtacak. Bu şekilde anlatılınca bile aslında çok yüzeysel kalan birçok konu var. Fakat kendi başına bir ders olarak okutulan webin nasıl çalıştığını her ayrıntısı ile tek yazıda anlatmak mümkün değil. Bu yüzden takipte kalın ve daha da derine ineceğimiz diğer yazılarımızı bekleyin.