宽字节注入浅浅谈!

发布日期:2019-01-07

   今天要写的是宽字节注入,这章节写的很浅,浅到让我有点不想写下去了。不过每天总要留下点痕迹吧,生命的痕迹嘛。后期我会再去补。Ok,让我们继续继续。(图在后期上传)

在我们注入的时候,会遇到一种情况。输入xxx?id=1’ ,并且它是字符型字符型字符型。(重要的说三遍,是需要用闭合的)这时你会发现出现了“错误”。用brup抓取包看一下,会发现我们输入的单引号被注释了。语句变成了xxx?id=1’’’,这时候就不能闭合了,也就没法构建我们的注入语句了。很尴尬啊,难道就没办法了吗?

        不,有一种特殊情况可以支持我们注入。那就是当我们的数据库编码为GBK时,可以支持我们正常注入。只需要我们在地址后面加一个%df,然后再加单引号ok了。为什么可以这样做呢?

因为这时候的数据库编码为GBK,在外面注入时大家通常都会看到自己输入的空格变成了%20。这是url转码后的结果。我们的数据就是转码完之后再放进数据库进行查询的。我们的输入的%df’。首先会因为’被转义变成%df’因为url编码为%5c,所以总的变成了%df%5c’(‘转码还是’),又因为我们的数据库编码为GBK而不是GB2312。所以转码过来的%5c会在GBK的编码范围内。GB2312大家都不陌生吧?它是编码适用于汉字处理、汉字通信等系统之间的信息交换的。它会和前面的%df组合在一起,变成%df%5c,这是汉字“連”所以%df%5c’变成了連’所以’它就逃出来了,这样前面也就闭合了。闭合完之后我们的操作就和之前的一样的。

        不过要注意的一点就是,我们这些操作为的是能让这个语句闭合,从而可以继续我们的操作。如果当我们的注入语句中出现库名需要用’xx’引起来时就会出现错误。无法引用这个库。这时候我们需要利用另外一种方法:嵌套查询。就是用其他的函数来引出我们所需要用的这个库或其他东西。如:select table_name from information_schema.tables where table_schema=’sql’ limit 01  这时’sql’sql在我文章里的意思是当前数据库)就不行了。我们需要将语句换成select table_name from information_schema.tables where table_schema=select database()) limit 01 这样就可以运行了。

所以我们每学到一种方法就必须将它吃透。为什么要这样用,怎么用。这样才能慢慢变好。

   在这里贴一段困扰了我N分钟的代码,你们可以在自己那复制来测试。Select column_name from information_schema.columns where table_schema=(select databses()) and table_name=( select table_name from information_schema.tables where table_schema=(select database()) limit 01) limit 01

 

Pass:坚持每日一更。完毕,凌晨了睡觉觉!