最近在学习SQL注入,初出茅庐,就从dvwa开始吧
sql注入可以通过sqlmap工具实现,为了更好地了解原理,这里主要是手工注入
注入的一般流程为:
1,找到注入点,此步骤可通过工具
2,判断注入类型
3,判断列数,展示位
4,利用函数获取数据库用户,版本号,数据库名等信息
5,联合注入法利用information_schema数据库中存储所有的表查看所有的表名
6,同步骤五获取字段名
7,根据字段名查看值
low级别:
更改过DVWA Security为low级别后我们就进到如下页面:
通过查看源码发现low等级的没有对输入的值做任何过滤,可以直接注入
1)用户交互的地方为表单,这也是常见的 SQL 注入漏洞存在的地方,首先我们通过测试语句测试是否存在注入点
先输入正常的数据查看返回的结果:
可以发现我们刚输入的值被作为ID值显示在页面上,接着我们输入“ ' ”测试,页面报错说明这个表单存在注入漏洞:
2)确定存在注入后,我们需要确定诸如类型为数字还是字符,以下是一些测试语句:
Ps:--+可以用#替换,url 提交过程中 Url 编码后的#为%23
or 1=1--+
1' or '1'='1
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+
我们输入1 or1=1令sql语句返回值为真,结果语句被作为值输出来了,说明不是数字型注入。输入1' or '1'='1 ,返回了数据库 中的所有数据,说明是字符型注入:
3)利用order by 字句查询列数,当输入"1' order by 3"时报错,说明列数为2:
4) 利用联合注入法测试出展示位:1' and 1=2 union select 1,2#
5)利用内置函数注入得出连接数据库用户,数据库名称和版本信息:user(),database(), version()
6)利用存储了所有数据库和表信息的information_schema数据库查询所有数据库的名称:
7)猜表名(太长了,只截了要用 的 表名):
8)字段名:发现敏感字段名user password
9)查看user password的值:获得管理员账号及密码