@@ -64,6 +64,7 @@ class WebSocketException(Exception):
6464from lib .core .data import conf
6565from lib .core .data import kb
6666from lib .core .data import logger
67+ from lib .core .datatype import AttribDict
6768from lib .core .decorators import stackedmethod
6869from lib .core .dicts import POST_HINT_CONTENT_TYPES
6970from lib .core .enums import ADJUST_TIME_DELAY
@@ -960,75 +961,76 @@ def queryPage(value=None, place=None, content=False, getRatioValue=False, silent
960961 if conf .csrfToken :
961962 def _adjustParameter (paramString , parameter , newValue ):
962963 retVal = paramString
963- match = re .search (r"%s=[^&]*" % re .escape (parameter ), paramString )
964+ match = re .search (r"%s=[^&]*" % re .escape (parameter ), paramString , re . I )
964965 if match :
965- retVal = re .sub (re .escape (match .group (0 )), ("%s=%s" % (parameter , newValue )).replace ('\\ ' , r'\\' ), paramString )
966+ retVal = re .sub (re .escape (match .group (0 )), ("%s=%s" % (parameter , newValue )).replace ('\\ ' , r'\\' ), paramString , flags = re . I )
966967 else :
967- match = re .search (r"(%s[\"']:[\"'])([^\"']+)" % re .escape (parameter ), paramString )
968+ match = re .search (r"(%s[\"']:[\"'])([^\"']+)" % re .escape (parameter ), paramString , re . I )
968969 if match :
969- retVal = re .sub (re .escape (match .group (0 )), "%s%s" % (match .group (1 ), newValue ), paramString )
970+ retVal = re .sub (re .escape (match .group (0 )), "%s%s" % (match .group (1 ), newValue ), paramString , flags = re . I )
970971 return retVal
971972
973+ token = AttribDict ()
972974 page , headers , code = Connect .getPage (url = conf .csrfUrl or conf .url , data = conf .data if conf .csrfUrl == conf .url else None , method = conf .method if conf .csrfUrl == conf .url else None , cookie = conf .parameters .get (PLACE .COOKIE ), direct = True , silent = True , ua = conf .parameters .get (PLACE .USER_AGENT ), referer = conf .parameters .get (PLACE .REFERER ), host = conf .parameters .get (PLACE .HOST ))
973- token = extractRegexResult (r"(?i)<input[^>]+\bname=[\"']?%s \b[^>]*\bvalue=[\"']?(?P<result >[^>'\"]*)" % re . escape ( conf .csrfToken ) , page or "" )
975+ match = re . search (r"(?i)<input[^>]+\bname=[\"']?(?P<name>%s) \b[^>]*\bvalue=[\"']?(?P<value >[^>'\"]*)" % conf .csrfToken , page or "" , re . I )
974976
975- if not token :
976- token = extractRegexResult (r"(?i)<input[^>]+\bvalue=[\"']?(?P<result >[^>'\"]*)[\"']?[^>]*\bname=[\"']?%s \b" % re . escape ( conf .csrfToken ) , page or "" )
977+ if not match :
978+ match = re . search (r"(?i)<input[^>]+\bvalue=[\"']?(?P<value >[^>'\"]*)[\"']?[^>]*\bname=[\"']?(?P<name>%s) \b" % conf .csrfToken , page or "" , re . I )
977979
978- if not token :
979- match = re .search (r"%s[\"']:[\"']([^\"']+)" % re .escape (conf .csrfToken ), page or "" )
980- token = match .group (1 ) if match else None
980+ if not match :
981+ match = re .search (r"(?P<name>%s)[\"']:[\"'](?P<value>[^\"']+)" % conf .csrfToken , page or "" , re .I )
981982
982- if not token :
983- token = extractRegexResult (r"\b%s \s*[:=]\s*(?P<result >\w+)" % re . escape ( conf .csrfToken ) , str (headers ))
983+ if not match :
984+ match = re . search (r"\b(?P<name>%s) \s*[:=]\s*(?P<value >\w+)" % conf .csrfToken , str (headers ), re . I )
984985
985- if not token :
986- token = extractRegexResult (r"\b%s \s*=\s*['\"]?(?P<result >[^;'\"]+)" % re . escape ( conf .csrfToken ) , page or "" )
986+ if not match :
987+ match = re . search (r"\b(?P<name>%s) \s*=\s*['\"]?(?P<value >[^;'\"]+)" % conf .csrfToken , page or "" , re . I )
987988
988- if token :
989- match = re . search ( r"String\.fromCharCode\(([\d+, ]+)\)" , token )
989+ if match :
990+ token . name , token . value = match . group ( "name" ), match . group ( "value" )
990991
991- if match :
992- token = "" .join (chr (int (_ )) for _ in match .group (1 ).replace (' ' , "" ).split (',' ))
992+ match = re .search (r"String\.fromCharCode\(([\d+, ]+)\)" , token .value )
993+ if match :
994+ token .value = "" .join (chr (int (_ )) for _ in match .group (1 ).replace (' ' , "" ).split (',' ))
993995
994996 if not token :
995997 if conf .csrfUrl != conf .url and code == httplib .OK :
996998 if headers and "text/plain" in headers .get (HTTP_HEADER .CONTENT_TYPE , "" ):
997999 token = page
9981000
999- if not token and conf .cj and any (_ .name == conf . csrfToken for _ in conf .cj ):
1001+ if not token and conf .cj and any (re . search ( conf . csrfToken , _ .name , re . I ) for _ in conf .cj ):
10001002 for _ in conf .cj :
1001- if _ .name == conf . csrfToken :
1002- token = _ .value
1003- if not any (conf .csrfToken in _ for _ in (conf .paramDict .get (PLACE .GET , {}), conf .paramDict .get (PLACE .POST , {}))):
1003+ if re . search ( conf . csrfToken , _ .name , re . I ) :
1004+ token . name , token . value = _ . name , _ .value
1005+ if not any (re . search ( conf .csrfToken , ' ' . join ( _ ), re . I ) for _ in (conf .paramDict .get (PLACE .GET , {}), conf .paramDict .get (PLACE .POST , {}))):
10041006 if post :
1005- post = "%s%s%s=%s" % (post , conf .paramDel or DEFAULT_GET_POST_DELIMITER , conf . csrfToken , token )
1007+ post = "%s%s%s=%s" % (post , conf .paramDel or DEFAULT_GET_POST_DELIMITER , token . name , token . value )
10061008 elif get :
1007- get = "%s%s%s=%s" % (get , conf .paramDel or DEFAULT_GET_POST_DELIMITER , conf . csrfToken , token )
1009+ get = "%s%s%s=%s" % (get , conf .paramDel or DEFAULT_GET_POST_DELIMITER , token . name , token . value )
10081010 else :
1009- get = "%s=%s" % (conf . csrfToken , token )
1011+ get = "%s=%s" % (token . name , token . value )
10101012 break
10111013
10121014 if not token :
1013- errMsg = "anti-CSRF token '%s' can't be found at '%s'" % (conf .csrfToken , conf .csrfUrl or conf .url )
1015+ errMsg = "anti-CSRF token '%s' can't be found at '%s'" % (conf .csrfToken . _original , conf .csrfUrl or conf .url )
10141016 if not conf .csrfUrl :
10151017 errMsg += ". You can try to rerun by providing "
10161018 errMsg += "a valid value for option '--csrf-url'"
10171019 raise SqlmapTokenException (errMsg )
10181020
10191021 if token :
1020- token = token .strip ("'\" " )
1022+ token . value = token . value .strip ("'\" " )
10211023
10221024 for place in (PLACE .GET , PLACE .POST ):
10231025 if place in conf .parameters :
10241026 if place == PLACE .GET and get :
1025- get = _adjustParameter (get , conf . csrfToken , token )
1027+ get = _adjustParameter (get , token . name , token . value )
10261028 elif place == PLACE .POST and post :
1027- post = _adjustParameter (post , conf . csrfToken , token )
1029+ post = _adjustParameter (post , token . name , token . value )
10281030
10291031 for i in xrange (len (conf .httpHeaders )):
1030- if conf .httpHeaders [i ][0 ].lower () == conf . csrfToken .lower ():
1031- conf .httpHeaders [i ] = (conf .httpHeaders [i ][0 ], token )
1032+ if conf .httpHeaders [i ][0 ].lower () == token . name .lower ():
1033+ conf .httpHeaders [i ] = (conf .httpHeaders [i ][0 ], token . value )
10321034
10331035 if conf .rParam :
10341036 def _randomizeParameter (paramString , randomParameter ):
0 commit comments