This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

OWASP ModSecurity Securing WebGoat Section4 Sublesson 15.3

From OWASP
Jump to: navigation, search

15. Parameter Tampering -> 15.3 Bypass Client Side JavaScript Validation

Lesson overview

The WebGoat lesson overview is included with the WebGoat lesson solution.

Lesson solution

Refer to the zip file with the WebGoat lesson solutions. See Appendix A for more information.

Strategy

This WebGoat lesson demonstrates bypassing client-side validation using a web browser plugin such as IEWatch for IE or Firebug for Firefox. There are 7 different validation types and any field that does not meet the requirements will return an error message.

Often in real word implementations, the RegExs in the HTML source code are taken and re-implemented within ModSecurity so that validation is properly enforced and cannot be bypassed.

The ModSecurity solution will be to copy the RegExs from the HTML source and use them in ModSecurity rules.

Implementation

A sample POST URI and parameters are (the 2nd entry should be on one line):

POST http://192.168.0.5/WebGoat/attack?Screen=31&menu=1600

field1=abc&field2=123&field3=abc+123+ABC&field4=seven&field5=90210&
field6=90210-1111&field7=301-604-4882

The 'rulefile_15-3_bypass-client-side-validation.conf' is:

  # exactly three lowercase characters
  SecRule &ARGS_POST:field1 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field1 "!^[a-z]{3}$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # exactly three digits
  SecRule &ARGS_POST:field2 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field2 "!^[0-9]{3}$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # letters, numbers, and space only
  SecRule &ARGS_POST:field3 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field3 "!^[a-zA-Z0-9 ]*$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # enumeration of numbers
  SecRule &ARGS_POST:field4 "@eq 0" "nolog,skipAfter:1530" 
  SecRule ARGS_POST:field4 "!^(one|two|three|four|five|six|seven|eight|nine)$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # simple zip code
  SecRule &ARGS_POST:field5 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field5 "!^\d{5}$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # zip with optional dash four
  SecRule &ARGS_POST:field6 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field6 "!^\d{5}(-\d{4})?$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"
	
  # US phone number with or without dashes
  SecRule &ARGS_POST:field7 "@eq 0" "nolog,skipAfter:1530"
  SecRule ARGS_POST:field7 "!^[2-9]\d{2}-?\d{3}-?\d{4}$" \
"phase:2,t:none,log,auditlog,deny,severity:3,msg:'15. Parameter Tampering -> \
15.3 Bypass Client Side JavaScript Validation: malicious attempt to enter \
invalid data',tag:'INJECTION_ATTACK',redirect:/_error_pages_/lesson15-3.html"						
  SecAction "t:none,nolog,id:'1530'"

Comments

  • This solution takes the RegExs used for client-side validation and incorporates them in ModSecurity rules.