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 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.

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

