转载请注明作者及出处:
在编写目录遍历工具之前,我们首先要搭建一个WordPress框架环境,用以实践我们稍后编写出的工具。这里推荐大家通过在kali linux安装小皮面板搭建环境,毕竟用小皮搭环境是真方便(真香!)
一、环境搭建
打开终端,输入以下命令安装小皮面板
wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh
在小皮面板安装完成后,会在最后的部分提示登录管理界面的URL,以及初始用户名和密码,大家记得保存
如果重启设备之后发现小皮没有开机自启,可以在终端输入xp,打开小皮命令行管理界面进行开启,具体详情如下图
然后浏览器登录小皮管理界面,开启MySQL和Apache,由于一会用来测试的WordPress5.4版本对PHP有依赖关系(php5.6以上),所以我们需要下载安装php5.6.40版本,并如图所示将网站php版本更换为5.6.40版本
注:如小皮面板未自动创建数据库,请手动创建数据库
接下来我们前往WordPress官网,下载WordPress5.4版本并在小皮网站根目录解压,我的根目录是/www/admin/localhost_80/wwwroot
然后进入WordPress解压目录修改如图所示配置文件,将数据库名、用户名、密码做相应配置(配置思路类似DVWA靶场搭建配置),修改完后将文件名修改为wp-config.php
浏览器访问我们刚才搭建的WordPress,搭建成功
二、目录遍历工具编写
话不多说,上代码
import contextlibimport osimport queueimport requestsimport sysimport threadingimport timeFILTERED = [".jpg", ".gif", ".png", ".css"]TARGET = "http://localhost/wordpress/"THREADS = 10answers = queue.Queue()web_paths = queue.Queue()def gather_paths(): for root, _, files in os.walk('.'): for fname in files: if os.path.splitext(fname)[1] in FILTERED: continue path = os.path.join(root, fname) if path.startswith('.'): path = path[1:] print(path) web_paths.put(path)@contextlib.contextmanagerdef chdir(path): """ 在进入时将目录更改为指定路径. 在退出时,回到原始目录. """ this_dir = os.getcwd() os.chdir(path) try: yield finally: os.chdir(this_dir)if __name__ == '__main__': with chdir("/www/admin/localhost_80/wwwroot/wordpress"): gather_paths() input('按下Enter键继续')
首先,我们设置了目录遍历的URL(http://localhost/wordpress/),并且我们创建了一个列表,这个列表包含了我们想要在扫描时跳过的文件类型,因为这些类型的文件通常对我们的价值并不大。
然后,我们使用os.walk函数遍历web应用安装目录中的所有文件和目录,在遍历过程中,我们会构建目标文件的完整路径,并且会通过FILTERED列表跳过我们不想要的文件类型。
大家可能注意到,我们用作异常处理的代码块并没有使用try/except,而是使用了try/finally,它与前者的区别在于,不管try代码块出现什么问题,finally代码块都一定会被执行。
在main代码块中,我们给定了WordPress的解压目录,也就是我们通过浏览器访问WordPress时访问的WordPress具体路径
让我们运行一下这个工具,看看它发挥的力量!
来源地址:https://blog.csdn.net/m0_68080066/article/details/128060563