$sql = 'select *from user where username =(\''.$username.'\') and password=(\''.$password.'\')'
这里只是加了过滤,我要我们把前面的小括号和单引号闭合就可以了。再把后面的注释掉就是了。
本来应该是 %df') and 1=1 -- + 但是这里是POST传参,POST传参不会解析URL编码
所以我们这里用 a') or 1=1 -- +
我们知道要绕过魔术引号的话,必须让一个字符和单引号结合成一个共同体,这样就把魔术引号绕过了。
一个汉字就是占2个字符,一个字符加上单引号的字符用URL编码就是 %df%5c
但是这里是POST传参,POST传参不会解析URL编码,那我们不用URL编码,是不是df5c呢
很遗憾并不能
df') and 1=1 #
绕过方法:抓一个包,然后修稿hex的值
找到我们要替换字符的位置,我们这里写的是a,
这样就成功绕过了
方法二:
原理
你传输的编码(UTF-8)和数据库的编码不一样,就导致融合(进行编码)(因为utf8 占3个字节,加上 \ 就是4个字节,而gbk是2个字节组成一个汉字,所以这里就相当于是2个汉字)
如果数据库也是utf8,那就不行了
数据库是非英文编码,我们就有机会
那么我们