-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path18.txt
More file actions
72 lines (61 loc) · 3.11 KB
/
18.txt
File metadata and controls
72 lines (61 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Определение структуры каталогов WordPress
Допустим, известно, что интересующее вас веб-приложение использует фремворк WordPress. Посмотрим, как выглядит
его структура каталогов. Скачайте и распакуйте копию WordPress. Последнюю версию можно получить на странице
https://wordpress.org/download/. Здесь мы задействуем WordPress 5.4. Несмотря на то что расположение файлов может
отличаться от того, которое используется на атакуемом сервере, это станет хорошей отправной точкой для поиска файлов
и каталогов, имеющихся в большинстве версий.
Чтобы получить карту файлов и каталогов, поставляемых в стандартном дистрибутиве WordPress, создайте файл с именем
mapper.py. Давайте напишем функцию под названием gather_paths, которая будет обходить дистрибутив и вставлять
каждый полный путь к файлу в очередь web_paths:
import contextlib
import os
import queue
import requests
import sys
import threading
import time
FILTERED = [".jpg", ".gif", ".png", ".css"]
TARGET = "http://boodelyboo.com/wordpress"
THREADS = 10
answers = 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.contextmanager
def chdir(path):
"""
Сначала переходим по заданному пути.
В конце возвращаемся в исходную папку.
"""
this_dir = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(this_dir)
if __name__ == '__main__':
with chdir("/home/tim/Downloads/wordpress"):
gather_paths()
input('Press return to continue.')
Вначале мы определяем удаленный веб-сайт и создаем список расширений файлов, которые нас не интересуют. Этот список
может различаться в зависимости от атакуемого приложения, но в данном случае мы решили игнорировать изображения и
таблицы стилей. Нам нужны файлы с HTML-кодом или текстом, которые с более высокой вероятностью содержат информацию,
полезную для взлома сервера. Переменная answers - это объект Queue, в который будут записываться пути к файлам,
найденным локально. Еще один объект Queue, переменная web_paths, будет хранить файлы, которые мы попытаемся найти
на удаленном сервере. В функции gather_paths используется вызов os.walk для перебора всех файлов и каталогов локальной
копии веб-приложения. В ходе этого процесса мы формируем полные пути к файлам и сопоставляем их со списком,
хранящимся в переменной FILTERED, чтобы отобрать только нужные нам файлы. Каждый подходящий файл, найденный локально,
добавляется в очередь web_paths.
Следует отдельно остановиться на диспетчере контекста hdir. Это довольно удобная конструкция для тех, кто страдает
забывчивостью или просто хочет упростить себе жизнь. Диспетчеры контекста помогают в ситуациях, когда вы что-то
открыли и должны закрыть, что-то заблокировали и должны освободить или что-то изменили и должны вернуть в исходное
состояние. Вам, уже, наверное, знакомы встроенные диспетчеры контекста, такие как open для открытия файлов или
socket для работы с сокетами.