
जानबूझकर कमजोर PHP/MariaDB वेब एप्लिकेशन जो कानूनी और नियंत्रित वातावरण में विभिन्न कठिनाई स्तरों पर सामान्य वेब सुरक्षा कमजोरियों का अभ्यास करने के लिए है।
Damn Vulnerable Web Application (DVWA) एक PHP/MariaDB वेब एप्लीकेशन है जो बेहद कमजोर है। इसका मुख्य उद्देश्य सुरक्षा पेशेवरों को कानूनी वातावरण में अपने कौशल और उपकरणों का परीक्षण करने में सहायता प्रदान करना, वेब डेवलपर्स को वेब एप्लीकेशन को सुरक्षित करने की प्रक्रियाओं को बेहतर समझने में मदद करना, और छात्रों और शिक्षकों दोनों को एक नियंत्रित कक्षा वातावरण में वेब एप्लीकेशन सुरक्षा के बारे में सीखने में सहायता करना है।
DVWA का उद्देश्य है कि सबसे सामान्य वेब कमजोरियों का अभ्यास किया जाए, विभिन्न कठिनाई स्तरों के साथ, एक सरल और सीधे इंटरफेस के माध्यम से। कृपया ध्यान दें, इस सॉफ्टवेयर में दस्तावेजीकृत और अदस्तावेजीकृत दोनों प्रकार की कमजोरियां हैं। यह जानबूझकर किया गया है। आपको अधिक से अधिक समस्याओं को खोजने और खोजने का प्रयास करने के लिए प्रोत्साहित किया जाता है।
Damn Vulnerable Web Application बेहद कमजोर है! इसे अपने होस्टिंग प्रदाता की सार्वजनिक html फ़ोल्डर या किसी इंटरनेट-मुख सर्वर पर अपलोड न करें, क्योंकि वे समझौता हो जाएंगे। एक वर्चुअल मशीन (जैसे VirtualBox या VMware) का उपयोग करने की अनुशंसा की जाती है, जो NAT नेटवर्किंग मोड पर सेट हो। एक गेस्ट मशीन के अंदर, आप वेब सर्वर और डेटाबेस के लिए XAMPP डाउनलोड और इंस्टॉल कर सकते हैं।
हम इस एप्लीकेशन (DVWA) के उपयोग के तरीके के लिए कोई जिम्मेदारी नहीं लेते हैं। हमने एप्लीकेशन के उद्देश्यों को स्पष्ट कर दिया है और इसका दुर्भावनापूर्ण उपयोग नहीं किया जाना चाहिए। हमने चेतावनियाँ दी हैं और उपयोगकर्ताओं को DVWA को लाइव वेब सर्वर पर स्थापित करने से रोकने के उपाय किए हैं। यदि आपका वेब सर्वर DVWA की स्थापना के माध्यम से समझौता किया जाता है, तो यह हमारी जिम्मेदारी नहीं है, यह उस व्यक्ति/व्यक्तियों की जिम्मेदारी है जिसने इसे अपलोड और स्थापित किया।
This file is part of Damn Vulnerable Web Application (DVWA).
Damn Vulnerable Web Application (DVWA) एक मुक्त सॉफ्टवेयर है: आप इसे पुनर्वितरित कर सकते हैं और/या इसे संशोधित कर सकते हैं Free Software Foundation द्वारा प्रकाशित GNU General Public License की शर्तों के तहत, चाहे लाइसेंस का संस्करण 3 हो या (आपकी पसंद के अनुसार) कोई बाद का संस्करण।
Damn Vulnerable Web Application (DVWA) को इस उम्मीद में वितरित किया जाता है कि यह उपयोगी होगा, लेकिन बिना किसी वारंटी के; यहां तक कि व्यापारिकता या किसी विशेष उद्देश्य के लिए उपयुक्तता की निहित वारंटी के बिना। अधिक विवरण के लिए GNU General Public License देखें।
आपको Damn Vulnerable Web Application (DVWA) के साथ GNU General Public License की एक प्रति प्राप्त होनी चाहिए थी। यदि नहीं, तो https://www.gnu.org/licenses/ देखें।
यह फ़ाइल कई भाषाओं में उपलब्ध है:
यदि आप एक अनुवाद में योगदान देना चाहते हैं, तो कृपया PR सबमिट करें। ध्यान दें, इसका मतलब यह नहीं है कि इसे Google Translate के माध्यम से चलाएं और भेज दें, वे अस्वीकार कर दिए जाएंगे। अपने अनुवादित संस्करण को एक नई 'README.xx.md' फ़ाइल जोड़कर सबमिट करें, जहां xx आपकी वांछित भाषा का दो-अक्षर का कोड है (ISO 639-1 पर आधारित)।
हालांकि DVWA के विभिन्न संस्करण उपलब्ध हैं, केवल समर्थित संस्करण आधिकारिक GitHub रिपॉजिटरी का नवीनतम स्रोत है। आप इसे रिपो से क्लोन कर सकते हैं:```sh git clone https://github.com/digininja/DVWA.git
या [फ़ाइलों का एक ZIP डाउनलोड करें](https://github.com/digininja/DVWA/archive/master.zip).
- - -
## स्थापना
### स्वचालित स्थापना 🛠️
**नोट, यह एक आधिकारिक DVWA स्क्रिप्ट नहीं है, इसे [IamCarron](https://github.com/iamCarron/) द्वारा लिखा गया था। स्क्रिप्ट बनाने में बहुत काम किया गया था और जब इसे बनाया गया था, तो इसने कुछ भी दुर्भावनापूर्ण नहीं किया था, हालांकि यह अनुशंसा की जाती है कि आप अपने सिस्टम पर आँख बंद करके चलाने से पहले स्क्रिप्ट की समीक्षा करें, बस मामले में। कृपया किसी भी बग की रिपोर्ट [IamCarron](https://github.com/iamCarron/) को करें, यहाँ नहीं।**
डेबियन-आधारित मशीनों पर DVWA के लिए एक स्वचालित कॉन्फ़िगरेशन स्क्रिप्ट, जिसमें Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS शामिल हैं...
**नोट: इस स्क्रिप्ट को रूट विशेषाधिकारों की आवश्यकता है और यह डेबियन-आधारित सिस्टम के लिए तैयार की गई है। सुनिश्चित करें कि आप इसे रूट उपयोगकर्ता के रूप में चला रहे हैं।**
#### स्थापना आवश्यकताएँ
- **ऑपरेटिंग सिस्टम:** डेबियन-आधारित सिस्टम (Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS)
- **विशेषाधिकार:** रूट उपयोगकर्ता के रूप में निष्पादित करें
#### स्थापना चरण
##### एक-लाइनर
यह [@IamCarron](https://github.com/IamCarron) द्वारा लिखित एक इंस्टॉल स्क्रिप्ट डाउनलोड करेगा और इसे स्वचालित रूप से चलाएगा। इसे यहाँ शामिल नहीं किया जाता अगर हमें लेखक और स्क्रिप्ट पर भरोसा नहीं होता, जैसा कि हमने इसकी समीक्षा के समय था, लेकिन किसी के गलत रास्ते पर जाने की हमेशा संभावना रहती है, इसलिए यदि आप बिना स्वयं समीक्षा किए किसी और के कोड को चलाने में सुरक्षित महसूस नहीं करते हैं, तो मैन्युअल प्रक्रिया का पालन करें और आप डाउनलोड करने के बाद इसकी समीक्षा कर सकते हैं।```sh
sudo bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh)"
DVWA को इंस्टॉल करने का सबसे आसान तरीका है XAMPP को डाउनलोड और इंस्टॉल करना, यदि आपके पास पहले से कोई वेब सर्वर सेटअप नहीं है।
XAMPP Linux, Solaris, Windows और Mac OS X के लिए एक बहुत ही आसानी से इंस्टॉल होने वाला Apache वितरण है। पैकेज में Apache वेब सर्वर, MySQL, PHP, Perl, एक FTP सर्वर और phpMyAdmin शामिल हैं।
यह वीडियो Windows के लिए इंस्टॉलेशन प्रक्रिया बताता है, लेकिन यह अन्य OS के लिए भी समान होनी चाहिए।
hoang-himself और JGillam को धन्यवाद, master ब्रांच पर प्रत्येक कमिट एक Docker इमेज बनाने का कारण बनता है जो GitHub Container Registry से खींचने के लिए तैयार होती है।
आपको क्या मिल रहा है, इसकी अधिक जानकारी के लिए, आप पूर्व-निर्मित Docker इमेज ब्राउज़ कर सकते हैं।
पूर्वापेक्षाएँ: Docker और Docker Compose।
हम ऊपर दिखाए गए नवीनतम Docker रिलीज़ के लिए समर्थन प्रदान करते हैं। यदि आप Linux और अपने पैकेज मैनेजर के साथ आए Docker पैकेज का उपयोग कर रहे हैं, तो यह शायद काम करेगा, लेकिन समर्थन केवल सर्वोत्तम प्रयास होगा।
पैकेज मैनेजर संस्करण से अपस्ट्रीम तक Docker को अपग्रेड करने के लिए आपको पुराने संस्करणों को अनइंस्टॉल करना होगा जैसा कि Ubuntu, Fedora और अन्य के लिए उनके मैनुअल में देखा गया है। आपका Docker डेटा (कंटेनर, इमेज, वॉल्यूम, आदि) प्रभावित नहीं होना चाहिए, लेकिन यदि आपको कोई समस्या आती है, तो Docker को बताएं और इस बीच खोज इंजन का उपयोग करें।
फिर, शुरू करने के लिए:
यह देखने के लिए कि क्या आपके पास Docker और Docker Compose ठीक से इंस्टॉल हैं, docker version और docker compose version चलाएँ। आपको आउटपुट में उनके संस्करण देखने में सक्षम होना चाहिए।
उदाहरण के लिए:
>>> docker version
Client:
[...]
Version: 23.0.5
[...]
Server: Docker Desktop 4.19.0 (106363)
Engine:
[...]
Version: 23.0.5
[...]
>>> docker compose version
Docker Compose version v2.17.3
यदि आपको कुछ नहीं दिखता है या 'command not found' त्रुटि मिलती है, तो Docker और Docker Compose सेटअप करने के लिए पूर्वापेक्षाओं का पालन करें।
इस रिपॉजिटरी को क्लोन या डाउनलोड करें और निकालें (देखें डाउनलोड)।
अपनी पसंद का एक टर्मिनल खोलें और इसकी वर्किंग डायरेक्टरी को इस फ़ोल्डर (DVWA) में बदलें।
docker compose up -d चलाएँ।
DVWA अब http://localhost:4280 पर उपलब्ध है।
ध्यान दें कि कंटेनरों में DVWA चलाने के लिए, वेब सर्वर सामान्य पोर्ट 80 के बजाय पोर्ट 4280 पर सुन रहा है। इस निर्णय के बारे में अधिक जानकारी के लिए, देखें मैं DVWA को एक अलग पोर्ट पर चलाना चाहता हूँ।
यदि आपने स्थानीय परिवर्तन किए हैं और स्थानीय से प्रोजेक्ट बनाना चाहते हैं, तो compose.yml पर जाएं और pull_policy: always को pull_policy: build में बदलें।
docker compose up -d चलाने पर Docker को रजिस्ट्री में उपलब्ध कुछ भी करने की परवाह किए बिना स्थानीय से एक इमेज बनाने के लिए ट्रिगर करना चाहिए।
यह भी देखें: pull_policy।
यदि आप स्थानीय परिवर्तन कर रहे हैं और प्रत्येक परिवर्तन के लिए प्रोजेक्ट बिल्ड नहीं करना चाहते हैं:
compose.yml पर जाएं और अनकमेंट करें:
# volumes:
# - ./:/var/www/html
cp config/config.inc.php.dist config/config.inc.php चलाएँ।docker compose up -d चलाएँ और स्थानीय फ़ाइलों में परिवर्तन कंटेनर पर प्रतिबिंबित होंगे।आदर्श रूप से आपको PHP का नवीनतम स्थिर संस्करण उपयोग करना चाहिए क्योंकि यह वह संस्करण है जिस पर यह ऐप विकसित और परीक्षण किया जाएगा।
PHP 5.x का उपयोग करने का प्रयास करने वाले किसी भी व्यक्ति को समर्थन नहीं दिया जाएगा।
7.3 से कम संस्करणों में ज्ञात समस्याएं हैं जो समस्याएं पैदा करेंगी, अधिकांश ऐप काम करेगा, लेकिन कुछ चीजें यादृच्छिक रूप से काम नहीं कर सकती हैं। जब तक आपके पास इतने पुराने संस्करण का उपयोग करने का बहुत अच्छा कारण न हो, समर्थन नहीं दिया जाएगा।
यदि आप Debian आधारित Linux वितरण का उपयोग कर रहे हैं, तो आपको निम्नलिखित पैकेज (या उनके समकक्ष) इंस्टॉल करने की आवश्यकता होगी:
मैं इससे पहले अपडेट करने की सलाह दूंगा, बस यह सुनिश्चित करने के लिए कि आपको हर चीज का नवीनतम संस्करण मिल रहा है।```sh apt update apt install -y apache2 mariadb-server mariadb-client php php-mysqli php-gd libapache2-mod-php
यह साइट MySQL के बजाय MariaDB के साथ काम करेगी, लेकिन हम दृढ़ता से MariaDB की सलाह देते हैं क्योंकि यह तुरंत काम करता है, जबकि MySQL को सही ढंग से काम करने के लिए आपको बदलाव करने होंगे।
### Apache Modules
यदि आप API लैब का उपयोग करना चाहते हैं तो आपके पास Apache मॉड्यूल `mod_rewrite` सक्षम होना चाहिए। इसे Linux में करने के लिए चलाएँ:```
a2enmod rewrite
और फिर Apache को पुनरारंभ करें:``` apachectl restart
### विक्रेता फ़ाइलें
यदि आप API मॉड्यूल का उपयोग करना चाहते हैं तो आपको [Composer](https://getcomposer.org/) का उपयोग करके विक्रेता फ़ाइलों का एक सेट स्थापित करना होगा।
सबसे पहले, सुनिश्चित करें कि आपके पास Composer स्थापित है। ऐसा प्रतीत होता है कि पिछड़ी संगतता संबंधी समस्याएं हैं इसलिए मैं हमेशा यहां से नवीनतम संस्करण प्राप्त करता हूं:
https://getcomposer.org/doc/00-intro.md
इसे स्थापित करने के लिए साइट द्वारा दिए गए निर्देशों का पालन करें।
अब `vulnerabilities/api` निर्देशिका में जाएं और चलाएं:```
composer.phar install
यदि आपने Composer को सिस्टम पथ में स्थापित नहीं किया है, तो सुनिश्चित करें कि आप इसका पूर्ण स्थान संदर्भित करें।
DVWA अपनी कॉन्फ़िग फ़ाइल की एक डमी प्रतिलिपि के साथ आता है जिसे आपको सही स्थान पर कॉपी करना होगा और फिर उचित परिवर्तन करने होंगे। लिनक्स पर, यह मानते हुए कि आप DVWA निर्देशिका में हैं, यह इस प्रकार किया जा सकता है:
cp config/config.inc.php.dist config/config.inc.php
विंडोज पर, यदि आप फ़ाइल एक्सटेंशन छिपा रहे हैं तो यह थोड़ा मुश्किल हो सकता है, यदि आप इस बारे में अनिश्चित हैं, तो यह ब्लॉग पोस्ट इसके बारे में अधिक बताता है:
विंडोज में फ़ाइल एक्सटेंशन कैसे दिखाएं
कॉन्फ़िगरेशन फ़ाइल को संशोधित करने के बजाय, आप अधिकांश सेटिंग्स को पर्यावरण चर का उपयोग करके भी सेट कर सकते हैं। Docker या Kubernetes परिनियोजन में, यह आपको नई Docker इमेज बनाए बिना कॉन्फ़िगरेशन को संशोधित करने की अनुमति देता है। आपको वेरिएबल config/config.inc.php.dist फ़ाइल में मिलेंगे।
यदि आप डिफ़ॉल्ट सुरक्षा स्तर को "low" पर सेट करना चाहते हैं, तो बस compose.yml फ़ाइल में निम्न पंक्ति जोड़ें:```yml environment:
### डेटाबेस सेटअप
डेटाबेस सेट करने के लिए, मुख्य मेनू में `Setup DVWA` बटन पर क्लिक करें, फिर `Create / Reset Database` बटन पर क्लिक करें। यह आपके लिए कुछ डेटा के साथ डेटाबेस बनाएगा/रीसेट करेगा।
यदि आप डेटाबेस बनाने का प्रयास करते समय कोई त्रुटि प्राप्त करते हैं, तो सुनिश्चित करें कि `./config/config.inc.php` के अंदर आपकी डेटाबेस क्रेडेंशियल्स सही हैं। _यह config.inc.php.dist से भिन्न है, जो एक उदाहरण फ़ाइल है।_
डिफ़ॉल्ट रूप से वेरिएबल्स निम्नानुसार सेट किए गए हैं:```php
$_DVWA[ 'db_server'] = '127.0.0.1';
$_DVWA[ 'db_port'] = '3306';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_database' ] = 'dvwa';
नोट: यदि आप MySQL के बजाय MariaDB का उपयोग कर रहे हैं (Kali में MariaDB डिफ़ॉल्ट है), तो आप डेटाबेस रूट उपयोगकर्ता का उपयोग नहीं कर सकते, आपको एक नया डेटाबेस उपयोगकर्ता बनाना होगा। ऐसा करने के लिए, डेटाबेस से रूट उपयोगकर्ता के रूप में कनेक्ट करें और फिर निम्नलिखित कमांड का उपयोग करें:```mariadb MariaDB [(none)]> create database dvwa; Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user dvwa@localhost identified by 'p@ssw0rd'; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on dvwa.* to dvwa@localhost; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
### प्रमाणीकरण अक्षम करें
कुछ उपकरण प्रमाणीकरण के साथ ठीक से काम नहीं करते हैं, इसलिए DVWA के साथ उपयोग नहीं किए जा सकते। इससे निपटने के लिए, प्रमाणीकरण जाँच को अक्षम करने का एक कॉन्फ़िग विकल्प है। ऐसा करने के लिए, कॉन्फ़िग फ़ाइल में निम्नलिखित सेट करें:```php
$_DVWA[ 'disable_authentication' ] = true;
आपको परीक्षण के लिए उपयुक्त सुरक्षा स्तर भी सेट करना होगा:```php $_DVWA[ 'default_security_level' ] = 'low';
इस स्थिति में, आप बिना लॉग इन किए और कोई कुकी सेट किए सभी सुविधाओं तक पहुँच सकते हैं।
### फ़ोल्डर अनुमतियाँ
- `./hackable/uploads/` - वेब सेवा के लिए लिखने योग्य होना चाहिए (फ़ाइल अपलोड के लिए)।
### PHP कॉन्फ़िगरेशन
लिनक्स सिस्टम पर, संभवतः `/etc/php/x.x/fpm/php.ini` या `/etc/php/x.x/apache2/php.ini` में पाया जाता है।
- रिमोट फ़ाइल इंक्लूज़न (RFI) की अनुमति देने के लिए:
- `allow_url_include = on` [[allow_url_include](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include)]
- `allow_url_fopen = on` [[allow_url_fopen](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)]
- यह सुनिश्चित करने के लिए कि PHP सभी त्रुटि संदेश दिखाए:
- `display_errors = on` [[display_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-errors)]
- `display_startup_errors = on` [[display_startup_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors)]
परिवर्तन करने के बाद php सेवा या Apache को पुनरारंभ करना सुनिश्चित करें।
### reCAPTCHA
यह केवल "Insecure CAPTCHA" प्रयोगशाला के लिए आवश्यक है, यदि आप उस प्रयोगशाला के साथ नहीं खेल रहे हैं, तो आप इस अनुभाग को अनदेखा कर सकते हैं।
<https://www.google.com/recaptcha/admin/create> से API कुंजियों की एक जोड़ी उत्पन्न करें।
ये फिर `./config/config.inc.php` के निम्नलिखित अनुभागों में जाते हैं:
- `$_DVWA[ 'recaptcha_public_key' ]`
- `$_DVWA[ 'recaptcha_private_key' ]`
### डिफ़ॉल्ट क्रेडेंशियल्स
**डिफ़ॉल्ट उपयोगकर्ता नाम = `admin`**
**डिफ़ॉल्ट पासवर्ड = `password`**
_...आसानी से ब्रूट फोर्स किया जा सकता है ;)_
लॉगिन URL: <http://127.0.0.1/login.php>
_नोट: यदि आपने DVWA को किसी भिन्न निर्देशिका में स्थापित किया है तो यह अलग होगा।_
- - -
## समस्या निवारण
ये मानते हैं कि आप डेबियन-आधारित डिस्ट्रो पर हैं, जैसे कि डेबियन, उबंटू और काली। अन्य डिस्ट्रो के लिए, साथ चलें, लेकिन जहाँ उपयुक्त हो वहाँ कमांड अपडेट करें।
यदि आप शब्द पढ़ने के बजाय वीडियो देखना पसंद करते हैं, तो सबसे सामान्य समस्याओं को वीडियो [Fixing DVWA Setup Issues](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F) में कवर किया गया है।
### कंटेनर
#### मैं लॉग तक पहुँचना चाहता हूँ
यदि आप Docker Desktop का उपयोग कर रहे हैं, तो लॉग को ग्राफिकल एप्लिकेशन से एक्सेस किया जा सकता है।
नए संस्करणों के साथ कुछ छोटे विवरण बदल सकते हैं, लेकिन एक्सेस विधि समान रहनी चाहिए।


लॉग को टर्मिनल से भी एक्सेस किया जा सकता है।
1. एक टर्मिनल खोलें और इसकी कार्यशील निर्देशिका को DVWA में बदलें
2. मर्ज किए गए लॉग दिखाएँ
```sh
docker compose logs
```
यदि आप लॉग को किसी फ़ाइल में निर्यात करना चाहते हैं, उदा. `dvwa.log` ```sh
docker compose logs > dvwa.log
हम डिफ़ॉल्ट रूप से पोर्ट 80 का उपयोग कुछ कारणों से नहीं करते हैं:
net.ipv4.ip_unprivileged_port_start सेट करना) आवश्यक है, लेकिन आपको स्वयं शोध करना होगा।आप compose.yml फ़ाइल में पोर्ट बाइंडिंग बदलकर DVWA को एक अलग पोर्ट पर एक्सपोज़ कर सकते हैं।
उदाहरण के लिए, आप बदल सकते हैं```yml
ports:
को```yml
ports:
- 127.0.0.1:8806:80
DVWA अब http://localhost:8806 पर उपलब्ध है।
यदि आप चाहते हैं कि DVWA न केवल आपके अपने डिवाइस से बल्कि आपके स्थानीय नेटवर्क पर भी सुलभ हो (जैसे कि आप किसी कार्यशाला के लिए टेस्ट मशीन स्थापित कर रहे हैं), तो आप पोर्ट मैपिंग से 127.0.0.1: को हटा सकते हैं (या इसे अपने LAN IP से बदल सकते हैं)। इस तरह यह सभी उपलब्ध डिवाइस पर सुनाई देगा। सुरक्षित डिफ़ॉल्ट हमेशा केवल आपके स्थानीय लूपबैक डिवाइस पर सुनने का होना चाहिए। आखिरकार, यह आपकी मशीन पर चलने वाला एक बहुत ही कमजोर वेब एप्लिकेशन है।
शामिल compose.yml फ़ाइल Docker प्रारंभ होने पर DVWA और इसके डेटाबेस को स्वचालित रूप से चलाती है।
इसे अक्षम करने के लिए, आप compose.yml फ़ाइल में restart: unless-stopped पंक्तियों को हटा या कमेंट कर सकते हैं।
यदि आप इस व्यवहार को अस्थायी रूप से अक्षम करना चाहते हैं, तो आप docker compose stop चला सकते हैं, या Docker Desktop का उपयोग करके, dvwa ढूंढें और Stop पर क्लिक करें।
इसके अतिरिक्त, आप कंटेनरों को हटा सकते हैं, या docker compose down चला सकते हैं।
लिनक्स सिस्टम पर Apache डिफ़ॉल्ट रूप से दो लॉग फ़ाइलें उत्पन्न करता है, access.log और error.log, और डेबियन आधारित सिस्टम पर ये आमतौर पर /var/log/apache2/ में पाई जाती हैं।
त्रुटि रिपोर्ट, समस्याएँ, या ऐसा कुछ भी सबमिट करते समय, कृपया इन फ़ाइलों में से प्रत्येक की कम से कम अंतिम पाँच पंक्तियाँ शामिल करें। डेबियन आधारित सिस्टम पर आप इन्हें इस प्रकार प्राप्त कर सकते हैं:```sh tail -n 5 /var/log/apache2/access.log /var/log/apache2/error.log
### मैंने साइट ब्राउज़ की और 404 या Apache2 डिफ़ॉल्ट पेज मिला
[Video Help](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=141)
यदि आपको यह समस्या हो रही है तो आपको फ़ाइल स्थानों को समझने की आवश्यकता है। डिफ़ॉल्ट रूप से, Apache दस्तावेज़ रूट (वह स्थान जहाँ से वेब सामग्री की खोज शुरू होती है) `/var/www/html` है। यदि आप इस निर्देशिका में `hello.txt` फ़ाइल रखते हैं, तो इसे एक्सेस करने के लिए आप `http://localhost/hello.txt` पर ब्राउज़ करेंगे।
यदि आपने एक निर्देशिका बनाई और फ़ाइल वहाँ रखी - `/var/www/html/mydir/hello.txt` - तो आपको `http://localhost/mydir/hello.txt` पर ब्राउज़ करना होगा।
Linux डिफ़ॉल्ट रूप से केस संवेदनशील है और इसलिए उपरोक्त उदाहरण में, यदि आप इनमें से किसी पर ब्राउज़ करने का प्रयास करेंगे, तो आपको `404 Not Found` मिलेगा:
- `http://localhost/MyDir/hello.txt`
- `http://localhost/mydir/Hello.txt`
- `http://localhost/MYDIR/hello.txt`
यह DVWA को कैसे प्रभावित करता है? अधिकांश लोग DVWA को `/var/www/html` में क्लोन करने के लिए git का उपयोग करते हैं, इससे उन्हें निर्देशिका `/var/www/html/DVWA/` मिलती है जिसमें सभी DVWA फ़ाइलें होती हैं। वे तब `http://localhost/` पर ब्राउज़ करते हैं और या तो `404` या डिफ़ॉल्ट Apache स्वागत पृष्ठ प्राप्त करते हैं। चूंकि फ़ाइलें DVWA में हैं, आपको `http://localhost/DVWA` पर ब्राउज़ करना होगा।
दूसरी सामान्य गलती `http://localhost/dvwa` पर ब्राउज़ करना है जो `404` देगा क्योंकि Linux निर्देशिका मिलान के अनुसार `dvwa` `DVWA` नहीं है।
इसलिए सेटअप के बाद, यदि आप साइट पर जाने का प्रयास करते हैं और `404` प्राप्त करते हैं, तो सोचें कि आपने फ़ाइलें कहाँ स्थापित कीं, वे दस्तावेज़ रूट के सापेक्ष कहाँ हैं, और आपके द्वारा उपयोग की गई निर्देशिका का केस क्या है।
### मैंने साइट ब्राउज़ की और एक खाली स्क्रीन मिली
[Video Help](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=243)
यह आमतौर पर एक कॉन्फ़िगरेशन समस्या है जो दूसरी समस्या को छिपा रही है। डिफ़ॉल्ट रूप से, PHP त्रुटियाँ प्रदर्शित नहीं करता है, और इसलिए यदि आप सेटअप प्रक्रिया के दौरान त्रुटि प्रदर्शन चालू करना भूल गए, तो कोई भी अन्य समस्या, जैसे डेटाबेस से कनेक्ट करने में विफलता, ऐप को लोड होने से रोक देगी लेकिन आपको यह बताने वाला संदेश छिपा रहेगा कि क्या गलत है।
इसे ठीक करने के लिए, सुनिश्चित करें कि आपने [PHP Configuration](#php-configuration) में बताए अनुसार `display_errors` और `display_startup_errors` सेट किए हैं और फिर Apache को पुनरारंभ करें।
### सेटअप चलाते समय "Access denied"
यदि आप सेटअप स्क्रिप्ट चलाते समय निम्न देखते हैं तो इसका मतलब है कि कॉन्फ़िग फ़ाइल में उपयोगकर्ता नाम या पासवर्ड डेटाबेस पर कॉन्फ़िगर किए गए नाम से मेल नहीं खाते हैं। [Video Help](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=973)```mariadb
Database Error #1045: Access denied for user 'notdvwa'@'localhost' (using password: YES).
यह त्रुटि आपको बता रही है कि आप उपयोगकर्ता नाम notdvwa का उपयोग कर रहे हैं।
निम्नलिखित त्रुटि कहती है कि आपने कॉन्फ़िग फ़ाइल को गलत डेटाबेस पर इंगित किया है। Video Help```mariadb SQL: Access denied for user 'dvwa'@'localhost' to database 'notdvwa'
यह कह रहा है कि आप उपयोगकर्ता `dvwa` का उपयोग कर रहे हैं और डेटाबेस `notdvwa` से कनेक्ट करने का प्रयास कर रहे हैं।
पहली चीज़ जो करनी है वह यह दोबारा जांचना है कि आपने कॉन्फिग फ़ाइल में जो डाला है, वह वास्तव में वही है।
यदि यह आपकी अपेक्षा से मेल खाता है, तो अगली चीज़ यह जांचना है कि आप कमांड लाइन पर उस उपयोगकर्ता के रूप में लॉग इन कर सकते हैं। यह मानते हुए कि आपके पास डेटाबेस उपयोगकर्ता `dvwa` और पासवर्ड `p@ssw0rd` है, निम्न कमांड चलाएँ:```sh
mysql -u dvwa -pp@ssw0rd -D dvwa
नोट: -p के बाद कोई स्पेस नहीं है
यदि आप निम्नलिखित देखते हैं, तो पासवर्ड सही है:```mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.3.22-MariaDB-0ubuntu0.19.10.1 Ubuntu 19.10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [dvwa]>
जैसा कि आप कमांड लाइन पर कनेक्ट कर सकते हैं, संभवतः कॉन्फिग फ़ाइल में कुछ गड़बड़ है। उसे दोबारा जाँचें और फिर भी काम न करे तो एक मुद्दा उठाएँ।
यदि आप निम्नलिखित देखते हैं, तो आप जो उपयोगकर्ता नाम या पासवर्ड उपयोग कर रहे हैं वह गलत है। [Database Setup](#database-setup) चरणों को दोहराएँ और सुनिश्चित करें कि आप पूरी प्रक्रिया में एक ही उपयोगकर्ता नाम और पासवर्ड का उपयोग करें।```mariadb
ERROR 1045 (28000): Access denied for user 'dvwa'@'localhost' (using password: YES)
यदि आपको निम्नलिखित मिलता है, तो उपयोगकर्ता क्रेडेंशियल सही हैं लेकिन उपयोगकर्ता के पास डेटाबेस तक पहुंच नहीं है। फिर से, सेटअप चरणों को दोहराएं और जांचें कि आप किस डेटाबेस नाम का उपयोग कर रहे हैं।```mariadb ERROR 1044 (42000): Access denied for user 'dvwa'@'localhost' to database 'dvwa'
अंतिम त्रुटि जो आपको मिल सकती है वह यह है:```mariadb
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
यह प्रमाणीकरण की समस्या नहीं है बल्कि आपको बताता है कि डेटाबेस सर्वर चल नहीं रहा है। इसे निम्नलिखित से शुरू करें```sh sudo service mysql start
### कनेक्शन अस्वीकार
[वीडियो सहायता](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=444)
इस तरह की एक त्रुटि:```mariadb
Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/sites/dvwa/non-secure/htdocs/dvwa/includes/dvwaPage.inc.php:535
इसका मतलब है कि आपका डेटाबेस सर्वर चालू नहीं है या आपने कॉन्फ़िग फ़ाइल में गलत IP पता डाला है। कॉन्फ़िग फ़ाइल में इस लाइन को जाँचें कि डेटाबेस सर्वर कहाँ होना चाहिए:```php $_DVWA[ 'db_server' ] = '127.0.0.1';
फिर इस सर्वर पर जाएं और जांचें कि यह चल रहा है। लिनक्स में यह इस प्रकार किया जा सकता है:```sh
systemctl status mariadb.service
और आप कुछ इस प्रकार खोज रहे हैं, महत्वपूर्ण हिस्सा यह है कि यह कहता है active (running).```sh
● mariadb.service - MariaDB 10.5.19 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-03-14 16:04:25 GMT; 1 week 5 days ago
यदि यह चल नहीं रहा है, तो आप इसे इस प्रकार शुरू कर सकते हैं:```sh
sudo systemctl stop mariadb.service
नोट: sudo का उपयोग करें और सुनिश्चित करें कि पूछे जाने पर आप अपना लिनक्स उपयोगकर्ता पासवर्ड डालें।
विंडोज़ में, XAMPP कंसोल में स्थिति जांचें।
MySQL के नवीनतम संस्करणों के साथ, PHP अपने डिफ़ॉल्ट कॉन्फ़िगरेशन में डेटाबेस से बात नहीं कर सकता है। यदि आप सेटअप स्क्रिप्ट चलाने का प्रयास करते हैं और निम्न संदेश प्राप्त करते हैं, तो इसका मतलब है कि आपके पास कॉन्फ़िगरेशन है।```mariadb Database Error #2054: The server requested authentication method unknown to the client.
आपके पास दो विकल्प हैं, सबसे आसान है MySQL को अनइंस्टॉल करके MariaDB इंस्टॉल करना। नीचे MariaDB प्रोजेक्ट की आधिकारिक गाइड दी गई है:
<https://mariadb.com/resources/blog/how-to-migrate-from-mysql-to-mariadb-on-linux-in-five-steps/>
वैकल्पिक रूप से, इन चरणों का पालन करें:
1. रूट के रूप में, निम्न फ़ाइल को संपादित करें: `/etc/mysql/mysql.conf.d/mysqld.cnf`
1. `[mysqld]` लाइन के नीचे, निम्न जोड़ें:
`default-authentication-plugin=mysql_native_password`
1. डेटाबेस को पुनरारंभ करें: `sudo service mysql restart`
1. अपने डेटाबेस उपयोगकर्ता के लिए प्रमाणीकरण विधि जांचें:
```sql
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------------------+-----------------------+
| Host | User | plugin |
+-----------+------------------+-----------------------+
| localhost | dvwa | caching_sha2_password |
+-----------+------------------+-----------------------+
1 rows in set (0.00 sec)
आप संभवतः caching_sha2_password देखेंगे। यदि ऐसा है, तो निम्न कमांड चलाएँ:
mysql> ALTER USER dvwa@localhost IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
जाँच को फिर से चलाने पर, अब आपको mysql_native_password दिखना चाहिए।
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------+-----------------------+
| Host | User | plugin |
+-----------+------+-----------------------+
| localhost | dvwa | mysql_native_password |
+-----------+------+-----------------------+
1 row in set (0.00 sec)
इन सबके बाद, सेटअप प्रक्रिया अब सामान्य रूप से काम करनी चाहिए।
यदि आप अधिक जानकारी चाहते हैं, तो निम्न पृष्ठ देखें: https://www.php.net/manual/en/mysqli.requirements.php।
डेटाबेस सर्वर चल नहीं रहा है। डेबियन-आधारित डिस्ट्रो में इसे इस प्रकार किया जा सकता है:```sh sudo service mysql start
### त्रुटियाँ "MySQL server has gone away" और "Packets out of order"
इन त्रुटियों के कई कारण हो सकते हैं, लेकिन सबसे संभावित यह है कि आप जिस डेटाबेस सर्वर का संस्करण चला रहे हैं वह PHP के संस्करण के साथ संगत नहीं है।
यह अक्सर तब पाया जाता है जब आप MySQL के नवीनतम संस्करण को PHP के साथ चला रहे हैं और वे एक साथ ठीक से काम नहीं करते। सबसे अच्छी सलाह, MySQL को छोड़ दें और MariaDB स्थापित करें क्योंकि यह ऐसी चीज़ नहीं है जिसका हम समर्थन कर सकते हैं।
अधिक जानकारी के लिए, देखें:
<https://www.ryadel.com/en/fix-mysql-server-gone-away-packets-order-similar-mysql-related-errors/>
### CentOS पर डेटाबेस कनेक्ट क्यों नहीं हो सकता?
आप SELinux के साथ समस्याओं का सामना कर रहे हो सकते हैं। या तो SELinux को अक्षम करें या वेब सर्वर को डेटाबेस से बात करने की अनुमति देने के लिए यह कमांड चलाएँ:```sh
setsebool -P httpd_can_network_connect_db 1
यदि आप MariaDB को प्रारंभ करने का प्रयास करते समय Docker लॉग में निम्नलिखित त्रुटि देखते हैं, तो संभवतः होस्ट मशीन में पर्याप्त मेमोरी नहीं है। यदि आप इसे किसी होस्टेड वातावरण में उपयोग कर रहे हैं, तो सबसे अच्छा समाधान अधिक मेमोरी प्राप्त करने के लिए मशीन का आकार बढ़ाना और पुनः प्रयास करना है।``` [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.15+maria~ubu2204 started. [Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB
आपको अपने `compose.yml` फ़ाइल के volumes खंड में निम्नलिखित पंक्ति जोड़ने की भी आवश्यकता हो सकती है:```
- /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
ऐसा करने से डिफ़ॉल्ट कॉन्फ़िग फ़ाइल का वॉल्यूम सेक्शन निम्नलिखित में बदल जाएगा:``` volumes: - dvwa:/var/lib/mysql - /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
For more information on why this works, see [this issue](https://github.com/MariaDB/mariadb-docker/issues/626).
### कुछ और
नवीनतम समस्या निवारण जानकारी के लिए कृपया git रिपो में खुले और बंद दोनों टिकट पढ़ें:
<https://github.com/digininja/DVWA/issues>
टिकट सबमिट करने से पहले, कृपया सुनिश्चित करें कि आप रिपो से कोड का नवीनतम संस्करण चला रहे हैं। यह नवीनतम रिलीज़ नहीं है, यह मास्टर शाखा का नवीनतम कोड है।
यदि टिकट उठा रहे हैं, तो कृपया कम से कम निम्नलिखित जानकारी सबमिट करें:
- ऑपरेटिंग सिस्टम
- वेब सर्वर त्रुटि लॉग से अंतिम 5 पंक्तियाँ जो आपकी रिपोर्ट की गई त्रुटि के तुरंत बाद आती हैं
- यदि यह डेटाबेस प्रमाणीकरण समस्या है, तो ऊपर दिए गए चरणों से गुज़रें और प्रत्येक चरण का स्क्रीनशॉट लें। इन्हें कॉन्फिग फ़ाइल के उस भाग के स्क्रीनशॉट के साथ सबमिट करें जो डेटाबेस उपयोगकर्ता और पासवर्ड दिखाता है।
- पूरा विवरण कि क्या गलत हो रहा है, आप क्या होने की उम्मीद करते हैं, और आपने इसे ठीक करने के लिए क्या किया है। "लॉगिन टूटा हुआ है" हमारे लिए आपकी समस्या को समझने और उसे ठीक करने में मदद करने के लिए पर्याप्त नहीं है।
- - -
## ट्यूटोरियल
मैं कुछ ट्यूटोरियल वीडियो बनाने का प्रयास करूंगा जो कुछ कमजोरियों के माध्यम से चलते हैं और दिखाते हैं कि उनका पता कैसे लगाया जाए और फिर उनका शोषण कैसे किया जाए। यहां वे हैं जो मैंने अब तक बनाए हैं:
[Finding and Exploiting Reflected XSS](https://youtu.be/V4MATqtdxss)
- - -
## SQLite3 SQL इंजेक्शन
_इसके लिए समर्थन सीमित है, मुद्दे उठाने से पहले, कृपया सुनिश्चित करें कि आप डीबगिंग पर काम करने के लिए तैयार हैं, केवल "यह काम नहीं करता" कहकर मत बैठें।_
डिफ़ॉल्ट रूप से, SQLi और Blind SQLi साइट द्वारा उपयोग किए जाने वाले MariaDB/MySQL सर्वर के विरुद्ध किए जाते हैं, लेकिन इसके बजाय SQLite3 के विरुद्ध SQLi परीक्षण करने के लिए स्विच करना संभव है।
मैं यह कवर नहीं करूंगा कि PHP के साथ SQLite3 को कैसे काम में लाया जाए, लेकिन यह `php-sqlite3` पैकेज स्थापित करने और इसे सक्षम करने का एक सरल मामला होना चाहिए।
स्विच करने के लिए, बस कॉन्फिग फ़ाइल संपादित करें और इन पंक्तियों को जोड़ें या संपादित करें:```php
$_DVWA["SQLI_DB"] = "sqlite";
$_DVWA["SQLITE_DB"] = "sqli.db";
डिफ़ॉल्ट रूप से यह फ़ाइल database/sqli.db का उपयोग करता है, यदि आप इसे खराब कर देते हैं, तो बस database/sqli.db.dist को इसके ऊपर कॉपी करें।
चुनौतियाँ बिल्कुल MariaDB जैसी ही हैं, वे बस SQLite3 के विरुद्ध चलती हैं।
आपके सभी योगदानों और इस प्रोजेक्ट को अद्यतित रखने के लिए धन्यवाद। ❤️
यदि आपके पास कोई विचार है, किसी प्रकार का सुधार है या बस सहयोग करना चाहते हैं, तो आप प्रोजेक्ट में योगदान और भागीदारी करने के लिए स्वागत है, बेझिझक अपना PR भेजें।
सीधे शब्दों में कहें तो, कृपया न करें!
साल में लगभग एक बार, कोई व्यक्ति ऐप में पाई गई भेद्यता के लिए एक रिपोर्ट सबमिट करेगा, कुछ अच्छी तरह से लिखे जाते हैं, कभी-कभी भुगतान वाली पेन-टेस्ट रिपोर्ट से भी बेहतर, कुछ बस "आप हेडर गायब कर रहे हैं, मुझे भुगतान करें" होते हैं।
2023 में, यह एक नए स्तर पर पहुंच गया जब किसी ने एक भेद्यता के लिए CVE का अनुरोध करने का फैसला किया, उन्हें CVE-2023-39848 दिया गया। बहुत हंसी-मजाक हुआ और इसे ठीक करने में समय बर्बाद हुआ।
ऐप में भेद्यताएं हैं, यह जानबूझकर है। अधिकांश वे अच्छी तरह से दस्तावेजित हैं जिन्हें आप पाठों के रूप में काम करते हैं, अन्य "छिपी हुई" हैं, जिन्हें आपको स्वयं खोजना है। यदि आप वास्तव में छिपे हुए अतिरिक्त को खोजने में अपने कौशल का प्रदर्शन करना चाहते हैं, तो एक ब्लॉग पोस्ट लिखें या एक वीडियो बनाएं क्योंकि संभवतः ऐसे लोग हैं जो उनके बारे में और आपने उन्हें कैसे पाया, इसके बारे में सीखने में रुचि रखते हैं। यदि आप हमें लिंक भेजते हैं, तो हम इसे संदर्भों में शामिल भी कर सकते हैं।
प्रोजेक्ट होम: https://github.com/digininja/DVWA
DVWA टीम द्वारा बनाया गया