blob: aeb05b43bfba756275bd9fab1117f93144714820 [file] [log] [blame] [raw]
from sulley import *
import sys
########################################################################################################################
s_initialize("HTTP VERBS BASIC")
s_group("verbs", values=["GET", "HEAD"])
if s_block_start("body", group="verbs"):
s_static(" ")
s_delim(" ")
s_static("/")
s_string("index.html")
s_delim("> ")
s_string("HTTP")
s_delim("/")
s_string("1")
s_delim(".")
s_string("0")
s_static("\r\n\r\n")
s_block_end()
########################################################################################################################
s_initialize("HTTP VERBS POST")
s_static("POST / HTTP/1.0\r\n")
s_static("Content-Type: ")
s_string("application/x-www-form-urlencoded")
s_static("\r\n")
s_static("Content-Length: ")
s_size("post blob", format="ascii", signed=True, fuzzable=True)
s_static("\r\n\r\n")
if s_block_start("post blob"):
s_string("A"*100 + "=" + "B1"*100)
s_block_end()
########################################################################################################################
s_initialize("HTTP HEADERS")
s_static("GET / HTTP/1.1\r\n")
# let's fuzz random headers with malformed delimiters.
s_string("Host")
s_delim(":")
s_delim(" ")
s_string("localhost")
s_delim("\r\n")
# let's fuzz the value portion of some popular headers.
s_static("User-Agent: ")
s_string("Mozilla/5.0 (Windows; U)")
s_static("\r\n")
s_static("Accept-Language: ")
s_string("en-us")
s_delim(",")
s_string("en;q=0.5")
s_static("\r\n")
s_static("Keep-Alive: ")
s_string("300")
s_static("\r\n")
s_static("Connection: ")
s_string("keep-alive")
s_static("\r\n")
s_static("Referer: ")
s_string("http://dvlabs.tippingpoint.com")
s_static("\r\n")
s_static("\r\n")
########################################################################################################################
s_initialize("HTTP COOKIE")
s_static("GET / HTTP/1.0\r\n")
if s_block_start("cookie"):
s_static("Cookie: ")
s_string("auth")
s_delim("=")
s_string("1234567890<a>")
s_static("\r\n")
s_block_end()
s_repeat("cookie", max_reps=5000, step=500)
s_static("\r\n")
s_initialize("HTTP VERBS")
s_group("verbs", values=["GET", "HEAD", "POST", "OPTIONS", "TRACE", "PUT", "DELETE", "PROPFIND"])
if s_block_start("body", group="verbs"):
s_delim(" ")
s_delim("/")
s_string("index.html")
s_delim("<a ")
s_string("HTTP")
s_delim("/")
s_string("1")
s_delim(".")
s_string("0")
s_static("\r\n\r\n")
s_block_end()
sess = sessions.session()
gc=0
fw=None
for target in ("HTTP VERBS", "HTTP COOKIE", "HTTP VERBS BASIC", "HTTP VERBS POST",
"HTTP HEADERS"):
if (fw is not None):
fw.close()
fw = None
fw = open(target+"-ut.t", "w+")
fw.write("# fuzzed testcase. ")
fw.write("""
use lib 'lib';
use Test::Nginx::Socket;
plan tests => repeat_each(2) * blocks();
no_root_location();
no_long_string();
$ENV{TEST_NGINX_SERVROOT} = server_root();
run_tests();
__DATA__
""")
req = s_get(target)
for i in xrange(0,150):
gc = gc + 1
s_mutate()
fw.write("=== "+str(gc)+" in "+target+"\n")
fw.write("""--- main_config
working_directory /tmp/;
worker_rlimit_core 25M;
--- http_config
include /etc/nginx/naxsi_core.rules;
--- config
location / {
SecRulesEnabled;
DeniedUrl "/RequestDenied";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
root $TEST_NGINX_SERVROOT/html/;
index index.html index.htm;
}
location /RequestDenied {
return 400;
}
--- raw_request eval\n""")
fw.write("\""+req.render()+"\"\n")
if (target is "foobar"):
fw.write("--- error_code: 400\n\n")
# elif (target is "HTTP HEADERS"):
# fw.write("--- error_code: 400\n\n")
# elif (target is "HTTP VERBS BASIC"):
# fw.write("--- error_code: 400\n\n")
else:
fw.write("--- error_code: 400\n\n")
# print(req.render())
# print("#END")
sys.exit(1);
########################################################################################################################