Керівництво по Proxychains

Proxychains – інструмент для анонімізації трафіку і мережевої розвідки

Proxychains – це OpenSource інструмент командного рядка Linux, який дозволяє пропускати кожне TCP-з’єднання через ланцюжок проксі: TOR, SOCKS4, SOCKS5, HTTP(S). Його корисно використовувати пентестерам і спеціалістам з кібербезпеки на етапах мережевої розвідки, з метою анонімізації трафіку. Ви зможете переглядати веб-сторінки в даркнеті, парсити і скрапити дані з обходом rate limiting, не розкриваючи свою IP-адресу та місцезнаходження. Також можна застосовувати техніки тунелювання. Proxychains підтримує різні типи автентифікації: “user/pass” для SOCKS4/5 та “basic” для HTTP. Сумісний з додатками на базі libc бібліотеки. Підтримка ICMP/UDP відсутня.

Встановлення

Ubuntu/Debian

sudo apt-get install proxychains4

Arch Linux

sudo pacman -S proxychains-ng

Налаштування

Для початку роботи необхідно додати необхідні налаштування в файл конфігурації: /etc/proxychains.conf

По замовчуванню, він виглядає так. Але нам треба підігнати його під свої задачі.

Для початку необхідно в секції [ProxyList] додати список проксі-серверів, які будемо використовувати, наприклад:

[ProxyList]

#тип #адреса #порт #логін #пароль
http	192.168.89.3	8080	user	pass
socks4	192.168.1.49	1080
socks5  127.0.0.1 9050

Підказка: В якості хостів додавайте тільки нумеровані адреси. На даний момент, Proxychains не працює з non-numeric хостами з коробки. Якщо у вас є проксі з доменом, то дізнайтесь його IP з допомогою команди host example.com

Тепер необхідно вказати тип проксування, вони можуть бути наступними:

  • dynamic_chain – кожне з’єднання буде здійснюватися через різні прокcі-сервери у послідовності, яка задана в файлі (мертві проксі пропускаються). Тобто, проксі перестрибує по списку. Підходить для мережевої розвідки, сканування, парсингу, скрапінгу;
  • random_chain – кожне з’єднання буде здійснюватися через випадковий проксі-сервер (ротація IP-адрес). Проксі перестрибує випадково. Чудово для мережевої розвідки, аудиту, сканування;
  • strict_chain – кожен проксі-сервер використовується строго у вказаному порядку в файлі, від першого до другого, третього і так далі. Якщо один проксі-сервер не працює, ланцюжок з’єднання переривається. Актуально використовувати, якщо у вас є тільки один проксі, або для невеликих списків і задач з підвищеною анонімністю. Наприклад: Клієнт -> Проксі1 -> Проксі2 -> Проксі3 -> Ціль, або TOR -> HTTP-проксі -> SOCKS-проксі.

Переконайтеся, що необхідний ланцюжок розкоментований у файлі конфігурації, наприклад:

ЧИТАЙТЕ ТАКОЖ:  Безпека мобільних пристроїв і мереж. Як захистити смартфон від шахрайства, стеження та кіберзагроз

Додаткові опції:

  • proxy_dns – проксування DNS-запитів і запобігання витоків.
  • chain_len = 1 – параметр, який відповідає за ротацію проксі. Кожен запит буде здійснений з нового проксі. Працює лише для режиму random_chain.
  • quiet_mode – приховує зайві логи.
  • tcp_read_time_out 15000 – таймаут в мілісекундах, якщо проксі не відповідає під час з’єднання більше 15 секунд, обриває з’єднання;
  • tcp_connect_time_out 8000 – таймаут в мілісекундах, час очікування під’єднання до проксі.

Збережіть файл з усіма змінами: CTRL+O.

Приклад повного файлу конфігурації proxychains.conf:

# proxychains.conf  VER 4
#
#        HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
#	

# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
#dynamic_chain
#
# Dynamic - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
strict_chain
#
# Strict - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#random_chain
#
# Random - Each connection will be done via random proxy
# (or proxy chain, see  chain_len) from the list.
# this option is good to test your IDS :)

# Make sense only if random_chain
#chain_len = 2

# Quiet mode (no output from library)
#quiet_mode

# Proxy DNS requests - no leak for DNS data
#proxy_dns 

# set the class A subnet number to usefor use of the internal remote DNS mapping
# we use the reserved 224.x.x.x range by default,
# if the proxified app does a DNS request, we will return an IP from that range.
# on further accesses to this ip we will send the saved DNS name to the proxy.
# in case some control-freak app checks the returned ip, and denies to 
# connect, you can use another subnet, e.g. 10.x.x.x or 127.x.x.x.
# of course you should make sure that the proxified app does not need
# *real* access to this subnet. 
# i.e. dont use the same subnet then in the localnet section
#remote_dns_subnet 127 
#remote_dns_subnet 10
remote_dns_subnet 224

# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000

# By default enable localnet for loopback address ranges
# RFC5735 Loopback address range
localnet 127.0.0.0/255.0.0.0
# RFC1918 Private Address Ranges
# localnet 10.0.0.0/255.0.0.0
# localnet 172.16.0.0/255.240.0.0
# localnet 192.168.0.0/255.255.0.0

