SQL注入介绍
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。注入能导致数据丢失、破坏或泄露给无授权方,缺乏可审计性或是拒绝服务。注入有时甚至能导致主机被完全接管。就是把用户输入的数据当做代码执行。过于信任用户所谓SQL注入,就是通过把SQL命令插入到We
摘要:
本文介绍了SQL注入的概念、产生原因、危害,详细描述了其在渗透中的利用方式,包括绕过验证、获取敏感数据等,并探讨了如何挖掘SQL注入漏洞和判断其存在的方法。
目录
一、什么是注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
注入能导致数据丢失、破坏或泄露给无授权方,缺乏可审计性或是拒绝服务。注入有时甚至能导致主机被完全接管。
注入攻击的本质: 就是把用户输入的数据当做代码执行。(过于信任用户)
二、什么是SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令目的的入侵行为。
SQL注入实质就是闭合前一句查询语句,构造恶意语句,恶意语句被代入SQL语句执行。
三、SQL注入漏洞是怎么形成的

随着B/S(浏览器与服务端)模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的水平和经验参差不齐,相当一部分的开发人员在编写代码的时候,没有对用户的输入数据或者是页面中所携带的信息进行必要的合法性判断,导致了攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得一些他想得到的数据。这样就产生了被称为数据库的注入攻击SQL注入攻击。
-
原因1: 数据与代码未严格分离;
-
原因2: 用户提交的参数数据未做充分检查过滤即被代入到SQL命令中,改变了原有SQL命令的“语义”,且成功被数据库执行。
-
原因3: SQL命令可以进行查询、插入、删除等操作,直接将这些命令拼接起来。
四、SQL注入的危害
这些危害包括但不局限于:
-
数据库信息泄漏: 数据库中存放的用户的隐私信息的泄露。
-
网页篡改: 通过操作数据库对特定网页进行篡改。
-
网站被挂马,传播恶意软件: 修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
-
数据库被恶意操作: 数据库服务器被攻击,数据库的系统管理员帐户被窜改。
-
服务器被远程控制,被安装后门: 经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
-
破坏硬盘数据,瘫痪全系统。
-
一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。
五、SQL注入在渗透中的利用
1、绕过登录验证
使用万能密码登录网站后台等。
举例:万能密码
假设我的数据名是:user=admin,密码是 password=123456;
正常的查询语句:
SQL
select * from users where user=’admin’ and password=’123456’;
使用SQL注入构造的POC是:
SQL
select * from users where user=’admin’ or 1=’1’ --+’ and password=’123456’;
这个POC就可以直接把整个表的所有数据全部输出来,无视密码。
注释:
--+ :--是注释的意思,+是空格的意思,浏览器 会自动把+识别为空格,假如直接在数据库里面,直接--就可以。
2、获取敏感数据
获取网站管理员帐号、密码等。
3、文件系统操作
列目录,读取、写入文件等。
4、注册表操作
读取、写入、删除注册表等。
5、执行系统命令
远程执行命令。
六、如何挖掘SQL注入
1、常见的SQL注入漏洞流程

2、SQL注入漏洞分类
-
按数据类型:
-
数字型(Integer)
-
字符型(String)
-
-
按返回结果:
-
显错注入(Error-Based),就是查看查询语句的返回结果是否出现报错,从报错内容来推断数据库相关信息。
-
盲注(Boolean/Time-Based Blind),就是靠猜测,输入数据查询语句,看返回的自己长度来判读语句是为真还是为假。
-
3、可能存在SQL注入的地方
登录框、参数名、参数值、搜索框、跟用户有交互的地方、表单的提交、Cookie (asp类型的网站比较多)、目录名、文件名、…
-
最普遍的注入漏洞是由于参数值过滤不严导致的。
-
Cookie注入漏洞普遍存在于ASP的程序中。
-
参数名、目录名、文件名等注入漏洞通常存在于有网站路由的程序中。
4、如何判断是否存在SQL注入
根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。

5、SQL注入测试思路
盲注:
-
判断是否存在注入,注入是字符型还是数字型
-
猜解当前数据库名
-
猜解数据库中的表名
-
猜解表中的字段名
-
猜解数据
联合查询注入:
-
判断是否存在注入,注入是字符型还是数字型
-
猜解SQL查询语句中的字段数
-
确定显示的字段顺序
-
获取当前数据库
-
获取数据库中的表
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)