我刚刚在我的一个web目录中发现了一些奇怪的PHP文件.他们原来是垃圾邮件发送者利用文件.
他们自2006年以来一直在那里,大概是我使用我的CGI剧本进行高调的捐赠活动.并且文件放在脚本的可写目录中,因此我怀疑我的脚本可能已被某种方式利用.
但是我正在使用Perl"污点检查",严格等等,而且我永远不会将查询数据传递给shell(它永远不会调用shell!)或使用查询数据为OPEN生成文件路径...我只我在脚本中直接指定的OPEN文件.我确实将查询数据INTO写入文件作为文件内容传递,但据我所知,这并不危险.
我盯着这些脚本看不到任何东西,我研究了所有标准的Perl CGI漏洞.当然,他们可能以某种方式获得了我的托管帐户的密码,但事实上这些脚本放在我的CGI脚本的数据目录中让我怀疑脚本.(此外,他们"以某种方式"获取我的密码是一个更可怕的解释.)此外,在那段时间,我的日志显示许多"警告,从非PayPal地址收到的IPN"消息,这些IP来自俄罗斯.因此,似乎有人至少在尝试破解这些脚本.
涉及两个脚本,我将它们粘贴在下面.任何人都可以看到任何可能被利用来编写意外文件的东西?
这是第一个脚本(用于接收PayPal IPN并跟踪捐赠,还跟踪哪个网站产生的捐款最多):
#!/usr/bin/perl -wT
# Created by Jason Rohrer, December 2005
# Copied basic structure and PayPal protocol code from DonationTracker v0.1
# Script settings
# Basic settings
# email address this script is tracking payments for
my $receiverEmail = "receiver\@yahoo.com";
# This script must have write permissions to BOTH of its DataDirectories.
# It must be able to create files in these directories.
# On most web servers, this means the directory must …Run Code Online (Sandbox Code Playgroud) 这是一个生产PHP/MySQL系统,已经运行了几个月,大多没有问题.
很偶然,就像每隔几周一次,我从MySQL查询中看到"无法保存结果集"错误.
我知道这可能是由一个大的结果集引起的,但事实并非如此.在最近的例子中,它发生在通常不超过10行的小表中(行表示活动游戏,并且在游戏结束后它们被移除 - 大量转换,但总是很小).
查询非常简单:
SELECT player_1_id, player_2_id FROM minuetServer_games
WHERE ( player_1_id = '1513399' OR player_2_id = '1513399' )
AND last_action_time < SUBTIME( CURRENT_TIMESTAMP, '0 0:01:22.000' )
FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)
这个查询的目的是为给定的user_id(它们可以是p1或p2)找到任何不太陈旧的活动游戏.如果存在,我在下一个查询中更新了他们游戏的last_action_time(当然,当未保存结果集时,不会发生更新).
我运行了CHECK TABLE,结果还可以.
虚假,偶尔"无法保存结果集"警告的原因是什么?有办法解决吗?有一个坚实的解决方案吗?
编辑:
一位评论者要求提供有关他PHP配置的更多信息.这是phpinfo()输出的直接链接:
http://cordialminuet.com/info.php
EDIT2:
这是创建查询的代码:
global $tableNamePrefix;
cm_queryDatabase( "SET AUTOCOMMIT=0" );
global $moveTimeLimit;
$query = "SELECT player_1_id, player_2_id ".
"FROM $tableNamePrefix"."games ".
"WHERE ( player_1_id = '$user_id' OR player_2_id = '$user_id' ) ".
" AND last_action_time < ".
" SUBTIME( CURRENT_TIMESTAMP, '$moveTimeLimit' ) FOR UPDATE;"; …Run Code Online (Sandbox Code Playgroud)