* Check for different DOS techniques */
()
| 936 | |
| 937 | /* Check for different DOS techniques */ |
| 938 | func DOS() reportResult { |
| 939 | var repResult reportResult |
| 940 | repResult.Technique = "DOS" |
| 941 | |
| 942 | hho(&repResult) |
| 943 | |
| 944 | // HMC (Header Metachar Character) |
| 945 | headers := []string{"X-Metachar-Header"} |
| 946 | values := []string{"n\nn", "r\rr", "a\aa", "x00\x00x00", "b\bb", "x1b\x1bx1b", "v\vv", "f\ff", "u0000\u0000u0000"} // TODO put not functional meta chars, due to fasthttp header value restrictions, in the value using \r\n in the header name |
| 947 | |
| 948 | for _, header := range headers { |
| 949 | headerDOSTemplate(&repResult, values, header, "HMC ", true) |
| 950 | } |
| 951 | |
| 952 | headers = []string{"X-Meta\nchar-Header", "X-Meta\rchar-Header", "X-Meta\achar-Header", "X-Meta\x00char-Header", "X-Meta\bchar-Header", "X-Meta\x1bchar-Header", "X-Meta\vchar-Header", "X-Meta\fchar-Header", "X-Meta\u0000char-Header"} |
| 953 | values = []string{"n", "r", "a", "x00", "b", "x1b", "v", "ff", "u0000"} |
| 954 | |
| 955 | for i, header := range headers { |
| 956 | headerDOSTemplate(&repResult, []string{values[i]}, header, "HMC ", true) |
| 957 | } |
| 958 | |
| 959 | // HMO (HTTP Method Override) |
| 960 | values = []string{"GET", "POST", "DELETE", "HEAD", "OPTIONS", "CONNECT", "PATCH", "PUT", "TRACE", "NONSENSE"} |
| 961 | headers = []string{"X-HTTP-Method-Override", "X-HTTP-Method", "X-Method-Override"} |
| 962 | for _, header := range headers { |
| 963 | headerDOSTemplate(&repResult, values, header, "HMO ", true) |
| 964 | } |
| 965 | |
| 966 | // DOS via not implemented transferEncoding |
| 967 | values = []string{"asdf"} |
| 968 | headerDOSTemplate(&repResult, values, "zTRANSFER-ENCODING", "Not supported Transfer-Encoding ", true) |
| 969 | |
| 970 | // DOS via incompatible/outdated browser agent |
| 971 | values = []string{"Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))"} |
| 972 | headerDOSTemplate(&repResult, values, "User-Agent", "incompatible browser ", true) |
| 973 | |
| 974 | // DOS via blacklisted security scanner user agent // TODO: Also add bots? Or will the IP be blocked too fast |
| 975 | values = []string{"WebCacheVulnerabilityScanner v" + version, "Fuzz Faster U Fool", "Nuclei - Open-source project (github.com/projectdiscovery/nuclei)", "sqlmap/1.3.11#stable (http://sqlmap.org)", "gobuster/3.1.0", "Wfuzz/2.2", "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", "masscan/1.3", "blekkobot"} |
| 976 | headerDOSTemplate(&repResult, values, "User-Agent", "blacklisted security scanners ", true) |
| 977 | |
| 978 | // DOS via illegal header name |
| 979 | /* Currently disabled because of net/http throws error because of illegal character TODO: workaround, see https://stackoverflow.com/questions/70678016/how-to-bypass-golangs-http-request-net-http-rfc-compliance |
| 980 | values = []string{"foobar"} |
| 981 | headerDOSTemplate(&repResult, values, "Ill\\egal", "illegal header name ", true) |
| 982 | */ |
| 983 | |
| 984 | // DOS via Max-Forwards (Webserver/Cache returns request) |
| 985 | values = []string{"0", "1", "2"} |
| 986 | headerDOSTemplate(&repResult, values, "Max-Forwards", "", true) |
| 987 | |
| 988 | // DOS via waf blocking because of a blacklist word |
| 989 | // TODO: change header to probably whitelisted header, More Blacklist words? |
| 990 | values = []string{".burpcollaborator.net", "<script>alert(1)</script>"} |
| 991 | headerDOSTemplate(&repResult, values, "Any-Header", "blacklist ", true) |
| 992 | |
| 993 | // DOS via Range |
| 994 | values = []string{"bytes=m10x", "bytes=9-4", "bytes=-1024,0", "bytes=0-,0-,0-,0-"} |
| 995 | headerDOSTemplate(&repResult, values, "Range", "", true) |
no test coverage detected