<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Router on bramp.net</title>
    <link>https://blog.bramp.net/</link>
    <description>Recent content in Router on bramp.net</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-GB</language>
    <lastBuildDate>Sun, 22 Jan 2012 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.bramp.net/tags/router/" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Obtaining the firmware for Linksys E4200v2</title>
      <link>https://blog.bramp.net/post/2012/01/22/obtaining-the-firmware-for-linksys-e4200v2/</link>
      <pubDate>Sun, 22 Jan 2012 00:00:00 +0000</pubDate>
      
      <guid>https://blog.bramp.net/post/2012/01/22/obtaining-the-firmware-for-linksys-e4200v2/</guid>
      <description><p>I recently got a Linksys E4200v2 wireless router. It’s pretty cool, supports IPv6, 2.4Ghz and 5Ghz wifi networks, VPN, etc. The one downside is that the firmware for the router is not available from <a href="http://homesupport.cisco.com/en-us/wireless/linksys/E4200">Linksys’s website</a>, and the <a href="http://homesupport.cisco.com/en-us/gplcodecenter">GPL code</a> has not been made available, yet… However, the router has been able to pull updates itself from the Internet.</p>
<p>So I wanted to acquire the firmware to see if I could do something fun with the router. I set about to figure out how the router does this. My plan was to set my laptop up between Internet interface on the router, and the cable modem. Since my laptop doesn’t have two network cards, I plugged into a switch and used <a href="http://ettercap.sourceforge.net/">Ethercap</a> to ARP poison to redirect traffic via the laptop.</p>
<p>Then using <a href="http://www.wireshark.org/">Wireshark</a> I could see the traffic coming out of the router. All I needed to do now was to hit the “check for updates button”.</p>
<p>Firstly I saw two DNS requests, one for the AAAA (IPv6) record for update.linksys.com, then a A request for update.linksys.com. Clearly the updates are coming from there. Secondly I saw a HTTPS connection form to that domain. That makes this a little more complex, as I am unable to see the encrypted traffic, and thus see what is being transferred.</p>
<p>So, I grabbed a <a href="http://code.activestate.com/recipes/491264-mini-fake-dns-server/">simple DNS server</a>, and set up a simple SSL server following <a href="http://wirewatcher.wordpress.com/2010/07/20/decrypting-ssl-traffic-with-wireshark-and-ways-to-prevent-it/">these instructions</a>.</p>
<p>Now with DNS spoofing, and a fake SSL server, I could intercept encrypted traffic from the router, as long as it does not validate the SSL certificate. Luckily it didn’t check the validity, and thus I was able to capture the request: (BTW Not checking the cert completely defeats the point of using SSL… bad Linksys!).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="nf">POST</span> <span class="nn">/cds/update</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
</span></span><span class="line"><span class="cl"><span class="n">Host</span><span class="o">:</span> <span class="l">update.linksys.com</span>
</span></span><span class="line"><span class="cl"><span class="n">Accept</span><span class="o">:</span> <span class="l">*/*</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Type</span><span class="o">:</span> <span class="l">text/xml</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Length</span><span class="o">:</span> <span class="l">573</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="ni">&amp;lt;</span>SOAP-ENV:Envelope xmlns:SOAP-ENV=&#34;http://schemas.xmlsoap.org/soap/envelope/&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>SOAP-ENV:Header/<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>SOAP-ENV:Body<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">    <span class="ni">&amp;lt;</span>ns:GetFirmwareFromDeviceRequest xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:LanguageCode<span class="ni">&amp;gt;</span>en<span class="ni">&amp;lt;</span>/ns:LanguageCode<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:CountryCode<span class="ni">&amp;gt;</span>us<span class="ni">&amp;lt;</span>/ns:CountryCode<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:MacAddress<span class="ni">&amp;gt;</span>12:34:56:78:90:ab<span class="ni">&amp;lt;</span>/ns:MacAddress<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:ModelNo<span class="ni">&amp;gt;</span>E4200<span class="ni">&amp;lt;</span>/ns:ModelNo<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:HardwareVersion<span class="ni">&amp;gt;</span>2<span class="ni">&amp;lt;</span>/ns:HardwareVersion<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:CurrentFirmwareVersion<span class="ni">&amp;gt;</span>2.0.36.126507<span class="ni">&amp;lt;</span>/ns:CurrentFirmwareVersion<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">    <span class="ni">&amp;lt;</span>/ns:GetFirmwareFromDeviceRequest<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>/SOAP-ENV:Body<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl"><span class="ni">&amp;lt;</span>/SOAP-ENV:Envelope<span class="ni">&amp;gt;</span>
</span></span></code></pre></div><p>and the response:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Language</span><span class="o">:</span> <span class="l">en-US</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Type</span><span class="o">:</span> <span class="l">text/xml</span>
</span></span><span class="line"><span class="cl"><span class="n">SOAPAction</span><span class="o">:</span> <span class="l">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="ni">&amp;lt;</span>soapenv:Envelope
</span></span><span class="line"><span class="cl"> xmlns:soapenv=&#34;http://schemas.xmlsoap.org/soap/envelope/&#34;
</span></span><span class="line"><span class="cl"> xmlns:soapenc=&#34;http://schemas.xmlsoap.org/soap/encoding/&#34;
</span></span><span class="line"><span class="cl"> xmlns:xsd=&#34;http://www.w3.org/2001/XMLSchema&#34;
</span></span><span class="line"><span class="cl"> xmlns:xsi=&#34;http://www.w3.org/2001/XMLSchema-instance&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>soapenv:Header/<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>soapenv:Body<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">    <span class="ni">&amp;lt;</span>ns:GetFirmwareFromDeviceResponse xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>ns:FirmwareList xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">        <span class="ni">&amp;lt;</span>ns:Firmware xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:Version xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>2.0.36.126507<span class="ni">&amp;lt;</span>/ns:Version<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:Revision xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>D<span class="ni">&amp;lt;</span>/ns:Revision<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:ReleaseDate xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>2012-01-06T16:48:08Z<span class="ni">&amp;lt;</span>/ns:ReleaseDate<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:DownloadURI xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>http://download.linksys.com/updates/to0037258865.pdx/FW_E4200_2.0.36.126507.SSA<span class="ni">&amp;lt;</span>/ns:DownloadURI<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:DateFormat xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>yyyy-MM-dd&#39;;T&#39;;HH:mm:ss&#39;;Z&#39;;<span class="ni">&amp;lt;</span>/ns:DateFormat<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">          <span class="ni">&amp;lt;</span>ns:Checksum xmlns:ns=&#34;http://cisco.com/schemas&#34;<span class="ni">&amp;gt;</span>1958710861<span class="ni">&amp;lt;</span>/ns:Checksum<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">        <span class="ni">&amp;lt;</span>/ns:Firmware<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">      <span class="ni">&amp;lt;</span>/ns:FirmwareList<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">    <span class="ni">&amp;lt;</span>/ns:GetFirmwareFromDeviceResponse<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl">  <span class="ni">&amp;lt;</span>/soapenv:Body<span class="ni">&amp;gt;</span>
</span></span><span class="line"><span class="cl"><span class="ni">&amp;lt;</span>/soapenv:Envelope<span class="ni">&amp;gt;</span>
</span></span></code></pre></div><p>(I slightly modified portions of the request and response to hide the identify of my router.).</p>
<p>I might write a script to make fake requests, but until then you can easily create a request with curl:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -d @request.raw https://update.linksys.com/cds/update
</span></span></code></pre></div><p>Then you just extract the DownloadURI and</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl http://download.linksys.com/updates/to0037258865.pdx/FW_E4200_2.0.36.126507.SSA
</span></span></code></pre></div><p>Voila I now have the firmware. Now I need to figure out what to do with it.</p>
<p><strong>Update</strong>: As requested I fetched the more recent version of the file:<br>
2.0.37.131047 – <a href="http://download.linksys.com/updates/to0040829450.pdx/FW">http://download.linksys.com/updates/to0040829450.pdx/FW</a>_E4200_2.0.37.131047.SSA</p>
</description>
    </item>
    
    <item>
      <title>Verizon FiOS MI424WR rev. F Router</title>
      <link>https://blog.bramp.net/post/2010/11/25/verizon-fios-mi424wr-rev.-f-router/</link>
      <pubDate>Thu, 25 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://blog.bramp.net/post/2010/11/25/verizon-fios-mi424wr-rev.-f-router/</guid>
      <description><p>I just got a FiOS wifi router and I must say I really like it. The web interface has many more options than any home router I’ve ever played with, and it seems like it’d be easy for a beginner but doesn’t get in the way of an expert. It also telnet access (optionally over SSL), which puts you into a custom shell. Poking around the commands I find one awesome one:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">Wireless Broadband Router&gt; <span class="nb">help</span> system shell
</span></span><span class="line"><span class="cl">shell   Spawn busybox shell in foreground
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Wireless Broadband Router&gt; system shell
</span></span><span class="line"><span class="cl">BusyBox v1.01 <span class="o">(</span>2005.09.07-07:38+0000<span class="o">)</span> Built-in shell <span class="o">(</span>lash<span class="o">)</span>
</span></span><span class="line"><span class="cl">Enter <span class="s1">&#39;help&#39;</span> <span class="k">for</span> a list of built-in commands.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">/ <span class="c1"># </span>
</span></span></code></pre></div><p>This is very clearly running Linux, with BusyBox. For those interested here are some interesting bits of information:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/ <span class="c1"># cat /proc/version </span>
</span></span><span class="line"><span class="cl">Linux version 2.6.16.14 <span class="c1">#1 SMP Sat Nov 28 00:38:50 PST 2009</span>
</span></span></code></pre></div><p>A four year old kernel. Well what do you expect from this kind of device :)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/ <span class="c1"># cat /proc/cpuinfo </span>
</span></span><span class="line"><span class="cl">system <span class="nb">type</span>		: MC524WR
</span></span><span class="line"><span class="cl">processor		: <span class="m">0</span>
</span></span><span class="line"><span class="cl">cpu model		: Cavium Networks Octeon CN50XX V0.1
</span></span><span class="line"><span class="cl">BogoMIPS		: 1000.48
</span></span><span class="line"><span class="cl"><span class="nb">wait</span> instruction	: yes
</span></span><span class="line"><span class="cl">microsecond timers	: yes
</span></span><span class="line"><span class="cl">tlb_entries		: <span class="m">64</span>
</span></span><span class="line"><span class="cl">extra interrupt vector	: yes
</span></span><span class="line"><span class="cl">hardware watchpoint	: yes
</span></span><span class="line"><span class="cl">ASEs implemented	:
</span></span><span class="line"><span class="cl">VCED exceptions		: not available
</span></span><span class="line"><span class="cl">VCEI exceptions		: not available
</span></span><span class="line"><span class="cl">processor		: <span class="m">1</span>
</span></span><span class="line"><span class="cl">cpu model		: Cavium Networks Octeon CN50XX V0.1
</span></span><span class="line"><span class="cl">BogoMIPS		: 1000.48
</span></span><span class="line"><span class="cl"><span class="nb">wait</span> instruction	: yes
</span></span><span class="line"><span class="cl">microsecond timers	: yes
</span></span><span class="line"><span class="cl">tlb_entries		: <span class="m">64</span>
</span></span><span class="line"><span class="cl">extra interrupt vector	: yes
</span></span><span class="line"><span class="cl">hardware watchpoint	: yes
</span></span><span class="line"><span class="cl">ASEs implemented	:
</span></span><span class="line"><span class="cl">VCED exceptions		: not available
</span></span><span class="line"><span class="cl">VCEI exceptions		: not available
</span></span></code></pre></div><p>w00t, a <a href="http://www.caviumnetworks.com/OCTEON-Plus_CN50XX.html">Dual Cores 64bit MIPS chip</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/ <span class="c1"># cat /proc/meminfo </span>
</span></span><span class="line"><span class="cl">MemTotal:        <span class="m">53200</span> kB
</span></span><span class="line"><span class="cl">MemFree:         <span class="m">11588</span> kB
</span></span><span class="line"><span class="cl">Buffers:          <span class="m">9252</span> kB
</span></span><span class="line"><span class="cl">Cached:           <span class="m">9228</span> kB
</span></span><span class="line"><span class="cl">SwapCached:          <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">Active:           <span class="m">7796</span> kB
</span></span><span class="line"><span class="cl">Inactive:        <span class="m">16220</span> kB
</span></span><span class="line"><span class="cl">HighTotal:           <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">HighFree:            <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">LowTotal:        <span class="m">53200</span> kB
</span></span><span class="line"><span class="cl">LowFree:         <span class="m">11588</span> kB
</span></span><span class="line"><span class="cl">SwapTotal:           <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">SwapFree:            <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">Dirty:               <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">Writeback:           <span class="m">0</span> kB
</span></span><span class="line"><span class="cl">Mapped:          <span class="m">11272</span> kB
</span></span><span class="line"><span class="cl">Slab:            <span class="m">13700</span> kB
</span></span><span class="line"><span class="cl">CommitLimit:     <span class="m">26600</span> kB
</span></span><span class="line"><span class="cl">Committed_AS:    <span class="m">11384</span> kB
</span></span><span class="line"><span class="cl">PageTables:        <span class="m">196</span> kB
</span></span><span class="line"><span class="cl">VmallocTotal: <span class="m">1073741824</span> kB
</span></span><span class="line"><span class="cl">VmallocUsed:      <span class="m">2752</span> kB
</span></span><span class="line"><span class="cl">VmallocChunk: <span class="m">1073738692</span> kB
</span></span><span class="line"><span class="cl">HugePages_Total:     <span class="m">0</span>
</span></span><span class="line"><span class="cl">HugePages_Free:      <span class="m">0</span>
</span></span><span class="line"><span class="cl">Hugepagesize:     <span class="m">2048</span> kB
</span></span></code></pre></div><p>Only ~53MB of RAM if I’m reading that right. Seems most likely to be 64MB to me, but I will investigate further.</p>
<p>Also, as this is Linux, the <a href="http://opensource.actiontec.com/">source code</a> has been made available. The <a href="http://opensource.actiontec.com/sourcecode/mi424wr/rev_ef/mi424wr-fw-20.10.7.5_readme">README</a> reveals it is a MC524 Router (MI424WR-GEN2 REV E/F).</p>
<p>The device doesn’t seem to have many of the standard Linux tools, no doubt to save space. It does however have an external USB port. My plan is to compile more of busybox, as well as some other binaries, and run them from an external USB stick.</p>
<p>Hacking an router has never been so easy! I’ll post more when I know more!</p>
</description>
    </item>
    
  </channel>
</rss>
