21 - Pentesting FTP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
फाइल ट्रांसफर प्रोटोकॉल (FTP) एक मानक प्रोटोकॉल के रूप में कार्य करता है जो एक कंप्यूटर नेटवर्क के माध्यम से एक सर्वर और एक क्लाइंट के बीच फाइल ट्रांसफर के लिए है।
यह एक सादा-टेक्स्ट प्रोटोकॉल है जो नया लाइन कैरेक्टर 0x0d 0x0a
का उपयोग करता है, इसलिए कभी-कभी आपको telnet
या nc -C
का उपयोग करके कनेक्ट करने की आवश्यकता होती है।
डिफ़ॉल्ट पोर्ट: 21
In Active FTP the FTP client first initiates the control connection from its port N to FTP Servers command port – port 21. The client then listens to port N+1 and sends the port N+1 to FTP Server. FTP Server then initiates the data connection, from its port M to the port N+1 of the FTP Client.
But, if the FTP Client has a firewall setup that controls the incoming data connections from outside, then active FTP may be a problem. And, a feasible solution for that is Passive FTP.
In Passive FTP, the client initiates the control connection from its port N to the port 21 of FTP Server. After this, the client issues a passv comand. The server then sends the client one of its port number M. And the client initiates the data connection from its port P to port M of the FTP Server.
Source: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
The FTP commands debug
and trace
can be used to see कैसे संचार हो रहा है.
nmap के साथ
आप FTP सर्वर की कुछ जानकारी प्राप्त करने के लिए HELP
और FEAT
कमांड का उपयोग कर सकते हैं:
गुमनाम : गुमनाम &#xNAN;गुमनाम : &#xNAN;ftp : ftp
यहाँ आप डिफ़ॉल्ट ftp क्रेडेंशियल्स की एक अच्छी सूची पा सकते हैं: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Anon लॉगिन और बाउंस FTP जांचें डिफ़ॉल्ट रूप से nmap द्वारा -sC विकल्प के साथ की जाती हैं या:
आप एक ब्राउज़र (जैसे Firefox) का उपयोग करके एक FTP सर्वर से कनेक्ट कर सकते हैं, एक URL का उपयोग करके जैसे:
ध्यान दें कि यदि एक वेब एप्लिकेशन उपयोगकर्ता द्वारा नियंत्रित डेटा को प्रत्यक्ष रूप से FTP सर्वर पर भेज रहा है, तो आप डबल URL एन्कोड %0d%0a
(डबल URL एन्कोड में यह %250d%250a
है) बाइट्स भेज सकते हैं और FTP सर्वर को मनमाने क्रियाएँ करने के लिए मजबूर कर सकते हैं। इनमें से एक संभावित मनमानी क्रिया उपयोगकर्ता द्वारा नियंत्रित सर्वर से सामग्री डाउनलोड करना, पोर्ट स्कैनिंग करना या अन्य प्लेन-टेक्स्ट आधारित सेवाओं (जैसे http) से बात करने की कोशिश करना है।
यदि आपका उपयोगकर्ता/पासवर्ड विशेष वर्णों में है, तो निम्नलिखित कमांड का उपयोग किया जा सकता है:
USER username
PASS password
HELP
सर्वर यह संकेत करता है कि कौन से कमांड समर्थित हैं
PORT 127,0,0,1,0,80
यह FTP सर्वर को IP 127.0.0.1 पर पोर्ट 80 के साथ कनेक्शन स्थापित करने के लिए संकेत देगा (आपको 5वां अक्षर "0" और 6वां दशमलव में पोर्ट के रूप में डालना होगा या 5वें और 6वें का उपयोग करके पोर्ट को हेक्स में व्यक्त करना होगा)।
EPRT |2|127.0.0.1|80|
यह FTP सर्वर को IP 127.0.0.1 पर पोर्ट 80 के साथ TCP कनेक्शन स्थापित करने के लिए संकेत देगा ("2" द्वारा संकेतित)। यह कमांड IPv6 का समर्थन करता है।
LIST
यह वर्तमान फ़ोल्डर में फ़ाइलों की सूची भेजेगा
LIST -R
पुनरावृत्त सूची (यदि सर्वर द्वारा अनुमति दी गई हो)
APPE /path/something.txt
यह FTP को पैसिव कनेक्शन या PORT/EPRT कनेक्शन से प्राप्त डेटा को एक फ़ाइल में संग्रहीत करने के लिए संकेत देगा। यदि फ़ाइल का नाम मौजूद है, तो यह डेटा को जोड़ देगा।
STOR /path/something.txt
APPE
की तरह लेकिन यह फ़ाइलों को अधिलेखित करेगा
STOU /path/something.txt
APPE
की तरह, लेकिन यदि मौजूद है तो यह कुछ नहीं करेगा।
RETR /path/to/file
एक पैसिव या पोर्ट कनेक्शन स्थापित करना आवश्यक है। फिर, FTP सर्वर उस कनेक्शन के माध्यम से निर्दिष्ट फ़ाइल भेजेगा
REST 6
यह सर्वर को संकेत देगा कि अगली बार जब वह कुछ भेजेगा RETR
का उपयोग करते हुए, तो उसे 6वें बाइट से शुरू करना चाहिए।
TYPE i
बाइनरी में ट्रांसफर सेट करें
PASV
यह एक पैसिव कनेक्शन खोलेगा और उपयोगकर्ता को संकेत देगा कि वह कहाँ कनेक्ट कर सकता है
PUT /tmp/file.txt
निर्दिष्ट फ़ाइल को FTP पर अपलोड करें
कुछ FTP सर्वर PORT कमांड की अनुमति देते हैं। इस कमांड का उपयोग सर्वर को यह संकेत देने के लिए किया जा सकता है कि आप किसी अन्य FTP सर्वर से किसी पोर्ट पर कनेक्ट करना चाहते हैं। फिर, आप इसका उपयोग यह स्कैन करने के लिए कर सकते हैं कि किसी होस्ट के कौन से पोर्ट खुले हैं FTP सर्वर के माध्यम से।
यहाँ जानें कि FTP सर्वर का दुरुपयोग करके पोर्ट कैसे स्कैन करें।
आप इस व्यवहार का दुरुपयोग करके FTP सर्वर को अन्य प्रोटोकॉल के साथ इंटरैक्ट करवा सकते हैं। आप HTTP अनुरोध वाला एक फ़ाइल अपलोड कर सकते हैं और कमजोर FTP सर्वर को इसे किसी मनमाने HTTP सर्वर पर भेजने के लिए मजबूर कर सकते हैं (शायद एक नया व्यवस्थापक उपयोगकर्ता जोड़ने के लिए?) या यहां तक कि एक FTP अनुरोध अपलोड कर सकते हैं और कमजोर FTP सर्वर को किसी अन्य FTP सर्वर के लिए एक फ़ाइल डाउनलोड करने के लिए मजबूर कर सकते हैं। सिद्धांत आसान है:
कमजोर सर्वर पर अनुरोध (एक टेक्स्ट फ़ाइल के अंदर) अपलोड करें। याद रखें कि यदि आप किसी अन्य HTTP या FTP सर्वर से बात करना चाहते हैं तो आपको 0x0d 0x0a
के साथ पंक्तियों को बदलना होगा
REST X
का उपयोग करें ताकि आप उन अक्षरों को न भेजें जिन्हें आप नहीं भेजना चाहते (शायद फ़ाइल के अंदर अनुरोध अपलोड करने के लिए आपको शुरुआत में कुछ इमेज हेडर डालना पड़ा)
मनमाने सर्वर और सेवा से कनेक्ट करने के लिए PORT
का उपयोग करें
सर्वर को सहेजे गए अनुरोध को भेजने के लिए RETR
का उपयोग करें।
यह अत्यधिक संभावना है कि यह एक त्रुटि फेंकेगा जैसे Socket not writable क्योंकि कनेक्शन डेटा को RETR
के साथ भेजने के लिए पर्याप्त समय तक नहीं रहता। इसे टालने के लिए सुझाव हैं:
यदि आप एक HTTP अनुरोध भेज रहे हैं, तो एक के बाद एक वही अनुरोध डालें जब तक कि ~0.5MB कम से कम न हो। इस तरह:
प्रयास करें कि प्रोटोकॉल से संबंधित "जंक" डेटा के साथ अनुरोध को भरें (FTP से बात करते समय शायद केवल जंक कमांड या फ़ाइल प्राप्त करने के लिए RETR
निर्देश को दोहराना)
बस अनुरोध को बहुत सारे शून्य अक्षरों या अन्य के साथ भरें (पंक्तियों में विभाजित या नहीं)
वैसे भी, यहाँ आपके पास एक पुराना उदाहरण है कि कैसे इसका दुरुपयोग करके एक FTP सर्वर को किसी अन्य FTP सर्वर से फ़ाइल डाउनलोड करने के लिए मजबूर किया जाए।
FileZilla आमतौर पर स्थानीय पर FileZilla-Server (पोर्ट 14147) के लिए एक प्रशासनिक सेवा बाइंड करता है। यदि आप अपने मशीन से इस पोर्ट तक पहुँचने के लिए एक टनल बना सकते हैं, तो आप खाली पासवर्ड का उपयोग करके इससे कनेक्ट कर सकते हैं और FTP सेवा के लिए एक नया उपयोगकर्ता बनाने के लिए सक्षम हो सकते हैं।
vsFTPd की डिफ़ॉल्ट कॉन्फ़िगरेशन /etc/vsftpd.conf
में पाई जा सकती है। यहाँ, आप कुछ खतरनाक सेटिंग्स पा सकते हैं:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- गुमनाम के लिए निर्देशिका।
chown_uploads=YES
- गुमनाम रूप से अपलोड की गई फ़ाइलों की स्वामित्व बदलें
chown_username=username
- गुमनाम रूप से अपलोड की गई फ़ाइलों का स्वामित्व दिया गया उपयोगकर्ता
local_enable=YES
- स्थानीय उपयोगकर्ताओं को लॉगिन करने की अनुमति दें
no_anon_password=YES
- गुमनाम से पासवर्ड नहीं पूछें
write_enable=YES
- कमांड की अनुमति दें: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, और SITE
ftp
port:21
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)