<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[七小木东]]></title> 
<link>http://www.qixiaomudong.cn/index.php</link> 
<description><![CDATA[七小木东]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[七小木东]]></copyright>
<item>
<link>http://www.qixiaomudong.cn/read.php?177</link>
<title><![CDATA[ASP+ACCESS的防范]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Asp/.net技术]]></category>
<pubDate>Mon, 04 Jun 2007 05:40:11 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?177</guid> 
<description>
<![CDATA[ 
	今天无聊,在百度里找了下&quot;ASP安全&quot;,结果却查到N多入侵的教程,而安全配置的资料相对较少.介于目前多数文章都是教怎么入侵,这里我就讲一下,把自己如何防护的方法说一下.希望能引出更多安全防范主面的讨论.<br/><br/>我们现在假设是ASP整站系统+ACCESS数据库的情况,我讲一下ASP+ACCESS的组合,如果有表达错误的地方,希望大家批评指正!<br/><br/>------------------------------------------------<br/><br/>步骤一:第一个应用是管理员登陆时报密码校验了,如输入1&#039;or&#039;1&#039;=&#039;1等就可直接进入管理员页面.虽说这个漏洞很老了,但目前存在这个漏洞的系统很多,尤其是新闻系统,二年前开发的ASP程序基本都存在这个漏洞.其实,只要把&quot; &#039; &quot;用别的符号代替就可避免类似错误.<br/><br/>------------------------------------------------<br/><br/>步骤二:第二个是大家用得很熟的对于参数过滤不严而导致的跨表查询,如x.asp?id=2 and 1=1,很多人都知道怎么攻击,却不知道如何堵住这漏洞,这倒是个奇怪的现象.即然是由于ID参数没有过滤引起的攻击,那我们就应在出现漏洞的那个页面中加入这样一段代码:<br/>&lt;%<br/>dim ZeTa<br/>ZeTa=request(&quot;id&quot;)<br/>if isnumeric(ZeTa)=0 or ZeTa=&quot;&quot; then<br/>response.write &quot;oh my god!!! there&#039;s a hack!!!&quot;<br/>response.end<br/>end if <br/>%&gt;<br/><br/><br/>如果你愿意,可把进行类似攻击的人重定向到别的页面去,这里就不多说了.<br/><br/>-------------------------------------------------<br/><br/>步骤三:session认证不得不说是个对付cookie伪造的好方法,而且可严格根据用户的级别使用户进入相应页面,具体可参照动网的后台验证代码.<br/><br/>-------------------------------------------------<br/><br/>步骤四:把数据库进行MD5加密.下载回来的ASP源程序有多半是没有加密的.密码明文躺在那儿,看着怪不舒服的.为了你的安全,别懒了,动手吧!<br/>(1)从动网那里拉个MD5.asp过来.作为加密数据库用.<br/>(2)然后在你的用户登陆页面最上边插入这样一句:&lt;!--#include file=&quot;md5.asp&quot;--&gt;<br/>(3)接着找到大概这样一句话:pass=request(&quot;pass&quot;),把它改成pass=md5(request(&quot;pass&quot;)).这样一来,你的数据库就算被下载了,也有一段时间要对方破解,如果你的密码够强壮,那你就嘿嘿地笑吧!由于采用session认证防止了cookie伪造,所以安全系数又加强了很多.<br/><br/>-------------------------------------------------<br/><br/>步骤五:数据库防下载.<br/>首先,在你的MDB文件中建一个表,表中取一个字段名,随便叫什么,接着在表里建一个字段,字段中填入&lt;%=&#039;a&#039;-1%&gt;,最后在数据库名前加个&quot;#&quot;.个人认为,这样更改应该相对比较安全了.当然,也不能保证绝对安全,现在的网络,牛人太多.说不定文章出来时已经又有别的方法下载了.<br/><br/>-------------------------------------------------<br/><br/>步骤六:post攻击<br/>常见的是把登录页面拉到自己本地中,然后修改一些参数再次提交.如果你的全部数据过滤都在表单上,那么你就可以遇上不幸.常见的例子就是留言本,可进行post提交数据.那么如何防止呢?下面的一段代码可检查对方提交的URL是否来自外部:<br/>&lt;%<br/>dim server_v1,server_v2<br/>server_v1=cstr(request.servervariables(&quot;http_referer&quot;))<br/>server_v2=cstr(request.servervariables(&quot;server_name&quot;))<br/>if mid(server_v1,8,len(server_v2))&lt;&gt;server_v2 then<br/>response.write &quot;不要从站点外提交参数&quot;<br/>response.end<br/>end if<br/>%&gt;<br/><br/>----------------------------------------------------<br/><br/>步骤七:文件上传.<br/>防止这个漏洞.加上这样一段代码就可以了:<br/>if instr(request(&quot;formpath&quot;,&quot;.&quot;))&gt;0 then response.write &quot;漏洞已补&quot; :response.end<br/><br/>-----------------------------------------------------<br/><br/>今天的课程.是看到网站有很多网站.被更改了页面,才写的!<br/>个人认为,找漏洞是好事,但找出后何必把人家改得面目全非呢?当然,我们没本事叫人家不改,所以只有先动手改自己了:)<br/><br/>今天的课程.有的地方不是很完美,希望大家把我没说好的地方补全!<br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?174</link>
<title><![CDATA[在unix上让apache支持asp]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Asp/.net技术]]></category>
<pubDate>Tue, 26 Sep 2006 09:44:11 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?174</guid> 
<description>
<![CDATA[ 
	在这里讨论这个问题,仅是为了研究,我个人认为,在unix上,让apache支持asp没有任何实际意义 <br/>如果以前是在win上开发的asp,我想你就让到在win上好好用吧,不用费劲的移植到unix上了 <br/><br/>我是在solaris上测试的安装,其它系统,freebsd,linux和sco我想也差不多,忘大家测时候能反馈给我你的结果,谢谢 <br/>好了,让我们开始吧 <br/>下载相关软件 <br/>apache_1.3.27.tar 下载:http://www.apache.org/dist <br/>Apache-ASP-2.49.tar 下载:http://cpan.org/modules/by-module/Apache/ <br/>mod_perl-1.27.tar 下载:http://perl.apache.org/download/index.html <br/>stable.tar(perl-5.8.0) 下载:http://www.cpan.org/src/ <br/><br/>把上面的软件下载到一个目录,如test <br/>1:解压 <br/>#tar xvf apache_1.3.27.tar <br/>#tar xvf Apache-ASP-2.49.tar <br/>#tar xvf mod_perl-1.27.tar <br/><br/>2:安装apache <br/>为了以DSO的方式安装mod_perl,所以要有so模块 <br/>#cd apache_1.3.27 <br/>#./configure --prefix=/usr/local/apache <br/>#make <br/>#make install <br/>上面这样编译会有一些modules加不进来,我只好手动指定modules了,大家用下面的命令安装apache <br/>#./configure --prefix=/usr/local/apache --enable-module=auth_anon --enable-module=auth_dbm --enable-module=autoindex - <br/><br/>-enable-module=cgi --enable-module=expires --enable-module=expires --enable-module=proxy --enable-module=rewrite - <br/><br/>-enable-module=so <br/>#make <br/>#make install <br/>检查安装的模块 <br/>#cd /usr/local/apache/bin/httpd -l <br/>Compiled-in modules: <br/>http_core.c <br/>mod_env.c <br/>mod_log_config.c <br/>mod_mime.c <br/>mod_negotiation.c <br/>mod_status.c <br/>mod_include.c <br/>mod_autoindex.c <br/>mod_dir.c <br/>mod_cgi.c <br/>mod_asis.c <br/>mod_imap.c <br/>mod_actions.c <br/>mod_userdir.c <br/>mod_alias.c <br/>mod_rewrite.c <br/>mod_access.c <br/>mod_auth.c <br/>mod_auth_anon.c <br/>mod_auth_dbm.c <br/>mod_proxy.c <br/>mod_expires.c <br/>mod_so.c <br/>mod_setenvif.c <br/>suexec: disabled; invalid wrapper /usr/local/apache/bin/suexe <br/><br/>3:安装mod_perl <br/>% make -v <br/>% gcc -v <br/>% perl -v <br/>安装perl <br/>我得perl版本不够,所以我升级了一下perl的版本,现在是v5.8.0 <br/>下载http://www.cpan.org/src/stable.tar <br/>#tar xvf stable.tar <br/>#cd perl-5.8.0/ <br/>#make <br/>#make install <br/>到sunfreeware下载pkg的安装也可以,可能还更简单 <br/><br/>#cd mod_perl-1.27 <br/>看看DSO编译的语法 <br/>#grep DSO Makefile.PL <br/>照猫画虎 <br/>#perl Makefile.PL EVERYTHING=1 DO_HTTPD=1 USE_APACI=1 USE_DSO=1 USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs <br/>#make <br/>#make install <br/><br/>测试mod_perl模块 <br/>启动apache <br/>#telnet localhost 80 <br/>Trying 127.0.0.1... <br/>Connected to localhost. <br/>Escape character is &#039;^]&#039;. <br/>输入get Head /http /1.0 <br/>HTTP/1.1 400 Bad Request <br/>Date: Wed, 25 Dec 2002 03:32:32 GMT <br/>Server: Apache/1.3.27 (Unix) mod_perl/1.27 <br/><br/>ok,mod_perl加上了 <br/><br/><br/>给perl安装asp模块,一张方法是CPAN安装,一种是常规安装 <br/>CPAN安装 <br/>#perl -MCPAN -e shell <br/>cpan&gt; install CPAN <br/>... <br/>Installing the Apache::ASP bundle will automatically install all the modules <br/>Apache::ASP is dependent on as well as Apache::ASP itself. If you have <br/>trouble installing the bundle, then try installing the necessary modules one <br/>at a time: <br/>cpan&gt; install MLDBM <br/>cpan&gt; install MLDBM::Sync <br/>cpan&gt; install Digest::MD5 <br/>cpan&gt; install Apache::ASP <br/><br/>For extra/optional functionality in Apache::ASP 2.31 or greater, like <br/>support for formFill, XSLT, or SSI, you can install this bundle via CPAN: <br/>cpan&gt; install Bundle::Apache::ASP::Extra <br/><br/>也可以用常规的方法安装asp模块 <br/>Otherwise, just copy ASP.pm to <br/>$PERLLIB/site/Apache <br/>&gt; perl Makefile.PL <br/>&gt; make <br/>&gt; make test <br/>&gt; make install <br/><br/>安装完毕,进行测试 <br/>在htdocs里vi一个test.asp,内容如下 <br/><br/>&lt;!-- sample here --&gt; <br/>&lt;html&gt; <br/>&lt;body&gt; <br/>For loop incrementing font size: &lt;p&gt; <br/>&lt;% for(1..5) &#123; %&gt; <br/>&lt;!-- iterated html text --&gt; <br/>&lt;font size=&quot;&lt;%=$_%&gt;&quot; &gt; Size = &lt;%=$_%&gt; &lt;/font&gt; &lt;br&gt; <br/>&lt;% &#125; %&gt; <br/>&lt;/body&gt; <br/>&lt;/html&gt; <br/>&lt;!-- end sample here --&gt; <br/><br/>http://202.106.185.101/test.asp <br/>大家可以到这里看看效果 <br/><br/>good luck! <br/><br/>参考文档 <br/>http://www.apache-asp.org/install.html <br/>http://cpan.org/modules/by-module/Apache/Apache-ASP-2.49.readme <br/>http://perl.apache.org/docs/1.0/guide/getwet.html#Installing_mod_perl <br/>http://www.freelamp.com/new/publish/1015481268/index_html <br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?175</link>
<title><![CDATA[asp数据库暴库]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Asp/.net技术]]></category>
<pubDate>Mon, 31 Jul 2006 02:25:00 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?175</guid> 
<description>
<![CDATA[ 
	asp数据库暴库&nbsp;&nbsp;&nbsp;&nbsp;<br/>去年的时候曾经有一段时间研究过ie双解码，所以对暴库有一定的认识，前些天终于收到黑客的杂志， <br/>里面看了一篇临的文章，下面我也谈谈个人对那篇文章的认识，这里要说的是，大家如果再深入点研 <br/>究下去，就会发现，暴库的利用不只是这么简单，还会有更多可以用的东东。&nbsp;&nbsp;<br/>暴库的方式有多种多样，我知道的就有3种以上，常见的暴的方法有：%5c类暴,conn.asp暴,ddos暴等等. <br/>这篇文章我主要讲%5c和conn.asp暴. <br/>可以说，这篇是对临国越南首相写的文章的补充. <br/><br/>1.%5c暴法 <br/>下面我们先用肉鸡来试一下 <br/>http://www.yianxin.com/e-market/bbs/Ｓelect.asp <br/>暴： <br/>http://www.yianxin.com/e-market/bbs%5cＳelect.asp <br/>返回信息如下： <br/>microsoft jet database engine 错误 ’80004005’&nbsp;&nbsp;<br/><br/>’d:&#92;www&#92;yianxin.comgr7shg3l26&#92;e-market&#92;data&#92;yianxinlzn.asp’不是一个有效的路径。 确定路径名称拼写是否正确，以及是否连接到文件存放的服务器。&nbsp;&nbsp;<br/><br/>/e-market/bbs/conn.asp，行3 <br/><br/>我们来看一下真实路径和暴出的路径 <br/>d:&#92;www&#92;yianxin.comgr7shg3l26&#92;e-market&#92;data&#92;yianxinlzn.asp&nbsp;&nbsp;&nbsp;&nbsp; 暴出的路径 <br/>d:&#92;www&#92;yianxin.comgr7shg3l26&#92;e-market&#92;bbs&#92;data&#92;yianxinlzn.asp&nbsp;&nbsp; 真实的路径 <br/>对比后我们发现暴出来的少了一个bbs <br/>这里我们还发现%5c就相当于一个休止符返回的路径就变成 <br/>绝对路径+%5c后面的内容 <br/>我们再来看一下对暴不出来的分析 <br/>肉鸡： http://www.guilin.com.cn/renrenbbs/body.asp?id=516 <br/>暴url: http://www.guilin.com.cn/renrenbbs%5cbody.asp?id=516 <br/>返回内容如图三所示 <br/><br/>此主题相关图片如下： <br/><br/>肉鸡: http://www.jijiahao.com/guest/default.asp <br/>暴url: http://www.jijiahao.com/guest%5cdefault.asp <br/>返回内容如图四所示 <br/><br/>此主题相关图片如下： <br/><br/>我们再来分析一下成功与失败的原因： <br/>http://www.yianxin.com/e-market/bbs%5cＳelect.asp <br/>会暴成功库，我们打开Ｓelect.asp我们会发现里面 <br/>&lt;!--#include file=&quot;conn.asp&quot;--&gt; <br/>&lt;!--#include file=&quot;pageset.asp&quot;--&gt; <br/>&lt;!--#include file=&quot;lock.asp&quot;--&gt; <br/>&lt;!--#include file=&quot;css.asp&quot;--&gt; <br/>也就是说有调用到其它文件 <br/>所以当你用%5c时，返回路径也就变成了 <br/>绝对路径+%5c后面的Ｓelect.asp，Ｓelect.asp又调用到路径库data/renren.asp <br/>所以返回的路径就变成了 <br/>绝对路径+路据库路径，而在绝对路径和路据库路径，我们知道有guest这个目录， <br/>这个时候因为绝对路径+路据库路径不存在(绝对路径+guest+路据库路径才存在) <br/>所以也就返回了，我们所看到的出错信息。 <br/>现在再来分析一下失败的原因： <br/>我个人认为是因为iis双解码的原因， <br/>例如，对于’&#92;’这个字符，正常编码后是%5c。这三个字符对应的编码为： <br/>’%’ = %25 <br/>’5’ = %35 <br/>’c’ = %63 <br/><br/>如果要对这三个字符再做一次编码，就可以有多种形式，例如： <br/>%255c <br/>%%35c <br/>%%35%63&nbsp;&nbsp;<br/>%25%35%63 <br/>... <br/><br/>因此，&quot;..&#92;&quot;就可以表示成&quot;..%255c&quot;或&quot;..%%35c&quot;等等形式。 <br/><br/>在经过第一次解码之后，变成&quot;..%5c&quot;。iis会认为这是一个正常的字符串，不会违反安全规则检查。而在第二次被解码之后，就会变成&quot;..&#92;&quot;。因此攻击者就可以使用&quot;..&#92;&quot;来进行目录遍历，执行web目录之外的任意程序。 <br/><br/>详细的大家可以看下面的资料参考 <br/><br/>我们再来分析图三和图四失败的原因就会发现，他可能解析成../，通过图的比较可以分析出来， <br/>难道这时就暴不出来了吗，当然不是，这要我们精心构造。 <br/>下面还会分析到。 <br/><br/>下面我们来纠正一下网上常见的错误观点。 <br/>1.不一定要asp?id=的才可以暴，只要有调用其它有文件就有可能暴 <br/>2.不一定是access,也可以是mssql，我就成功过，下面大总结的时候就会分析到只要是iis就有可能成功 <br/>3.不一定要调用到数据库，因为%5c的关键是调用，而不是一定是数据库. <br/>4.理论上讲，根目录通过精心构造是可以暴的，但有些人说的通过..%5c的却一定暴不出来，因为返回是 <br/>取%5c后面的与前面的无关 <br/>5.并不是说多层目录就暴的成功率就高,%5c能否成功关键是看系统怎么解析，另外我个人觉得能否暴出 <br/>与程序无关，更多的与系统有关，不信大家去百度找同一板本的人人留言板，你就会发现有的可以暴 <br/>出来，有的却暴不了出来。 <br/>好了，上面是对%5c暴库的初步了解 <br/><br/>2.conn.asp暴 <br/>conn.asp暴可以说，与系统无关，是因为目录的关系。 <br/>我用netbox架设同样可以暴，而%5c是iis解码错误，有那个漏洞的一定是windows系统. <br/>同样，我们还是通过比较来说明问题 <br/>肉鸡：http://192.168.0.55/ren/ <br/>暴1 : http://192.168.0.55/ren/images/conn.asp <br/>暴2 : http://192.168.0.55/ren/conn.asp <br/>其中暴1里面的conn.asp是从暴2里面复制过去的 <br/>返回内容： <br/>暴1: <br/>microsoft jet database engine ’80004005’&nbsp;&nbsp;<br/><br/>’c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot&#92;ren&#92;images&#92;data&#92;renren.asp’不是一个有效的路径。 确定路径名称拼写是否正确，以及是否连接到文件存放的服务器。 <br/><br/>&#92;wwwroot&#92;ren&#92;images&#92;conn.asp, line 3 <br/><br/>暴2: <br/>全是白白。 <br/>再来分析为什么conn.asp可以暴出来 <br/>conn.asp代码如下： <br/>&lt;% <br/>set conn=server.createobject(&quot;adodb.connection&quot;) <br/>conn.open=&quot;provider=microsoft.jet.oledb.4.0;data source=&quot;&amp;server.mappath(&quot;data/renren.asp&quot;) <br/>set rs=server.createobject(&quot;adodb.recordset&quot;) <br/>function connclose <br/>conn.close <br/>set conn = nothing <br/>end function <br/>function errmsg(message) <br/>session(&quot;err&quot;)=message <br/>response.redirect&quot;err.asp&quot; <br/>end function <br/>%&gt; <br/>其中最重要的是 <br/>set conn=server.createobject(&quot;adodb.connection&quot;) <br/>conn.open=&quot;provider=microsoft.jet.oledb.4.0;data source=&quot;&amp;server.mappath(&quot;data/renren.asp&quot;) <br/>这两句，这两句也是能暴出的关键. <br/>我们再来先看暴出的路径和真实路径的差别 <br/>c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot&#92;ren&#92;images&#92;data&#92;renren.asp 暴出的路径 <br/>c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot&#92;ren&#92;data&#92;renren.asp&nbsp;&nbsp;&nbsp;&nbsp; 真实的路径 <br/>我们会发现多了一个images，这是因为，conn.asp的返回路径是 <br/>绝对路径+conn.asp前的+conn.asp连接的数据库路径 <br/>像上面的就等于绝对路径c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot+conn.asp前面的ren/images+ <br/>data&#92;renren.asp也就是数据库路径，合起来就是 <br/>c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot&#92;+ren&#92;images&#92;+data&#92;renren.asp <br/>不同连接语法返回路径不一定一样，但是上面的连接语句返回的却一定是绝对路径 <br/>下面我们再来验证一下我们的正确性，把下面的内容保存为任何一个经过asp.dll解析过扩展的文件，如 <br/>linzi.asp,linzi.cdx等等，代码内容如下： <br/>&lt;% <br/>set conn=server.createobject(&quot;adodb.connection&quot;) <br/>conn.open=&quot;provider=microsoft.jet.oledb.4.0;data source=&quot;&amp;server.mappath(&quot;data/renren.asp&quot;) <br/>%&gt; <br/>这个时候你把他放在任何一个目录，只要不是ren目录里，也就是留言簿的根目录，都可以暴出绝对路径， <br/>这个时候你可能会问，难道根目录就暴不出了吗？答案是可以暴出来。你把上面代码里的 <br/>data/renren.asp改成任何一个不存在的目录或文件，也同样可以暴出来，例如，我改成 <br/>data123/renren.asp，因为data123不存在，所以就暴了出来，返回内容如下 <br/><br/>microsoft jet database engine ’80004005’&nbsp;&nbsp;<br/><br/>’c:&#92;documents and settings&#92;xiaoqiu&#92;桌面&#92;wwwroot&#92;ren&#92;data123&#92;renren.asp’不是一个有效的路径。 确定路径名称拼写是否正确，以及是否连接到文件存放的服务器。&nbsp;&nbsp;<br/><br/>&#92;wwwroot&#92;ren&#92;2.asp, line 3 <br/>我们还可以发现，并没有少目录，只不过目录出错，经过一大堆的测试，我个人总结出conn.asp暴成功的 <br/>原因以及对网上一些错误观点的个人看法： <br/>1.要暴不一定要调用到数据库，但是要暴库，一定要调到到数据库或与数据库有关的文件。 <br/>2.不一定conn.asp才可以暴，只要有调用其它文件，造成目录错误的都可以报，如动力的除了inc/conn.asp <br/>外，放在inc里面的其它文件同样也可以暴。 <br/>3.总结conn.asp的暴原因是你返回的目录和真实的目录不一定，或者也可以说是不存在。 <br/><br/>3.暴的简单利用： <br/>1.下载数据库进后台找上传点，然后得到webshell <br/>2.往数据库里面插入asp小马，详细的可以参考angel的文章《把mdb改成asp带来的灾难》 <br/>3.access跨库查询 <br/>如语句： <br/>Ｓelect count(*) from dv_admin in ’d:&#92;www&#92;data&#92;dvbbs7.mdb’ <br/>4.注入时的利用，如mssql backup a shell <br/>5.绕过后台验证，详细的可以见我收集的暴库文摘 <br/><br/>好了，就这么些吧，上面可以说只是暴后攻击的冰山一角，当你再深入下去，你会发现还有更恐怖 <br/>的东西在后面，2k+sp4有人利用双解码成功了，这也只是一角。 <br/>还有这里要说一下的是，有的人说用asp.dll解析mdb用来防下载，事实上稍微不笨的人，就会发现这是 <br/>一种愚蠢的做法，当你用asp.dll解析mdb后，你把newmmm.asp改成newmm.mdb上传后，就相当于一个 <br/>newmm.asp，因为asp.dll解析过的扩展只要里面有asp语句就会被执行，这和cer,cdx等，一个道理. <br/>我个人认为防下载的最好方法是往数据库里加入防下载表段&lt;% zhenzhen520 &lt;%，只要插入这个就可以 <br/>防下载了，懂点asp的人都知道，&lt;% zhenzhen520 &lt;%放到数据库里，一定会发生语法错误，因为没有%&gt; <br/>结束符，当然你可以说，可以注是，事实上，注是是不可能的事，除非你得到了shell，修改数据库，否 <br/>则你就别想了，因为就算让你加上了两个%&gt;结束符，但是因为&lt;%%&gt;里面的东西不满足asp语法，也会发生 <br/>500错误。不信？要不你试试动网，动网的数据库就是这样。 <br/><br/>4.防范： <br/>1.最好的办法临在文章里也说过了，就是屏所有的出错。 <br/>2.加容错语句，不过要注意的是，你加了容错，只能是你加的那个文件暴不出来，但并不代表，其它文件 <br/>暴不出来。 <br/>3.把数据库在非相对路径下，例如：你本来的路据库路径是：c:&#92;www&#92;data&#92;dvbbs.asp，这时你可以把数 <br/>据库改放在c:&#92;里，这样就下载不到数据库。 <br/>好了，防的方法就说到这里了。因为我说的都是废话，大家都看过的. <br/><br/>5.%5c暴与conn.asp总结： <br/>可以说%5c暴是因为调用文件出错，而conn.asp暴是因为返回的路径出错或不存在。 <br/><br/>6.conn.asp与%5c的结合： <br/>可以说如何构造是入侵时能不能暴出的关键。 <br/>现在我们假设，guest目录放在c:&#92;www&#92;下，而conn.asp放在c:&#92;www&#92;guest&#92;conn.asp，直接调用 <br/>http://192.168.0.13/guest/conn.asp不会报错，因为返回路径是正确的，通过上面的，我们可以知道 <br/>conn.asp暴是因为返回路不存在。现在我们对比一下%5c和conn.asp的不同返回路径 <br/>1.%5c&nbsp;&nbsp;&nbsp;&nbsp; : 绝对路径+%5c后面的内容 <br/>2.conn.asp : 绝对路径+conn.asp前面的相对路径+conn.asp调用的数据库路径 <br/>两者结合起来，假设http://192.168.1.13/guest%5ccoonn.asp <br/>那么返回路径也就变成了 <br/>绝对路径+conn.asp，但实际在入侵之时，我们会发现有的时候并不是，这个时候大家别忘了双解码 <br/>好了，我只提出思路，实际的入侵方法，我想你可能已经想到。 <br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?176</link>
<title><![CDATA[存储过程介绍及asp存储过程的使用 ]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Asp/.net技术]]></category>
<pubDate>Tue, 25 Jul 2006 05:41:59 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?176</guid> 
<description>
<![CDATA[ 
	一、先介绍一下什么是存储过程 <br/>存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言，它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以下功能，让用户可以设计出符合引用需求的程序： <br/>1)、变量说明 <br/>2)、ANSI兼容的SQL命令(如Select,Update….) <br/>3)、一般流程控制命令(if…else…、while….) <br/>4)、内部函数 <br/><br/>二、存储过程的书写格 <br/><br/>CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] <br/>[(参数#1,…参数#1024)] <br/>[WITH <br/>&#123;RECOMPILE &#124; ENCRYPTION &#124; RECOMPILE, ENCRYPTION&#125; <br/>] <br/>[FOR REPLICATION] <br/>AS 程序行 <br/><br/>其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数 <br/>(SQL Server 7.0以上版本),参数的使用方法如下: <br/><br/>@参数名 数据类型 [VARYING] [=内定值] [OUTPUT] <br/><br/>每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外，其他SQL Server所支持的数据类型都可使用。 <br/>[=内定值]相当于我们在建立数据库时设定一个字段的默认值，这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的，也就是在调用了这个存储过程时，如果所指定的参数值是我们需要输入的参数，同时也需要在结果中输出的，则该项必须为OUTPUT，而如果只是做输出参数用，可以用CURSOR，同时在使用该参数时，必须指定VARYING和OUTPUT这两个语句。 <br/><br/>例子: <br/>CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS <br/>SELECT @p_tot = sum(Unitprice*Quantity) <br/>FROM orderdetails <br/>WHERE ordered=@o_id <br/><br/>例子说明: <br/>该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id),由定单明细表(orderdetails)中计算该定单销售总额[单价(Unitprice)*数量(Quantity)],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序 <br/><br/>三、在SQL Server中执行存储过程 <br/><br/>在SQL Server的查询分析器中，输入以下代码: <br/>declare @tot_amt int <br/>execute order_tot_amt 1,@tot_amt output <br/>select @tot_amt <br/><br/>以上代码是执行order_tot_amt这一存储过程，以计算出定单编号为1的定单销售金额，我们定义@tot_amt为输出参数，用来承接我们所要的结果 <br/><br/>四、在ASP中调用存储过程 <br/><br/>&lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须加载adovbs.inc文件，否则将出错&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&gt; <br/>&lt;!--#include file=&quot;adovbs.inc&quot;--&gt; <br/>&lt;% <br/>dim objCnn <br/>dim objCmd <br/>dim Rs <br/>const o_id=112 <br/><br/>’-----建立Connection对象---------- <br/>set objCnn=Server.CreateObject(&quot;Adodb.connection&quot;) <br/>objCnn.Open &quot;driver=&#123;sql server&#125;;server=localhost;uid=sa;pwd=cncanet;database=check;&quot; <br/>’-----建立Command对象----------- <br/>set objCmd=Server.CreateObject(&quot;Adodb.Command&quot;) <br/>objCmd.ActiveConnection=objCnn <br/>objCmd.CommandText=&quot;order_tot_amt&quot; ’指定存储过程名称 <br/>objCmd.CommandType=adCmdStoredProc ’其为Stored Procedure <br/>’-----准备stored procedure 的参数------- <br/>objCmd.Parameters.Append _ <br/>objCmd.CreateParameter(&quot;o_id&quot;,adInteger,adParamInput,,o_id) <br/>objCmd.Parameters.Append _ <br/>objCmd.CreateParameter(&quot;p_tot&quot;,adBigInt,adParamOutput,,0) <br/>’-----执行存储过程---------------------- <br/>objCmd.Execute <br/><br/>’-----输出参数以及处理结果-------------- <br/>for each parm in objCmd.Parameters <br/>Response.Write parm.name &amp;&quot;=&quot;&amp; trim(parm) &amp;&quot;&lt;br&gt;&quot; <br/>next <br/>%&gt; <br/><br/>
]]>
</description>
</item>
</channel>
</rss>