一、SQL注入的原理概念
在owasp发布的top 10漏洞里面,注入漏洞一直是危害排名第一,其中主要指SQL Inject漏洞。
主要分为数字型和字符型两种。
1、形成原因
Sql注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的Sql语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
2、主要威胁
1、从技术上来说:未授权、非法增删改查数据库内容,包括窃取信息、删除数据库、读写系统文件、执行命令等等;
2、从影响上来说:客户数据丢失、系统交易数据被篡改、网站首页被篡改。
3、一般攻击流程
第一步:注入点探测
- 自动探测:使用web漏洞扫描工具,自动进行注入点的判断、
- 手动方式:通过手工构造Sql inject测试语句进行判断
第二步:信息获取
通过注入点获取想要的数据。
- 环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。
- 数据库信息:数据库名称,数据库表名,表字段、字段值等。
第三步:获取权限
通过获取到的信息,在数据库中执行shell、上传木马,获取操作系统权限。
二、注入类型的判断(手工)
测试环境:Windows10,kali,DVWA漏洞练习平台。
1、数字型注入漏洞
正确的URL:http://192.168.6.129:89/vulnerabilities/sqli/?id=2&Submit=Submit#
猜测可能的SQL语句: select name,firstname from user where user_id=id;
一般步骤:
第一步:
输入id值为 2'
,此时的SQL语句为:select name,firstname from user where user_id=2';
URL为:http://192.168.6.129:89/vulnerabilities/sqli/?id=2’&Submit=Submit#
很显然这是一个错误的输入,从而会导致页面无法输出正常数据,出现错误信息。
第二步:
输入id值为 2 and 1=1,此时的SQL语句为:select name,firstname from user where user_id=2 and 1=1
URL为:http://192.168.6.129:89/vulnerabilities/sqli/?id=2+and+1%3D1&Submit=Submit#
显然这是一个永真的输入,能被正确执行并返回正确数据。
第三步:
输入id值为 1 and 1=2,此时的SQL语句为:select name,firstname from user where user_id=2 and 1=2
URL 为:http://192.168.6.129:89/vulnerabilities/sqli/?id=2+and+1%3D2&Submit=Submit#
此时语句正常执行,但并没有返回数据,因为 1 and 1=2 始终为假。
如果以上步骤都满足,则说明存在SQL漏洞并且是一个数字型SQL漏洞。
2、字符型注入漏洞
当输入的数据为字符串时,这种情况下存在的SQL漏洞称之为字符型SQL注入漏洞。字符型注入漏洞与数字型注入漏洞最大的区别在于数字型不需要单引号闭合,而字符型需要单引号闭合。
字符型例句如下:
select * from table where username='admin';
字符型注入的关键点在于注入的语句如何闭合引号以及注释掉多余的代码。
如果输入的时 admin and 1=1,此时的SQL语句为:select * from table where username='admin and 1=1';
显然这是一个错误的语句,无法进行注入,因为数据库会将admin and 1=1
当作一个字符串进行查询。
所以在此时进行注入就要考虑闭合引号的问题,如果输入admin' and '1'='1' --+
则可以继续注入。