渗透测试之SQL注入案例入门

几乎OWASP每年的top 10 安全问题中,SQL注入 一直高居榜首,这也就成为了安全测试渗透测试领域最为关注的一个点。

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序, 而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

渗透测试之SQL注入案例入门

一、SQL注入的应用场景

1、对于Web应用程序而言,用户核心数据存储在数据库中,例如MySQL、SQL Server、Oracle;

2、通过SQL注入攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作;

3、SQL注入即攻击者通过构造特殊的SQL语句,入侵目标系统,致使后台数据库泄露数据的过程;

4、因为SQL注入漏洞造成的严重危害性,所以常年稳居OWASP TOP10的榜首!

二、SQL注入的特点

1、拖库导致用户数据泄漏;

2、危害web等应用的安全;

3、失去操作系统的控制权;

4、用户信息被非法买卖;

5、危害企业及国家的安全。

三、SQL注入案例

下图是一段php的原码,其中对数据库的查询语句中直接使用了前端页面传递的表单数据。

渗透测试之SQL注入案例入门

如果我们前端页面输入一个正规的数据,user_id为1。

则执行:

select first_name,last_name from dvwa.users where user_id='1';

可以获得user_id为1的first_name和last_name并返回,这是我们正常使用系统并可以得到正常的结果。

1、注入布尔表达式的情况

但如果我们在前端页面输入user_id的数据为: ' or 1=1 -- '

即为:select first_name,last_name from dvwa.users where user_id=' ' or 1=1 -- ' '

则整个语句的意思是从数据库库的users表里面查询first_name,last_name两个字段的所有内容。

2、注入逻辑运算的情况

如果前端页面输入user_id的数据为:' and sleep(5) -- ''

即为:select first_name,last_name from dvwa.users where user_id='1' and sleep(5) -- ''

如果执行页面响应等待了5s则这个sleep(5)就可以更换为你希望的其他任何条件,从而获取到你不应该看到的数据。

3、注入union语句

UNION语句用于联合前面的SELECT查询语句,合并查询更多信息;

即为:select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- ''

里面的1,2,3 代表的是字段名,union语句查询的时候,前后的 字段数量必须相同,所以我们可以用数字代表字段,来猜测union之前的语句中有几个字段。这里 显然只有两个字段。

四、SQL注入防范

1、用存储过程来执行所有的查询,使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

2、限制表单或查询字符串输入的长度。

3、检查用户输入的合法性,确信输入的内容只包含合法的数据。

4、将用户登录名称、密码等数据加密保存,加密用户输入的数据,然后再将它与数据库中保存的数据比较。 
5、检查提取数据的查询所返回的记录数量,如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。 

源自公众号  软件测试藏经阁



留言