我有一串格式:“&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&# X6C&安培;#X65&安培;#X72&安培;#X74&安培;#X28&安培;#X27&安培;#X58&安培;#X53&安培;#X53&安培;#X27&安培;#X29"
我使用字典(字典中有很多其他内容),其键是& #x,其对应值为\ x 像dict = {'& #x':'\\ x'}
之类的东西然后我用值替换键: 字符串变为:\ x6A \ x61 \ x76 \ x61 \ x73 \ x63 \ x72 \ x69 \ x70 \ x74 \ x3A \ x61 \ x6C \ x65 \ x72 \ x74 \ x28 \ x27 \ x58 \ x53 \ x53 \ x27 \ X29
理想情况下,当我打印时,应将其转换为原始的ascii格式,即javascript:alert('XSS')。
我必须明确使用unhexlify(hexstring)来转换为转换形式。
但是,如果我手动编写:一个新的变量 var1 =“\ x6A \ x61 \ x76 \ x61 \ x73 \ x63 \ x72 \ x69 \ x70 \ x74 \ x3A \ x61 \ x6C \ x65 \ x72 \ x74 \ x28 \ x27 \ x58 \ x53 \ x53 \ x27 \ x29”
然后打印这个var1它给了我javascript:alert('XSS')作为结果。
为什么需要额外的转换步骤?有没有其他方法可以摆脱unhexlify的额外调用。
答案 0 :(得分:0)
为什么需要额外的转换步骤?
因为你还没看过字符串的表示;反斜杠会出现转义。
还有其他方法可以摆脱unhexlify的额外调用。
当然,只需用正确的编解码器进行解码。
>>> r'\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x61\x6C\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29'.decode('string-escape')
"javascript:alert('XSS')"