<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Oob on bitfriends' blog</title><link>https://b17fr13nds.github.io/tags/oob/</link><description>Recent content in Oob on bitfriends' blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 15 Jan 2025 19:58:53 +0100</lastBuildDate><atom:link href="https://b17fr13nds.github.io/tags/oob/index.xml" rel="self" type="application/rss+xml"/><item><title>htaas - UofT CTF 2025</title><link>https://b17fr13nds.github.io/posts/uoft_htaas/</link><pubDate>Wed, 15 Jan 2025 19:58:53 +0100</pubDate><guid>https://b17fr13nds.github.io/posts/uoft_htaas/</guid><description>&lt;p&gt;While playing UofTCTF I solved hash table as a service (htaas).
We were given a simple heap menu, which lets us create, get and set hash table entries:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1. New Hash Table
2. Set
3. Get
4. Exit
&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Upon inspecting the source, we spot some interesting things. There is an array that contains &lt;code&gt;hashTable&lt;/code&gt;s,
i.e. it contains the number of entries in the hash table and its start address:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;0x5c1e1caad040 &amp;lt;hashTables&amp;gt;:	0x0000000000000010	0x00005c1e4f4072a0
0x5c1e1caad050 &amp;lt;hashTables+16&amp;gt;:	0x0000000000000000	0x0000000000000000
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each &lt;code&gt;hashTable&lt;/code&gt; consits of &lt;code&gt;n&lt;/code&gt; entries, which look like this:&lt;/p&gt;</description></item><item><title>TLN - snakeCTF 2024</title><link>https://b17fr13nds.github.io/posts/tln_snake/</link><pubDate>Mon, 09 Sep 2024 08:46:34 +0200</pubDate><guid>https://b17fr13nds.github.io/posts/tln_snake/</guid><description>&lt;p&gt;This weekend I played snakeCTF for fun and managed to solve a few pwns. One of them was TLN.
The challenge code was pretty simple, introducing a classical OOB index vulnerability:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;case&lt;/span&gt; &lt;span style="color:#79c0ff;font-weight:bold"&gt;OPT_SET&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;print&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;Index: &amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;get_int&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;print&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;Content: &amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;read_exact&lt;/span&gt;(&lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;amp;&lt;/span&gt;(notes[index].content), &lt;span style="color:#ff7b72"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#ff7b72"&gt;item_t&lt;/span&gt;) &lt;span style="color:#ff7b72;font-weight:bold"&gt;-&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; notes[index].content[&lt;span style="color:#ff7b72"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#ff7b72"&gt;item_t&lt;/span&gt;) &lt;span style="color:#ff7b72;font-weight:bold"&gt;-&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;] &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see, no bounds checks at all.
The &lt;code&gt;notes&lt;/code&gt; array consists of elements of &lt;code&gt;item_t&lt;/code&gt;, which is defined like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;typedef&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;char&lt;/span&gt; content[&lt;span style="color:#a5d6ff"&gt;8&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#ff7b72"&gt;item_t&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To sum it up: we can write 7 bytes at a time relative to the starting address of &lt;code&gt;notes&lt;/code&gt;.
The declaration of the array is what&amp;rsquo;s particulary interesting. The keyword &lt;code&gt;thread_local&lt;/code&gt; is used here:&lt;/p&gt;</description></item><item><title>valorn't - PlaidCTF 2024</title><link>https://b17fr13nds.github.io/posts/valornt_plaid/</link><pubDate>Tue, 23 Apr 2024 20:00:41 +0200</pubDate><guid>https://b17fr13nds.github.io/posts/valornt_plaid/</guid><description>&lt;p&gt;I solved the easy pwn chall &amp;ldquo;valorn&amp;rsquo;t&amp;rdquo; during PlaidCTF while playing with Friendly Maltese Citizens.&lt;/p&gt;
&lt;p&gt;As usual, the goal was to win the game and read the flag&lt;/p&gt;
&lt;h1 id=""&gt;
 
 &lt;a class="heading-link" href="#"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;int&lt;/span&gt; ret &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;play_pew_pew_game&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; (ret &lt;span style="color:#ff7b72;font-weight:bold"&gt;==&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#d2a8ff;font-weight:bold"&gt;read_flage&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=""&gt;
 
 &lt;a class="heading-link" href="#"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In order to win, &lt;code&gt;is_cheater&lt;/code&gt; had to be set and the enemy team win-counter has to be &lt;code&gt;0&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>