我们正在尝试找到一个 PHP 脚本,该脚本正在组装一个查询并造成严重破坏。到目前为止,我们还没有成功使用 grep 来定位脚本。
是否可以使用 mySQL pidshow processlist
来定位发出查询的 PHP 脚本?
不要这么想。很大程度上取决于实际的架构和拓扑。
也许——这也可能具有极大的破坏性,具体取决于上下文——您可以尝试覆盖 mysql_query 函数(或各种脚本中使用的任何包装器),以便识别行为不端/恶意查询并记录所有相关信息.
见: http: //no2.php.net/runkit_function_redefine
由于日志记录将在破坏性脚本的“内部”进行,因此可以获得更多信息。
另一种可能性是过滤 MySQL 查询并在脚本中引发一些可识别的行为,例如等待很长时间或抛出错误。这可以通过 MySQL 代理实现:https ://launchpad.net/mysql-proxy
假设脚本是恶意的,无法定位它可能指向某种加密 - 通常此类脚本大量使用 eval()、base64_decode 和有时 gzuncompress()。寻找这些函数可能比搜索查询片段更有效率。
一个有用的技巧,现在不是很有用,可能是用暴露的注释“装饰”查询,例如,“SELECT ... WHERE ...; -- 012345”:“-- 012345”部分将被 MySQL 忽略, 但可以很容易地记录下来,并且 grepping "-- 012345" 会很快找到目标。