# Example for localnet exclusion
## Exclude connections to 192.168.1.0/24 with port 80
# localnet 192.168.1.0:80/255.255.255.0

## Exclude connections to 192.168.100.0/24
# localnet 192.168.100.0/255.255.255.0

## Exclude connections to ANYwhere with port 80
# localnet 0.0.0.0:80/0.0.0.0

### Examples for dnat
## Trying to proxy connections to destinations which are dnatted,
## will result in proxying connections to the new given destinations.
## Whenever I connect to 1.1.1.1 on port 1234 actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1:1234  1.1.1.2:443

## Whenever I connect to 1.1.1.1 on port 443 actually connect to 1.1.1.2 on port 443
## (no need to write :443 again)
# dnat 1.1.1.2:443  1.1.1.2

## No matter what port I connect to on 1.1.1.1 port actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1  1.1.1.2:443

## Always, instead of connecting to 1.1.1.1, connect to 1.1.1.2
# dnat 1.1.1.1  1.1.1.2


# ProxyList format
#       type  host  port [user pass]
#       (values separated by 'tab' or 'blank')
#
#
#        Examples:
#
#            	socks5	192.168.67.78	1080	lamer	secret
#		http	192.168.89.3	8080	justu	hidden
#	 	socks4	192.168.1.49	1080
#	        http	192.168.39.93	8080	
#		
#
#       proxy types: http, socks4, socks5, raw
#        * raw: The traffic is simply forwarded to the proxy without modification.
#        ( auth types supported: "basic"-http  "user/pass"-socks )
#

[ProxyList]
# add proxy here ...
# meanwhile
# defaults set to "tor"
#socks4 	127.0.0.1 9050
http XX.XXX.XX.XX 6060 username password

На замітку: Proxychains також може використовувати резидентні проксі з автоматичною IP-ротацією, наприклад ProxyScrape або WebShare. У такому випадку, потрібно просто скопіювати дані авторизації проксі-сервісу (наприклад, hostname:port:username:password) і вставити в файл конфігурації proxychains (з пробілами), зазначивши режим strict_chain (буде використовуватися лише один ланцюжок).

Схема роботи Proxychains
Принцип роботи ланцюжка проксі в Proxychains

👉 Де взяти проксі читайте тут >>

ЧИТАЙТЕ ТАКОЖ:  Пошук вразливостей камер відеоспостереження з допомогою Ingram

Використання

Для початку варто протестувати конфігурацію. Зробити це можна командою proxychains curl ipinfo.io, яка покаже дані IP-адреси з якої пройшло з’єднання. Якщо IP-адреса відрізняється від вашої локальної – значить проксі працює.

Приклади застосування:

  • proxychains feroxbuster -u https://example.com -w wp-fuzzlist.txt --random-agent – сканування директорій з допмогою feroxbuster через proxychains (також підтримує вбудоване проксування через ключ –proxy);
  • proxychains gobuster dir -u https://example.com -w common.txt -x php,html,js,css,txt -b 301,302 --timeout 15s -t 5 --random-agent – сканування директорій з допомогою gobuster через proxychains (може не працювати з параметром proxy_dns);
  • proxychains ffuf -u 'https://example.com/FUZZ' -w wp-fuzzlist.txt -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0" – фаззинг з допомогою FFUF через proxychains (може не працювати з параметром proxy_dns);
  • proxychains firefox https://httpbin.io – запуск браузера через proxychains (якщо проксі має ротацію або активна random/dynamic_chain, то кожен запит буде з нової IP-адреси);
  • proxychains nmap -sT -Pn X.X.X.X – сканування мережевих портів з допомогою nmap через proxychains (альтернативний варіант proxychains nmap -sS -p 1-65535 <target>);
  • proxychains nmap -sT -PN -n -sV -p 21 xxxxxx.onion  – сканування мережевих портів onion-сайту;
  • proxychains4 xfreerdp /u:username /p:password /v:host – під’єднання по RDP через proxychains;
  • proxychains nc XX.XX.XX.XXX 25 – з’єднання з mail-сервером з допомогою Netcap через proxychains;
  • proxychains ssh user@x.x.x.x – з’єднання з ssh-сервером через proxychains;
  • proxychains hydra -l <username> -P <password-list> <target-ip> ssh – запуск SSH-брутфорсера Hydra через proxychains;
  • proxychains sqlmap -u 'URL' --dbs --batch -p id --random-agent --tamper=between,space2comment --dbms mysql --tech=B --no-cast --flush-session --threads 10 – запуск SQLmap з tamper-скриптами для обходу WAF через proxychans.
WAF Bypass in SQLmap with Proxychains
Приклад успішного обходу WAF в SQLmap з допомогою Proxychains

Автор: © Konrad Ravenstone, KR. Laboratories Research

Konrad Ravenstone// про автора

Кібермольфар, хакер, лінуксоїд, дослідник безпеки в KR. Labs Research

Сподобалася стаття? Поділитися в соцмережах:
KR. Labs Research
Рекомендоване:
Thunar - файловий менеджер Linux в десктопному середовищі XFCE. Проблема…