提示是GBK Inject,就是宽字节注入,我们用单引号试试,发现返回的字节在我们的单引号前面加一个反斜杠,应该是使用了addslashes()这个函数
image.png宽字节注入的原理就是:
mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)。
众所周知的这里在单引号前面使用%df,可以看到返回了一个不是汉字的字,并且我们的单引号前面的反斜杠被"吃了",yeah!
image.png好了,开始构造payload,经过测试发现这里只有两列,并且只有第二列显示数据,还有,如果使用union一定要记住union前面的条件要是false!!!!!这次我也犯蠢了=.=
故payload如下:
id=-1%df%27union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%20%23
这里我刚开始是使用burp进行的改包,但是刚开始一直没成功
刚开始没成功 成功了的这里仔细看的话可以很明显发现不一样的点,没成功的那张图只有前面的payload是红了,成功的截图确实全部都是红的.
这里我猜测应该是URL编码的问题,没成功的那段payload后面的空格因为是我手写的原因只是按了空格键,没有被编码成%20.
我在将空格替换成%20以后就可以成功执行了
在对上面几个表一一尝试以后发现ctf4这张表中存在我们想要的数据,前排提示,这里我们需要对表明进行十六进制的转换哦,我们前面没有对数据库名进行转换是因为我们调用的是database()这个函数,没有直接写数据库名,否则也是要进行十六进制编码的哦:
id=-1%df%27%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x63746634%20%23
image.png
获取数据的payload:
id=-1%df%27%20union%20select%201,flag%20from%20ctf4%20%23
image.png
flag应该就是这个flag{this_is_sqli_flag},但是输入提示不对
emmmm发现我得到的flag跟以前人做的又不一样=.=
网友评论