sql注入原理,为什么要sql注入
sql注入原理,SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。
sql注入原理:
下面我们来说一下sql注入原理,以使读者对sql注入攻击有一个感性的认识,至于其他攻击,原理是一致的。
SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台 都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。
SQL注入式攻击的主要形式有两种:
♦一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
♦二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。
![](https://img-blog.csdnimg.cn/img_convert/15aea4c5bd844b079f519a1bc621ea2e.png)
为什么要sql注入?
♦SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
防止SQL注入:
1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
2、执行sql语句时使用addslashes进行sql语句转换
3、Sql语句书写尽量不要省略小引号和单引号
4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*
5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
6、Php配置文件中设置register_globals为off,关闭全局变量注册
SQL注入语句的简单例子
1.SQL注入漏洞的几种判断方法
①http://www.heetian.com/showtail.asp?id=40'
②http://www.heetian.com/showtail.asp?id=40 and 1=1
③http://www.heetian.com/showtail.asp?id=40 and 1=2
如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。
如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。
因为正确的链接:http://www.heetian.com/showtail.asp?id=40没有问题,如果如果执行①后,页面上提示报错或者提示数据库错误的话说明是不满足条件,说明查询的条件不满足,是有一个查询语句的,明是存在注入漏洞,如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。
2.收集信息、判断数据库类型
从其返回的信息中可以判断下数据库的类型,更多可能可以知道部分数据库中的字段以及其他有用信息,为下一步攻击提供铺垫。
3.根据注入参数类型,重构SQL语句的原貌
①ID=40 这类注入的参数是数字型,那么SQL语句的原貌大致是:Select*from 表名 where 字段=40
②name=电影 这类注入的参数是字符型,SQL语句原貌大致是:Select*from 表名 where 字段=‘电影’
③搜索时没有过滤参数的,如keyword=关键字,SQL语句原貌大致是:Select*from 表名 where 字段 like ‘%关键字%’
4.猜解表名、字段名(直接将SQL语句添加到URL后)
①and exists(select*from 表名)
如果页面没有任何变化,说明附加条件成立,那么就是说明猜解的表名正确,反之,就是不存在这个表,接下来就继续猜解,知道正确
②and exists(select 字段 from 表名)
方法原理同上
③猜解字段内容(利用以上猜解出的表名和字段名 方法较古老且麻烦)
●猜解字段内容的长度
(select top 1 len(字段名)from 表名)>0 直至猜解到>n不成立的时候,得出字段的长度为:n+1。
●得到长度后,猜解具体的内容
(select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立时,就可以猜解出ASCII码的值了。
相关文章
- SQL注入靶场sqli-labs 1-65关全部通关教程
- 某PHP发卡系统SQL注入
- Java SQL注入学习笔记
- Ecshop 2.x_3.x SQL注入和代码执行漏洞复现和分析
- SQL注入(一) - 入门篇
- 子类继承HibernateDaoSupport后如何注入SessionFactory
- SQL注入绕过safedog姿势及原理
- Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
- SAP Spartacus breakpoint服务中platformID的注入逻辑
- SQL注入(SQL注入(SQLi)攻击)攻击-脱库
- WEB漏洞攻防 - SQL注入 - 堆叠注入
- SQL VQ11 找出sql类题目的单次最大刷题数
- 【SQL干货】一条sql查出来全国空气质量排名
- sql工具和手工注入总结
- sql 精读(二) 标准 SQL 中的编号函数
- Nginx实现XSS、SQL注入防护 —— 筑梦之路
- 1. SSTI(模板注入)漏洞(入门篇)
- SQL注入——WAF绕过
- SQL注入 Sqli-labs-Less-21(笔记)——还是回显注入 使用union select即可 但是要注意sql括号闭合 也可以报错注入
- 靶场推荐——pikachu SQL注入示例
- WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等
- 通杀! 熬夜码的 - 八万字 - 让你一文读懂SQL注入漏洞原理及各种场景利用
- 2023年中职网络安全——SQL注入测试(PL)解析