1、初识SQL注入
1.1、什么是注入?
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
注入能导致数据丢失、 破坏或泄露给无授权方,缺乏可审计性或是拒绝服务。注入有时甚至能导致主机完全被接管。 注入攻击的本质:就是把用户输入的数据当做代码执行。(过于信任用户)
1.2、什么是SQL注入?
SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的入侵行为。
(图片来源网络)
1.3、SQL注入产生的原因
随着B/S模式被广泛的应用,由于没有对用户的输入数据或者是页面中所携带的信息进行的合法性校验,导致了攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得一些Ta想得到的数据。被称为数据库的注入攻击(SQL注入攻击)。
也就是数据与代码未严格分离;用户提交的参数数据未做充分检查过滤就被代入到SQL命令中,改变了原有SQL命令的“语义”,且成功被数据库执行。
1.4、SQL注入的危害
包括但不局限于:
- 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
- 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
- 破坏硬盘数据,瘫痪全系统。
- 一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。
1.5、SQL注入在渗透中的利用
- 绕过登录验证:使用万能密码登录网站后台等。
- 获取敏感数据:获取网站管理员帐号、密码等。
- 文件系统操作:列目录,读取、写入文件等。
- 注册表操作:读取、写入、删除注册表等。
- 执行系统命令:远程执行命令。
2、如何挖掘SQL注入
2.1、常见SQL注入流程
2.2、SQL注入漏洞分类
2.2.1、按数据类型
可分为:数字型(Integer)和字符型(String)
2.2.2、按返回结果
可分为:显错注入(Error-Based)和盲注(Boolean/Time-Based Blind)
2.3、可能存在SQL注入的地方
- 最普遍的注入漏洞是由于参数值过滤不严导致的。
- Cookie注入漏洞普遍存在于ASP的程序中。
- 参数名、目录名、文件名等注入漏洞通常存在于有网站路由的程序中。
2.4、SQL注入测试思路
步骤 | 盲注 | 联合查询注入 |
---|---|---|
1 | 判断是否存在注入,注入是字符型还是数字型 | 判断是否存在注入,注入是字符型还是数字型 |
2 | 猜解当前数据库名 | 猜解SQL查询语句中的字段数 |
3 | 猜解数据库中的表名 | 确定显示的字段顺序 |
4 | 猜解表中的字段名 | 获取当前数据库 |
5 | 猜解数据 | 获取数据库中的表 |
2.4.1、判断是否存在SQL注入
(图片来源网络)
3、总结与题外话
本文先简单介绍SQL注入,后续会还详细介绍SQL注入一些POC、思路和靶场实验。《跟我学网安知识》系列我停更了2周多了共16天,原因有多方面,一方面我自己学网安课作业和靶场实验比较花费时间,另一方面我工作上有变动,在准备面试Java相关知识。
打个小小求职广告:Base厦门,Java高级开发,我擅长需求分析和较强的文档能力,有跨部门推动项目从0到1交付上线的经验,也有架构相关工作经历。如果有合适的岗位推荐请私信给我,非常感谢。