宽字节注入
GBK编码处理编码的过程存在问题,可构造数据消灭 "\"
输入的'被转义后为\',编码后为%5C%27,导致不能注入
方法:在注入点后键入%df,即id=xxx?%df '
程序处理后为%df\ ',编码后为id=xxx?%df%5C%27
MySQl在使用GBK编码的时候,会认为两个字符(%df%5C)为一个汉字,即id=xxx?運 '
前一个Ascii码大于128才能到汉字的范围
二次编码注入
urldecode()与PHP本身处理编码时,若两者配合失误,可构造数据消灭" \"
用户输入 | PHP自身编码 | 转 义 | 函数编码 | 带入SQL |
---|---|---|---|---|
id=1%2527 | id=1%27 | id=1%27(没有'不会触发转义) | id=1 ' | id=1' and ... |
二次注入
第一步:插入恶意数据:
第一次进行数据库插入数据的时候,仅仅对其中特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
第二步:引用恶意数据:
将数据储存到数据库后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库取出恶意数据,没有进行进一步的检验,这样就会造成SQL的二次注入