首页
社区
课程
招聘
[原创]关于SQLI-LABS学习过程中#和--两种单行注释的探索过程
发表于: 2017-7-22 10:32 3012

[原创]关于SQLI-LABS学习过程中#和--两种单行注释的探索过程

2017-7-22 10:32
3012

最近读了由@hesir翻译的几篇SQL注入入门文章,作为新手,获益匪浅。然而学习中也发现一些问题,并进行了排查解决,分享给大家,对于高手自然不值一哂,而且直接说解决方案也很简单,但授人以鱼不如授人以渔,在此把过程写出来,希望对于像我一样的新手们能借鉴到一些解决问题的方案,以便以后遇到类似问题供借鉴。

一、问题描述

闲话少叙,直奔主题。大家知道,MYSQL中单行注释有#和--(后面一般要求加一个空格)两种,按道理两种任选其一均应生效。然而在下学习过程中发现有些课程如SQLI-LABS中第一课(传送门)的注入中用--+,而#无效;另一些课程如SQLI-LABS中第11课(传送门)的注入则用#,而--+无效。这是怎么回事呢?

二、寻找答案

首先,当然是选择了最省力的方法:直接请教作者(原谅我如此偷懒)。在hesir明确表示他也不太清楚的情况下,我知道只能自己去摸索一下了。

虽然html和php都不太懂,但会写代码的人照葫芦画瓢调试总是马马虎虎过得去:

(一)查看编辑Less-1/index.php文件:


在30、31行照猫画虎直接写注入后的语句,然后使其依次生效,如你所料,两者都可以生效(为简单我就不贴图了)。

(二)搜索查询

既然直接嵌入可以生效,那么一定是嵌入之前发生了什么,是否#代表了什么特殊含义被吃掉了呢?就像--后面想加空格要写‘+’一样。直接搜索,果然:

(三)解决方案

在hesir译作手动绕过SQL过滤(传送门)中,描述了ascii值代替字符的方法,man ascii可查得#的ascii值为0x23,直接试用看可否解决:


Make it!

(四)表单注入中的--注释解决

为了更好理解,我还添加了63\64行,把注入内容经浏览器消化后的样子输出出来。

直接嵌入都没有问题,是否$_POST会吃掉特殊字符?PHP我不懂啊,继续Google。

好像不会哦,突然想起这不是在URL里面哦,那么--+里面的+不会被转换成空格,我们直接用‘-- ’(注意后面有空格)注入试试呢?Username中输入' union select 1,2 -- (最后加若干空格)

OK!

三、总结

最后,总结一下,原来原理如此简单:URL注入时对#和空格都会特殊对待,所以要用%23代替#,用+代替空格;而表单注入没有这些转换,所以直接输入#或者-- (后面有空格)。


一番周折,回头视之,原来还是由于自己不懂HTTP协议和相关基础知识所致(脸红),不多说了,赶紧补课去了。祝好!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
2
加油~
2017-7-24 10:10
0
游客
登录 | 注册 方可回帖
返回
//