SQL注入注释符(#、-- 、/**/)使用条件及其他注释方式的探索
以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注入注释符(#、-- 、/**/)使用条件及其他注释方式的探索的更多相关文章
- 转:攻击JavaWeb应用[3]-SQL注入
转:http://static.hx99.net/static/drops/tips-236.html 攻击JavaWeb应用[3]-SQL注入 园长 · 2013/07/16 18:28 注:本节重 ...
- sql注入攻防 以php+mysql为例
随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上 ...
- SQL注入的那些面试题总结
一.知识储备类 1.SQL与NoSQL的区别? SQL:关系型数据库 NoSQL:非关系型数据库 存储方式:SQL具有特定的结构表,NoSQL存储方式灵活 性能:NoSQL较优于SQL 数据类型:SQ ...
- SQL注入攻防入门详解
=============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...
- SQL注入攻防入门详解(2)
SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...
- [转]SQL注入攻防入门详解
原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...
- 开发反模式 - SQL注入
一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
- SQL注入理解与防御
一.说明 sql注入可能是很多学习渗透测试的人接触的第一类漏洞,这很正常因为sql注入可能是web最经典的漏洞.但在很多教程中有的只讲‘或and 1=1.and 1=2有的可能会进一步讲union s ...
- Sql注入的分类:数字型+字符型
Sql注入: 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过构造恶意的输入,使数据库执行恶意命令,造成数据泄露或者修改内容等,以 ...
随机推荐
- C# 应用 - 多线程 2) Thread 和 ThreadPool
IEnumerable<int> intList = Enumerable.Range(1, 15); foreach (int i in intList) { ThreadPool.Qu ...
- JS获取时间日期常用方法
1 当前时间: new Date() 2 当前周: function getCurrentWeek() { var date = new Date() var beginDate = new Date ...
- Codeforces Round #575 (Div. 3) D2. RGB Substring (hard version) 【递推】
一.题目 D2. RGB Substring (hard version) 二.分析 思路一开始就想的对的,但是,用memset给数组初始化为0超时了!超时了! 然后我按照题解改了个vector初始化 ...
- golang 实现距离幂算法
func main() { var test []Pow var x1 Pow x1.distance = 110 x1.grade = 0.31 var x2 Pow x2.distance = 8 ...
- Python爬虫知识
一.爬虫 1.概述 网络爬虫,搜索引擎就是爬虫的应用者. 2.爬虫分类 (1)通用爬虫,常见就是搜索引擎,无差别的收集数据,存储,提取关键字,构建索引库,给用户提供搜索接口. 爬取一般流程: 初始化一 ...
- redis雪崩,穿透,击穿
缓存雪崩:同一时间大量key到过期时间失效,可在设置失效时间时加随机数,如果直接修改数据库,那么一定会有不一致,通过失效时间去反复刷新缩短不一致的时间, 为了避免数据一直存在,一定要设置过期时间如果通 ...
- 【Linux学习笔记1】-centos6.9部署django
一,centos6.9部署django 部署套件:centos6.9+nginx+mysql+uwsgi+python3+django 首先还是要明白这几个部分之间的关系(自己也是初学者,希望 ...
- 软件漏洞--Hello-Shellcode
软件漏洞--Hello-Shellcode 使用上一次的栈溢出的漏洞软件 可以直接通过栈溢出来修改返回值,或者要跳转的函数地址 实现一个ShellCode来跳转自己的代码 源bug软件代码 #defi ...
- 【分布式】SpringCloud(3)--Eureka服务注册与发现
1.Eureka概述 1.1.什么是Eureka Eureka是Netflix的一个子模块.基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 只需要使用服务的标识符,就可以访问到 ...
- Python脚本打包成exe执行文件
需求 一个教辅目录结构检查工具,目录结构是[书籍]-[章节]-[题目|答案]-[*.jpg],后台有个异步处理的服务,需要强依赖这个目录结构. 书籍解析是单独的pipeline,日志对用户不可见,这里 ...