SQL注入注释符(#、 | 您所在的位置:网站首页 › 对代码进行注释用什么语句 › SQL注入注释符(#、 |
以MySQL为例,首先我们知道mysql注释符有#、-- (后面有空格)、/**/三种,在SQL注入中经常用到,但是不一定都适用。笔者在sqlilabs通关过程中就遇到不同场景用的注释符不同,这让我很疑惑,让我们来深入挖掘一番(篇幅比较长,省时间可以跳到最后看结论)。 以第一关(GET提交方式)和第十一关(POST提交方式)为例,从前端--数据传输--数据库查询命令三方面讲解: 目录(本文篇幅较长,点击目录跳转) 一、注释符:-- (后面有空格)(也就是--+) 二、注释符:# 三、注释符:/**/ 四、注释方式:payload结尾单引号闭合 五、结论
在关卡源码中找到要执行的SQL语句,在下面加入以下代码,方便我们查看执行的SQL命令 echo "$sql";一、注释符:-- (后面有空格)(也就是--+) 第一关(GET提交方式) 1.URL: http://localhost/sqlilabs/Less-1/?id=-1' union select 1,2,database()--+执行没问题,注意黄色SQL命令这里的--+变成了-- (后面有空格)
2.burpsuite: 传输过程对单引号还有空格进行了url编码
3.MySQL命令行: 将页面黄色命令复制到MySQL命令行,执行没问题,注意这里的--+变成了-- (后面有空格),即正确使用了注释符-- (后面有空格) 第十一关(POST提交方式) 1.POST参数: uname=vdf&passwd=-ad' union select 1,database()-- &submit=Submit执行没问题
2.burpsuite:
因为是POST提交的数据,所以不用进行url编码,是POST原文
3.MySQL命令行: 执行没问题
二、注释符:# 第一关(GET提交方式) 1.URL: http://localhost/sqlilabs/Less-1/?id=-1' union select 1,2,database()#执行命令提示语法错误,来传输过程看看经历了什么:
2.burpsuite:
传输过程对单引号还有空格进行了url编码。原来是#号没了,为什么呢?因为url中的#号代表html页面中的锚点,数据传输过程并不会一起带到后端
3.MySQL命令行: 上面说到,在前端页面执行语法错误了,那语法到底是哪错了?我们复制黄色命令在命令行执行了一下,提示少了一个单引号,就可以正常执行了,原来错误就在这里了,我们分析一波: ①url中#号作为锚点,不当做数据来传输 ②命令传到后端,少了一个单引号用来闭合命令(我们可以利用这种特性,在url中命令结尾添加一个单引号来代替注释符,又一种方法get!)
解决办法:直接在url中使用#号有问题,就可以把#号转换成url编码(%23)就可以执行了 1.URL: http://localhost/sqlilabs/Less-1/?id=-1' union select 1,2,database()%23执行没问题
2.burpsuite: 传输过程对单引号还有空格进行了url编码
3.MySQL命令行: 执行没问题
同时得出传输过程结论:在前端注释符使用url编码,传输过程中把url编码带上,到后端就会进行一次url解码操作,#号注释符起作用。 第十一关(POST提交方式) 1.POST参数: uname=vdf&passwd=-ad' union select 1,database()#&submit=Submit执行没问题
2.burpsuite: 因为是POST提交的数据,所以不用进行url编码,是POST原文
3.MySQL命令行: 执行没问题
三、注释符:/**/ 因为注释符#、-- 都是把后面的语句全部注释掉了,而内联注释/**/则是注释指定部分,需要一前一后闭合,所以在传参那里几乎不做注释语句用,而是用于过滤空格等bypass,如: ?id=-1'/**/union/**/select/**/1,2,database()--+ //过滤空格,用/**/代替空格
其他注释方式 四、注释方式:payload结尾单引号闭合 第一关(GET提交方式)1.URL: http://localhost/sqlilabs/Less-1/?id=-1' union select 1,2,database()'执行没问题
2.burpsuite: 传输过程对单引号还有空格进行了url编码
3.MySQL命令行: 执行没问题 第十一关(POST提交方式) 1.POST参数: uname=vdf&passwd=-ad' union select 1,database()'&submit=Submit执行没问题
2.burpsuite: 因为是POST提交的数据,所以不用进行url编码,是POST原文
3.MySQL命令行: 执行没问题
五、结论 (GET提交方式): -- (后面有空格) %23 payload结尾单引号闭合 (POST提交方式): -- (后面有空格) # payload结尾单引号闭合
全文手打,各位看官觉得有用就点个赞呗
|
CopyRight 2018-2019 实验室设备网 版权所有 |