From 79039385bf47b9b09ff4918c3bee595d3c93d6aa Mon Sep 17 00:00:00 2001
From: Robert Graham <robert_david_graham@yahoo.com>
Date: Sun, 1 Apr 2018 01:13:10 -0400
Subject: [PATCH] udp payloads

---
 src/proto-udp.c      | 10 ++++----
 src/rawsock-pcap.c   |  1 +
 src/templ-payloads.c | 56 ++++++++++++++++++++++++++++++++------------
 3 files changed, 47 insertions(+), 20 deletions(-)

diff --git a/src/proto-udp.c b/src/proto-udp.c
index 68d9d26..eac40e9 100644
--- a/src/proto-udp.c
+++ b/src/proto-udp.c
@@ -66,19 +66,19 @@ handle_udp(struct Output *out, time_t timestamp,
 
 
     switch (port_them) {
-        case 53:
+        case 53: /* DNS - Domain Name System (amplifier) */
             status = handle_dns(out, timestamp, px, length, parsed, entropy);
             break;
-        case 123:
+        case 123: /* NTP - Network Time Protocol (amplifier) */
             status = ntp_handle_response(out, timestamp, px, length, parsed, entropy);
             break;
-        case 137:
+        case 137: /* NetBIOS (amplifier) */
             status = handle_nbtstat(out, timestamp, px, length, parsed, entropy);
             break;
-        case 161:
+        case 161: /* SNMP - Simple Network Managment Protocol (amplifier) */
             status = handle_snmp(out, timestamp, px, length, parsed, entropy);
             break;
-        case 11211:
+        case 11211: /* memcached (amplifier) */
             px += parsed->app_offset;
             length = parsed->app_length;
             status = memcached_udp_parse(out, timestamp, px, length, parsed, entropy);
diff --git a/src/rawsock-pcap.c b/src/rawsock-pcap.c
index 2e96d0c..e47ad4a 100644
--- a/src/rawsock-pcap.c
+++ b/src/rawsock-pcap.c
@@ -294,6 +294,7 @@ int pcap_init(void)
         switch (GetLastError()) {
             case ERROR_MOD_NOT_FOUND:
                 fprintf(stderr, "%s: not found\n", "Packet.dll");
+                fprintf(stderr, "  HINT: you must install either WinPcap or Npcap\n");
                 return -1;
             default:
                 fprintf(stderr, "%s: couldn't load %d\n", "Packet.dll", (int)GetLastError());
diff --git a/src/templ-payloads.c b/src/templ-payloads.c
index e461e1b..669c6af 100644
--- a/src/templ-payloads.c
+++ b/src/templ-payloads.c
@@ -52,21 +52,15 @@ struct NmapPayloads {
 
 
 struct Payload2 hard_coded_payloads[] = {
-    {161, 65536, 59, 0, snmp_set_cookie,
-     "\x30" "\x39"
-       "\x02\x01\x00"                    /* version */
-       "\x04\x06" "public"               /* community = public */
-       "\xa0" "\x2c"                     /* type = GET */
-        "\x02\x04\x00\x00\x00\x00"      /* transaction id = ???? */
-        "\x02\x01\x00"                  /* error = 0 */
-        "\x02\x01\x00"                  /* error index = 0 */
-         "\x30\x1e"
-          "\x30\x0d"
-           "\x06\x09\x2b\x06\x01\x80\x02\x01\x01\x01\x00" /*sysName*/
-           "\x05\x00"          /*^^^^_____IDS LULZ HAH HA HAH*/
-         "\x30\x0d"
-           "\x06\x09\x2b\x06\x01\x80\x02\x01\x01\x05\x00" /*sysDesc*/
-           "\x05\x00"},        /*^^^^_____IDS LULZ HAH HA HAH*/
+    /* ECHO protocol - echoes back whatever we send */
+    {7, 65536, 12, 0, 0, "masscan-test 0x00000000"},
+
+    /* QOTD - quote of the day (amplifier) */
+    {17, 65536, 12, 0, 0, "masscan-test"},
+    
+    /* chargen - character generator (amplifier) */
+    {19, 65536, 12, 0, 0, "masscan-test"},
+    
     {53, 65536, 0x1f, 0, dns_set_cookie,
         /* 00 */"\x50\xb6"  /* transaction id */
         /* 02 */"\x01\x20"  /* quer y*/
@@ -92,6 +86,31 @@ struct Payload2 hard_coded_payloads[] = {
         "\x00\x21" /* type = nbt */
         "\x00\x01" /* class = iternet*/
     },
+    {161, 65536, 59, 0, snmp_set_cookie,
+     "\x30" "\x39"
+       "\x02\x01\x00"                    /* version */
+       "\x04\x06" "public"               /* community = public */
+       "\xa0" "\x2c"                     /* type = GET */
+        "\x02\x04\x00\x00\x00\x00"      /* transaction id = ???? */
+        "\x02\x01\x00"                  /* error = 0 */
+        "\x02\x01\x00"                  /* error index = 0 */
+         "\x30\x1e"
+          "\x30\x0d"
+           "\x06\x09\x2b\x06\x01\x80\x02\x01\x01\x01\x00" /*sysName*/
+           "\x05\x00"          /*^^^^_____IDS LULZ HAH HA HAH*/
+         "\x30\x0d"
+           "\x06\x09\x2b\x06\x01\x80\x02\x01\x01\x05\x00" /*sysDesc*/
+           "\x05\x00"},        /*^^^^_____IDS LULZ HAH HA HAH*/
+
+    /* UPnP SSDP - Univeral Plug-n-Play Simple Service Discovery Protocol */
+    {1900, 65536, 0xFFFFFFFF, 0, 0,
+            "M-SEARCH * HTTP/1.1\r\n"
+            "HOST: 239.255.255.250:1900\r\n"
+            "MAN: \"ssdp:discover\"\r\n"
+            "MX: 1\r\n"
+            "ST: ssdp:all\r\n"
+            "USER-AGENT: unix/1.0 UPnP/1.1 masscan/1.x\r\n"},
+
     {5060, 65536, 0xFFFFFFFF, 0, 0,
         "OPTIONS sip:carol@chicago.com SIP/2.0\r\n"
         "Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKhjhs8ass877\r\n"
@@ -121,6 +140,13 @@ struct Payload2 hard_coded_payloads[] = {
     {16471, 65536, zeroaccess_getL_length, 0, 0,
         (char *)zeroaccess_getL},
 
+    /* Quake 3 (amplifier)
+     * http://blog.alejandronolla.com/2013/06/24/amplification-ddos-attack-with-quake3-servers-an-analysis-1-slash-2/
+     */
+    {27960, 65536, 0xFFFFFFFF, 0, 0,
+        "\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x10"},
+
+
     {0,0,0,0,0}
 };
 
-- 
GitLab