以MySQL为例,首先我们知道mysql注释符有#、-- (后面有空格)、/**/三种,在SQL注入中经常用到,但是不一定都适用。笔者在sqlilabs通关过程中就遇到不同场景用的注释符不同,这让我很疑惑,让我们来深入挖掘一番(篇幅比较长,省时间可以跳到最后看结论)。

  以第一关(GET提交方式)和第十一关(POST提交方式)为例,从前端--数据传输--数据库查询命令三方面讲解:

目录(本文篇幅较长,点击目录跳转)

  在关卡源码中找到要执行的SQL语句,在下面加入以下代码,方便我们查看执行的SQL命令

echo "$sql<br>";

一、注释符:-- (后面有空格)(也就是--+)

  第一关(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结尾单引号闭合

全文手打,各位看官觉得有用就点个赞呗

SQL注入注释符(#、-- 、/**/)使用条件及其他注释方式的探索的更多相关文章

  1. 转:攻击JavaWeb应用[3]-SQL注入

    转:http://static.hx99.net/static/drops/tips-236.html 攻击JavaWeb应用[3]-SQL注入 园长 · 2013/07/16 18:28 注:本节重 ...

  2. sql注入攻防 以php+mysql为例

    随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上 ...

  3. SQL注入的那些面试题总结

    一.知识储备类 1.SQL与NoSQL的区别? SQL:关系型数据库 NoSQL:非关系型数据库 存储方式:SQL具有特定的结构表,NoSQL存储方式灵活 性能:NoSQL较优于SQL 数据类型:SQ ...

  4. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  5. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  6. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  7. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  8. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  9. SQL注入理解与防御

    一.说明 sql注入可能是很多学习渗透测试的人接触的第一类漏洞,这很正常因为sql注入可能是web最经典的漏洞.但在很多教程中有的只讲‘或and 1=1.and 1=2有的可能会进一步讲union s ...

  10. Sql注入的分类:数字型+字符型

    Sql注入: 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过构造恶意的输入,使数据库执行恶意命令,造成数据泄露或者修改内容等,以 ...

随机推荐

  1. java基础:变量、常量与作用域

    变量就是可以变化的量,每个变量都必须声明其类型,Java 变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域.作用域 类变量 实例变量 局部变量常量初始化后不能在改变值,不会变动的值,它 ...

  2. LNMP配置——Nginx配置 —— 配置静态文件不记录日志并添加过期时间

    一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入; server { listen 80; server_name test.com test ...

  3. Apache配置 7.静态元素过期时间

    (1)介绍 那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对.这就涉及一个静态文件缓存时长的问题,也叫作"缓存过期时间".在httpd的配置文件中,我们是 ...

  4. 二分法排序-Python实现

    有一个无序序列[37,99,73,48,47,40,40,25,99,51],先进行排序打印输出,分别尝试插入20/40/41 数值到序列中合适的位置,保证其有序. 1.for 循环实现 第一种实现, ...

  5. linuxc语言图形化编程包含gtk/gtk.h编译总是报错找不到该文件的解决方法

    在编译时输入gcc file.c `pkg-config --libs --cflags gtk+-2.0` 注意`不是单引号,和--前均有一个字符 这样问题就结局啦

  6. Dotnet洋葱架构实践

    一个很清晰的架构实践,同时刨刨MySQL的坑.   一.洋葱架构简介 洋葱架构出来的其实有一点年头了.大约在2017年下半年,就有相关的说法了.不过,大量的文章在于理论性的讨论,而我们今天会用一个项目 ...

  7. Git本地操作2

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  8. OpenCV 之 平面单应性

    上篇 OpenCV 之 图象几何变换 介绍了等距.相似和仿射变换,本篇侧重投影变换的平面单应性.OpenCV相关函数.应用实例等. 1  投影变换 1.1  平面单应性 投影变换 (Projectiv ...

  9. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  10. D. 【例题4】字符串环

    解析 字符串的操作,可以用函数解决这个问题 s 2. f i n d ( s 1. s u b s t r ( i , j ) ) s2.find~(s1.substr~(i,~j)) s2.find ...