SQL注入新手误区

简介: SQL注入新手误区

在学习渗透测试的时候,理论是一个方面,经验也很重要,有的时候,我们明明知道相关的理论,但是因为实操较少,因此不能很好的注入成功,失败的原因却往往是一些细微的小点。在这里,作为一名渗透测试的“老司机”,针对SQL注入问题,写一点自己的体会,主要是针对上述问题进行简单论述,有其他见解的朋友也可以与我深入讨论交流。

一、关于url编码的问题
当我们进行GET类型注入的时候,一定要注意URL编码,特别是有时候涉及到引号、空格、井号等等,如果不注意URL编码问题,就有可能产生错误。

注意对特殊符号进行url编码
“#”在SQL注入中是常用的注释符,然而,根据url规范,“#”同时又代表了锚定符,因此,在进行GET类型url注入的时候,对“#”进行编码(%23),是必须的,否则,我们提交的payload就会由于URL解析的缘故造成错误。
注意对空格的编码
空格,在url编码时为20%,要特别注意,当使用“–”(两个减号)作为注释符的时候,后面要求有一个空格,如果在浏览器末尾输入一个空格,那么浏览器通常会去掉这个空格,因此,如果要在末尾添加空格,必须手动添加%20到浏览器末尾。
注意使用的工具对编码的要求
在进行SQL注入时,我们常常使用的是浏览器、burpsuit以及其他浏览器插件。通常情况下,浏览器会对普通的空格、引号等自动进行url编码;burpsuit不会对任何字符进行url编码;浏览器插件则视情况而定。因此,在使用burpsuit时,必须要对sql注入的特殊字符进行url编码,在使用浏览器和浏览器插件时,也推荐使用url编码。
二、关于奇葩库、表、字段的问题
在少数情况下,数据库的库、表、字段的名称非常奇葩,以至于普通的select语句查询是失败的。
比如,一个名称为select、insert、where的表。
比如,一个名称为2020、2021、2022的库。
前者使用了SQL语句的关键字作为名称,后者使用了数字作为名称,尽管在正规数据库中,很少采用上述方式作为库、表、字段的命名方式,但是,数据库通常支持创建以上述类型的库、表和字段。
一旦遇上了这样“不讲武德”的数据库,我们就需要把特定的库、表、字段用反引号(键盘上数字键左边的那个)括起来,这样我们的SQL语句就能正常执行了。

如上图,第一次执行SQL语句:

select * from select
1
执行失败,因为它不符合SQL语句的语法。
第二次执行SQL语句:

select * from select
1
这里,将select表用反引号括起来,就没有问题了。

三、关于SQL语句闭合的问题
我们常讲,SQL语句有3种闭合方式,分别是数字型、单引号和双引号,根据闭合方式的不同,我们要选择不同的策略以注入。
通常情况下是这样的,但是,在某些情况下,开发会在引号(包括单引号和双引号)外面加上括号括起来,sql语句成为这样:

select * from table where column=('content')
1
上述SQL语句也是符合SQL语法的,但是由于content是我们人为输入的内容,很多情况下即使闭合了前面的单引号,也忽略了括号,因此处理闭合问题时会引发特殊现象。发现有时页面既不是数字型、也不是单引号型,还不是双引号型。这个时候,可以考虑页面是不是用括号括起来的类型。

四、关于ASP站点的注入问题
尽管现在大多数网络环境都是用LAMP或LNMP作为架构,php作为网页开发常用的语言,占据了web服务器大部分的江山,但是仍然有部分站点使用ASP作为页面开发语言。
作为新手,常常出现的误区是使用和php注入同样的方式处理ASP,但是殊不知,ASP站点的SQL语句处理和PHP有小小的差别,但就是这点小小的差别,导致SQL语句处理不尽相同,如果直接用PHP的方式注入ASP,则会因为这点小差别而失败。
而且,一般情况下,ASP站点后他数据库常常使用oracle而不是mysql,而oracle和mysql数据库在注入的时候也会有不同,比如,oracle没有mysql中information_schema这个库,oracle甚至没有“库”的概念等等,这些差异,都会对我们注入产生较大的影响。
因此,在对ASP页面进行注入的时候,必须要采用ASP+oracle数据库的注入方式,该方式在网上有较多介绍,在这里就不详述了。

五、关于ajax的问题
ajax是目前网页中常常使用的一项技术,我们在进行sql注入的时候,可以试试对ajax请求进行注入。
对于新手来说,可能很难理解什么是ajax,在这里举几个简单的例子:
1、当使用百度的时候,输入关键词网页可以自动给予联想,如下所示:

2、部分网页(如豆瓣),在访问一个列表(如电影列表、图书列表)时,我们会发现开始时会出现一些项目,随着我们向后浏览,页面又返回了一些新的项目。
上述两种功能的实现,都是ajax的使用,使用js,而不是用户主动访问来实现GET或POST数据包的发送,从而达到自动返回数据的目的,这就是ajax的功能。
使用浏览器打开开发者工具,打开网络,XHR中的数据包就是ajax请求,如下所示:

因此,除了对浏览器url中进行注入外,还可以测试一下ajax请求中有没有SQL注入的存在,或许会有不小的收获哦!
技术讨论请加wx:wxid_5olqbdswojzw22
若本文对您产生帮助,还望您点赞+收藏+关注!
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40228200/article/details/114270915

目录
相关文章
|
SQL 应用服务中间件 nginx
python技术面试题(十二)--SQL注入、项目部署
python技术面试题(十二)--SQL注入、项目部署
|
11天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
39 3
|
21天前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
16 5
|
5月前
|
SQL 云安全 安全
怎么做好代码审计
代码审计,顾名思义,是一种对软件源代码进行系统性的检查和分析过程,旨在发现源代码中的安全缺陷、性能问题以及其他可能存在的缺陷。这是一种重要的软件质量保障手段,尤其在安全领域中占据着举足轻重的地位。
|
5月前
|
XML 安全 网络安全
渗透测试初级面试题
答:.先爆破用户名,再利用被爆破出来的用户名爆破密码;其实有些站点,在登 陆处也会这样提示;所有和数据库有交互的地方都有可能有注入。 如果你看到了这里,那就点个关注+评论呗! 如需资料可私信,回复不及时,请见谅! 网安面经,试题,题库,需要哪个评论区私信
|
SQL 安全 前端开发
Web安全性测试包括哪些要点?梳理下,总算搞明白了
Web安全性测试包括哪些要点?梳理下,总算搞明白了
412 0
Web安全性测试包括哪些要点?梳理下,总算搞明白了
|
12月前
|
SQL 安全 前端开发
新手学习渗透测试常规思路
2017黑客新手工具系列集合附链接 - 知乎专栏|这门技术(艺术)一开始也不是每个人都会的,正所谓没有人一出生就会走路,从不懂到入门到深谙,一步步慢慢来,每个人都是这样;但是在这个过程中, 思路无疑是最重要的,没有做不到只有想不到,就跟咱们高中解题时有了思路就迎刃而解一样,手里拿着铲子(技巧知识)但不是道从何挖起岂不是悲哀。
133 0
|
SQL 数据库
SQL注入基础知识(自己的笔记)
这是0xThrL的GD师傅在学习SQL注入时候写的笔记 ,也是希望可以帮助到大家,有什么问题希望各位师傅可以指出。
105 0
|
网络安全
渗透测试面试题整理
渗透测试面试题整理
839 0
|
SQL XML 前端开发
sql注入数据库原理详解
作者主页:https://www.couragesteak.com/
sql注入数据库原理详解