@@ -64,6 +64,7 @@ class WebSocketException(Exception):
64
64
from lib .core .data import conf
65
65
from lib .core .data import kb
66
66
from lib .core .data import logger
67
+ from lib .core .datatype import AttribDict
67
68
from lib .core .decorators import stackedmethod
68
69
from lib .core .dicts import POST_HINT_CONTENT_TYPES
69
70
from lib .core .enums import ADJUST_TIME_DELAY
@@ -960,75 +961,76 @@ def queryPage(value=None, place=None, content=False, getRatioValue=False, silent
960
961
if conf .csrfToken :
961
962
def _adjustParameter (paramString , parameter , newValue ):
962
963
retVal = paramString
963
- match = re .search (r"%s=[^&]*" % re .escape (parameter ), paramString )
964
+ match = re .search (r"%s=[^&]*" % re .escape (parameter ), paramString , re . I )
964
965
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 )
966
967
else :
967
- match = re .search (r"(%s[\"']:[\"'])([^\"']+)" % re .escape (parameter ), paramString )
968
+ match = re .search (r"(%s[\"']:[\"'])([^\"']+)" % re .escape (parameter ), paramString , re . I )
968
969
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 )
970
971
return retVal
971
972
973
+ token = AttribDict ()
972
974
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 )
974
976
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 )
977
979
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 )
981
982
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 )
984
985
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 )
987
988
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" )
990
991
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 (',' ))
993
995
994
996
if not token :
995
997
if conf .csrfUrl != conf .url and code == httplib .OK :
996
998
if headers and "text/plain" in headers .get (HTTP_HEADER .CONTENT_TYPE , "" ):
997
999
token = page
998
1000
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 ):
1000
1002
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 , {}))):
1004
1006
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 )
1006
1008
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 )
1008
1010
else :
1009
- get = "%s=%s" % (conf . csrfToken , token )
1011
+ get = "%s=%s" % (token . name , token . value )
1010
1012
break
1011
1013
1012
1014
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 )
1014
1016
if not conf .csrfUrl :
1015
1017
errMsg += ". You can try to rerun by providing "
1016
1018
errMsg += "a valid value for option '--csrf-url'"
1017
1019
raise SqlmapTokenException (errMsg )
1018
1020
1019
1021
if token :
1020
- token = token .strip ("'\" " )
1022
+ token . value = token . value .strip ("'\" " )
1021
1023
1022
1024
for place in (PLACE .GET , PLACE .POST ):
1023
1025
if place in conf .parameters :
1024
1026
if place == PLACE .GET and get :
1025
- get = _adjustParameter (get , conf . csrfToken , token )
1027
+ get = _adjustParameter (get , token . name , token . value )
1026
1028
elif place == PLACE .POST and post :
1027
- post = _adjustParameter (post , conf . csrfToken , token )
1029
+ post = _adjustParameter (post , token . name , token . value )
1028
1030
1029
1031
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 )
1032
1034
1033
1035
if conf .rParam :
1034
1036
def _randomizeParameter (paramString , randomParameter ):
0 commit comments