<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ssl on Willis Vandevanter</title><link>https://silentrobots.com/tags/ssl/</link><description>Technical security research and notes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 27 Sep 2016 00:00:00 +0000</lastBuildDate><atom:link href="https://silentrobots.com/tags/ssl/index.xml" rel="self" type="application/rss+xml"/><item><title>Finding Hosts Using SSL Certificate Organization And Censys</title><link>https://silentrobots.com/finding-hosts-using-ssl-certificate-organization-and-censys/</link><pubDate>Tue, 27 Sep 2016 00:00:00 +0000</pubDate><guid>https://silentrobots.com/finding-hosts-using-ssl-certificate-organization-and-censys/</guid><description>&lt;img src="https://silentrobots.com/images/2022/11/beer2.png" alt="Featured image of post Finding Hosts Using SSL Certificate Organization And Censys" /&gt;&lt;p&gt;Finding hosts or domain names associated with a company where the domain name does not include the name of the company can sometimes be difficult. There are common ways to do it such as ASN or scope information (e.g. bug bounty ToE or IP block).&lt;/p&gt;
&lt;p&gt;One technique that I use (and I am guessing others do as well) is through an Organization field in a SSL Certificate that is shared by multiple domains. For example, a certificate from &lt;a class="link" href="https://www.facebook.com/" target="_blank" rel="noopener"
 &gt;https://www.facebook.com&lt;/a&gt; and &lt;a class="link" href="https://parse.com/" target="_blank" rel="noopener"
 &gt;https://parse.com&lt;/a&gt; are signed by the same organization.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silentrobots.com/images/external/facebook.png" alt="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Notice the Organization in the SSL Certificate and compare to the image below&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silentrobots.com/images/external/parse.png" alt="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Notice the Organization in the SSL Certificate and compare to the image above&lt;/p&gt;
&lt;p&gt;This is an easy example. Parse is listed on the Facebook Mergers or Acquisitions page (&lt;a class="link" href="https://en.wikipedia.org/wiki/List_of_mergers_and_acquisitions_by_Facebook" target="_blank" rel="noopener"
 &gt;https://en.wikipedia.org/wiki/List_of_mergers_and_acquisitions_by_Facebook&lt;/a&gt;) and the FB bug bounty terms (&lt;a class="link" href="https://www.facebook.com/whitehat" target="_blank" rel="noopener"
 &gt;https://www.facebook.com/whitehat&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;However, consider a more complex example like &lt;a class="link" href="https://hackerone.com/reports/154425" target="_blank" rel="noopener"
 &gt;“HackerOne: Subdomain takeover on https://fastly.sc-cdn.net/”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First, if you aren’t familiar with sub-domain take over &lt;a class="link" href="https://shubs.io/high-frequency-security-bug-hunting-120-days-120-bugs/" target="_blank" rel="noopener"
 &gt;this&lt;/a&gt; and &lt;a class="link" href="https://labs.detectify.com/2014/10/21/hostile-subdomain-takeover-using-herokugithubdesk-more/" target="_blank" rel="noopener"
 &gt;this&lt;/a&gt; are awesome.&lt;/p&gt;
&lt;p&gt;In the case above, the subdomain fastly.sc-cdn.net is owned by Snapchat which is not obvious from the domain name. Personally, I do not know how ebrietas found that domain. DNS Bruteforcing would work. It could also be done by shared SSL Certificates on the Organization name.&lt;/p&gt;
&lt;p&gt;A few months back I wrote a &lt;a class="link" href="https://gist.github.com/BuffaloWill/a4862b377404b15830b7cada1f6731a5" target="_blank" rel="noopener"
 &gt;script&lt;/a&gt; that uses the Censys API to look for domains with the same Organization field in the SSL certificate.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby censys_cert_search.rb &lt;span class="s1"&gt;&amp;#39;Snapchat Inc.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Page: &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;se.snap-dev.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;se.snap-dev.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt;+&lt;span class="p"&gt;|&lt;/span&gt; Checking se.snap-dev.net
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;se.snap-dev.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 107.178.248.183
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;se.snap-dev.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 107.178.248.183
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt;+&lt;span class="p"&gt;|&lt;/span&gt; Checking se.snap-dev.net
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;se.snap-dev.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 107.178.248.183
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;se.snap-dev.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 107.178.248.183
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;spectre.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;spectre.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt;+&lt;span class="p"&gt;|&lt;/span&gt; Checking spectre.sc-corp.net
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spectre.sc-corp.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 130.211.14.254
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spectre.sc-corp.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 130.211.14.254
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt;+&lt;span class="p"&gt;|&lt;/span&gt; Checking spectre.sc-corp.net
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spectre.sc-corp.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 130.211.14.254
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spectre.sc-corp.net. &lt;span class="m"&gt;300&lt;/span&gt; IN A 130.211.14.254
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you checkout the code, the script is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using the Censys Certificate API to search on the Organization string matching ‘Snapchat Inc.’ (i.e. O=Snapchat Inc.*)&lt;/li&gt;
&lt;li&gt;Parsing out the Common Name and Alternate Names from the SSL Certificate response&lt;/li&gt;
&lt;li&gt;Performing a DNS lookup for each name found&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also run the script to skip over common names that could’ve been easily found in other ways (e.g. dev.snapchat.com). This focuses the effort on hard to find systems. Adding a third argument skips DNS lookup.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby censys_cert_search.rb &lt;span class="s1"&gt;&amp;#39;Snapchat Inc.&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;*snapchat.com&amp;#39;&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Page: &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;se.snap-dev.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;se.snap-dev.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;spectre.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;spectre.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.targeting.snapads.com&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;targeting.snapads.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.targeting.snapads.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rest-escluster.hydrasearch.sc-prod.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rest-escluster.hydrasearch.sc-prod.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;restfulgit.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;restfulgit.sc-corp.net&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;attribution.snapads.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;attribution.snapads.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parsed.extensions.subject_alt_name.dns_names&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;snapchat.com&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;mail.support.snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;parsed.subject.common_name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*.snapchat.com&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;As you can see not perfect but I’ve found it really useful in the past. It was hack for something else and I’ll update as time permits.&lt;/p&gt;</description></item></channel></rss>