一、SQL注入原理
SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。
它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。
产生原因:程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。
二、环境配置
参照链接超细DVWA靶场搭建--(小黑栈渗透测试初级篇1)_dvwn能不能做内网渗透_小黑日志的博客-CSDN博客
三、测试过程
low难度
当我们在输入框中输入1时,发现有回显 ,那这就可以方便我们接下来的实验。
首先我们要知道代码层面为什么会产生SQL注入
我们去查看靶场的源代码(low.php)
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
那岂不是我们可以在输入1的时候在后面拼接一些别的指令?
那么我们继续实验
在输入框中输入1'union select 1,2 --
注:至于为什么直接从两个开始,是因为select 1 的话会报错说
The used SELECT statements have a different number of columns
从上面直接输入1不拼接语句的回显来看,可能是因为他有两个显示位,而你只给了一个数据,匹配不上故而报错。
我们发现1和2的显示位置到了下面
那么我们输入1' union select 1,2,3 -- 或者1’union select 1,2,3,4 -- 呢?
发生了报错,说明最多只能注入到2
在我们判断了回显位置后,我的目的是想看一看当前数据库中其他用户的账号密码。
那么我们就先看一下当前数据库的名字
1' union select 1,database() --
查询出数据库为dvwa
接下来查询表名
这就要用到information_schema默认库
information_schema提供了对数据库元数据、统计信息、以及有关MySQL Server的信息访问(例如:数据库名或表名,字段的数据类型和访问权限等)。该库中保存的信息也可以称为MySQL的数据字典或系统目录。
那在我们对表名一无所知的时候就可以来这个里面查询。
拼接后查询语句为:1' union select 1,table_name from information_schema.tables where table_schema='dvwa'--
如果这个语句报错了参照这个链接解决关于SQL注入报错:Illegal mix of collations for operation ‘UNION‘原因剖析与验证_0ak1ey的博客-CSDN博客
发现有两个表名
接下来我们就要查字段名(知道数据库名-->知道表名-->知道字段名-->查询具体的字段信息)
我们来查users的,看起来比较有用
拼接语句为:1' union select 1,column_name from information_schema.columns where table_name='users'--
在知道了字段名后我们就要去查询具体的信息了,我们发现users这个表的信息确实很有用,含有密码信息
1’ union select user,password from users#
我的这里再次报错了.........
正在想法子解决....