lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Sun, 7 Jan 2007 00:53:07 +0100 (CET)
From: Michal Zalewski <>
Subject: 0trace - traceroute on established connections

I'd like to announce the availability of a free security reconnaissance /
firewall bypassing tool called 0trace. This tool enables the user to
perform hop enumeration ("traceroute") within an established TCP
connection, such as a HTTP or SMTP session. This is opposed to sending
stray packets, as traceroute-type tools usually do.

The important benefit of using an established connection and matching TCP
packets to send a TTL-based probe is that such traffic is happily allowed
through by many stateful firewalls and other defenses without further
inspection (since it is related to an entry in the connection table).

I'm not aware of any public implementations of this technique, even though
the concept itself is making rounds since 2000 or so; because of this, I
thought it might be a good idea to give it a try.

[ Of course, I might be wrong, but Google seems to agree with my
  assessment. A related use of this idea is 'firewalk' by Schiffman and
  Goldsmith, a tool to probe firewall ACLs; another utility called
  'tcptraceroute' by Michael C. Toren implements TCP SYN probes, but since
  the tool does not ride an existing connection, it is less likely to
  succeed (sometimes a handshake must be completed with the NAT device
  before any traffic is forwarded). ]

A good example of the difference is ( - a
regular UDP/ICMP traceroute and tcptraceroute both end like this:

14 (  ...
15 ( ...
16  * * *
17  * * *
18  * * *

Let's do the same using 0trace: we first manually telnet to
to port 80, then execute: './ eth0', and finally
enter 'GET / HTTP/1.0' (followed by a single, not two newlines) to solicit
some client-server traffic but keep the session alive for the couple of
seconds 0trace needs to complete the probe.

The output is as follows:

17 <---
18     <--- new data
19      <---
Target reached.

The last three lines reveal firewalled infrastructure, including private
addresses used on the inside of the company. This is obviously an
important piece of information as far as penetration testing is concerned.

Of course, 0trace won't work everywhere and all the time. The tool will
not produce interesting results in the following situations:

  - Target's firewall drops all outgoing ICMP messages,

  - Target's firewall does TTL or full-packet rewriting,

  - There's an application layer proxy / load balancer in the way
    (Akamai, in-house LBs, etc),

  - There's no notable layer 3 infrastructure behind the firewall.

The tool also has a fairly distinctive TCP signature, and as such, it can
be detected by IDS/IPS systems.

Enough chatter - the tool is available here (Linux version):

Note: this is a 30-minute hack that involves C code coupled with a cheesy
shellscript. It may not work on non-Linux systems, and may fail on some
Linuxes, too. It could be improved in a number of ways - so if you like
it, rewrite it.

Many thanks for Robert Swiecki ( for forcing me to
finally give this idea some thought and develop this piece.


Powered by blists - more mailing lists