Damn Vulnerable Web Application (DVWA) เป็นเว็บแอปพลิเคชัน PHP/MySQL ที่มีช่องโหว่อย่างยิ่ง เป้าหมายหลักคือการให้ความช่วยเหลือผู้เชี่ยวชาญด้านความปลอดภัยในการทดสอบทักษะและเครื่องมือของตนในสภาพแวดล้อมทางกฎหมาย ช่วยให้นักพัฒนาเว็บเข้าใจกระบวนการรักษาความปลอดภัยแอปพลิเคชันเว็บได้ดีขึ้น และเพื่อช่วยทั้งนักเรียนและครูในการเรียนรู้เกี่ยวกับความปลอดภัยของแอปพลิเคชันเว็บในชั้นเรียนที่มีการควบคุม สภาพแวดล้อมของห้อง
จุดมุ่งหมายของ DVWA คือ การฝึกช่องโหว่บนเว็บที่พบบ่อยที่สุด โดยมี ระดับความยากต่างกัน ด้วยอินเทอร์เฟซที่เรียบง่ายและตรงไปตรงมา โปรดทราบว่าซอฟต์แวร์นี้มี ช่องโหว่ทั้งแบบมีเอกสารและไม่มีเอกสาร นี่เป็นการจงใจ เราขอแนะนำให้คุณลองค้นหาปัญหาต่างๆ ให้ได้มากที่สุด
เว็บแอปพลิเคชันที่มีช่องโหว่ประณามมีช่องโหว่อย่างยิ่ง! อย่าอัปโหลดไปยังโฟลเดอร์ html สาธารณะของผู้ให้บริการโฮสติ้งของคุณ หรือเซิร์ฟเวอร์ที่เชื่อมต่อกับอินเทอร์เน็ต เนื่องจากจะถูกบุกรุก ขอแนะนำให้ใช้เครื่องเสมือน (เช่น VirtualBox หรือ VMware) ซึ่งตั้งค่าเป็นโหมดเครือข่าย NAT ภายในเครื่องเกสต์ คุณสามารถดาวน์โหลดและติดตั้ง XAMPP สำหรับเว็บเซิร์ฟเวอร์และฐานข้อมูลได้
เราไม่รับผิดชอบต่อวิธีการใช้แอปพลิเคชันนี้ (DVWA) เราได้ทำให้วัตถุประสงค์ของแอปพลิเคชันชัดเจนและไม่ควรใช้ในทางที่ผิด เราได้ให้คำเตือนและดำเนินมาตรการเพื่อป้องกันไม่ให้ผู้ใช้ติดตั้ง DVWA บนเว็บเซิร์ฟเวอร์ที่ใช้งานจริง หากเว็บเซิร์ฟเวอร์ของคุณถูกบุกรุกผ่านการติดตั้ง DVWA เราจะไม่รับผิดชอบ แต่เป็นความรับผิดชอบของบุคคลที่อัปโหลดและติดตั้ง
ไฟล์นี้เป็นส่วนหนึ่งของ Damn Vulnerable Web Application (DVWA)
Damn Vulnerable Web Application (DVWA) เป็นซอฟต์แวร์ฟรี: คุณสามารถแจกจ่ายและ/หรือแก้ไขได้ภายใต้เงื่อนไขของ GNU General Public License ตามที่เผยแพร่โดย Free Software Foundation เวอร์ชัน 3 ของใบอนุญาต หรือ (ตามตัวเลือกของคุณ) รุ่นที่ใหม่กว่า
Damn Vulnerable Web Application (DVWA) ได้รับการเผยแพร่ด้วยความหวังว่าจะมีประโยชน์ แต่ไม่มีการรับประกันใดๆ โดยไม่มีการรับประกันโดยนัยถึงความสามารถในการค้าขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูใบอนุญาตสาธารณะทั่วไปของ GNU สำหรับรายละเอียดเพิ่มเติม
คุณควรได้รับสำเนาของ GNU General Public License พร้อมกับ Damn Vulnerable Web Application (DVWA) ถ้าไม่ โปรดดู https://www.gnu.org/licenses/
ไฟล์นี้มีให้บริการในหลายภาษา:
อาหรับ: العربية
จีน: 简体中文
ฝรั่งเศส: Français
เกาหลี: เกาหลี
เปอร์เซีย: ฟาร์ซี
โปแลนด์: Polski
โปรตุเกส: Português
สเปน: Español
ตุรกี: Türkçe
อินโดนีเซีย: อินโดนีเซีย
เวียดนาม: เวียดนาม
หากคุณต้องการสนับสนุนการแปล กรุณาส่ง PR โปรดทราบว่านี่ไม่ได้หมายความว่าเพียงแค่เปิดผ่าน Google Translate และส่งเข้ามา สิ่งเหล่านั้นจะถูกปฏิเสธ ส่งเวอร์ชันแปลของคุณโดยเพิ่มไฟล์ 'README.xx.md' ใหม่ โดยที่ xx คือรหัสตัวอักษรสองตัวของภาษาที่คุณต้องการ (ตามมาตรฐาน ISO 639-1)
แม้ว่า DVWA จะมีหลายเวอร์ชัน แต่เวอร์ชันเดียวที่รองรับคือแหล่งที่มาล่าสุดจากที่เก็บ GitHub อย่างเป็นทางการ คุณสามารถโคลนได้จาก repo:
โคลนคอมไพล์ https://github.com/digininja/DVWA.git
หรือดาวน์โหลดไฟล์ ZIP
โปรดทราบว่านี่ไม่ใช่สคริปต์ DVWA อย่างเป็นทางการ เขียนโดย IamCarron มีงานมากมายในการสร้างสคริปต์ และเมื่อมันถูกสร้างขึ้น มันก็ไม่ได้ทำอะไรที่เป็นอันตราย อย่างไรก็ตาม ขอแนะนำให้คุณตรวจสอบสคริปต์ก่อนที่จะรันสคริปต์นั้นบนระบบของคุณแบบสุ่มสี่สุ่มห้า ในกรณีนี้ กรุณารายงานข้อบกพร่องใด ๆ ให้กับ IamCarron ไม่ใช่ที่นี่
สคริปต์การกำหนดค่าอัตโนมัติสำหรับ DVWA บนเครื่องที่ใช้ Debian รวมถึง Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS...
หมายเหตุ: สคริปต์นี้ต้องการสิทธิ์รูทและได้รับการปรับแต่งสำหรับระบบที่ใช้ Debian ตรวจสอบให้แน่ใจว่าคุณกำลังรันมันในฐานะผู้ใช้รูท
ระบบปฏิบัติการ: ระบบที่ใช้เดเบียน (Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS)
สิทธิ์: ดำเนินการในฐานะผู้ใช้รูท
การดำเนินการนี้จะดาวน์โหลดสคริปต์การติดตั้งที่เขียนโดย @IamCarron และเรียกใช้โดยอัตโนมัติ สิ่งนี้จะไม่ถูกรวมไว้ที่นี่หากเราไม่ไว้วางใจผู้เขียนและสคริปต์เหมือนกับตอนที่เราตรวจสอบ แต่มีโอกาสที่ใครบางคนจะโกงอยู่เสมอ ดังนั้นหากคุณรู้สึกไม่ปลอดภัยที่จะเรียกใช้โค้ดของผู้อื่นโดยไม่ต้องตรวจสอบ ด้วยตัวเอง ให้ทำตามขั้นตอนด้วยตนเองและคุณสามารถตรวจสอบได้เมื่อดาวน์โหลดแล้ว
sudo bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh)"
ดาวน์โหลดสคริปต์:
wget https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh
ทำให้สคริปต์ปฏิบัติการได้:
chmod +x ติดตั้ง-DVWA.sh
รันสคริปต์ในฐานะรูท:
sudo ./ติดตั้ง-DVWA.sh
การติดตั้ง DVWA บน Kali ที่ทำงานใน VirtualBox
การติดตั้ง DVWA บน Windows โดยใช้ XAMPP
การติดตั้ง Damn Vulnerable Web Application (DVWA) บน Windows 10
วิธีที่ง่ายที่สุดในการติดตั้ง DVWA คือการดาวน์โหลดและติดตั้ง XAMPP หากคุณยังไม่มีการตั้งค่าเว็บเซิร์ฟเวอร์
XAMPP เป็นการติดตั้ง Apache Distribution สำหรับ Linux, Solaris, Windows และ Mac OS X ที่ง่ายมาก แพ็คเกจนี้ประกอบด้วยเว็บเซิร์ฟเวอร์ Apache, MySQL, PHP, Perl, เซิร์ฟเวอร์ FTP และ phpMyAdmin
วิดีโอนี้จะอธิบายขั้นตอนการติดตั้งสำหรับ Windows แต่ควรคล้ายคลึงกับระบบปฏิบัติการอื่นๆ
ต้องขอบคุณตัวเขาเองและ JGillam ทุกการกระทำต่อสาขา master
จะทำให้อิมเมจ Docker ถูกสร้างขึ้นและพร้อมที่จะดึงลงจาก GitHub Container Registry
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณได้รับ คุณสามารถเรียกดูอิมเมจ Docker ที่สร้างไว้ล่วงหน้าได้
วิชาบังคับก่อน: Docker และ Docker Compose
หากคุณใช้ Docker Desktop ควรติดตั้งทั้งสองสิ่งนี้ไว้แล้ว
หากคุณต้องการ Docker Engine บน Linux โปรดปฏิบัติตามคู่มือการติดตั้ง
เราให้การสนับสนุน Docker รุ่นล่าสุดดังที่แสดงด้านบน หากคุณใช้ Linux และแพ็คเกจ Docker ที่มาพร้อมกับตัวจัดการแพ็คเกจของคุณ ก็อาจจะใช้งานได้เช่นกัน แต่การสนับสนุนจะดีที่สุดเท่านั้น
การอัปเกรด Docker จากเวอร์ชันตัวจัดการแพ็คเกจเป็นอัปสตรีมนั้น คุณจะต้องถอนการติดตั้งเวอร์ชันเก่าตามที่เห็นในคู่มือสำหรับ Ubuntu, Fedora และอื่นๆ ข้อมูล Docker ของคุณ (คอนเทนเนอร์ รูปภาพ ไดรฟ์ข้อมูล ฯลฯ) ไม่ควรได้รับผลกระทบ แต่ในกรณีที่คุณประสบปัญหา โปรดแจ้งให้ Docker ทราบและใช้เครื่องมือค้นหาในระหว่างนี้
จากนั้นเพื่อเริ่มต้น:
เรียกใช้ docker version
และ docker compose version
เพื่อดูว่าคุณได้ติดตั้ง Docker และ Docker Compose อย่างถูกต้องหรือไม่ คุณควรจะเห็นเวอร์ชันของพวกเขาในผลลัพธ์
ตัวอย่างเช่น:
>>> 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
หากคุณไม่เห็นสิ่งใดเลยหรือได้รับข้อผิดพลาดไม่พบคำสั่ง ให้ปฏิบัติตามข้อกำหนดเบื้องต้นเพื่อตั้งค่า Docker และ Docker Compose
โคลนหรือดาวน์โหลดที่เก็บนี้และแตกไฟล์ (ดูดาวน์โหลด)
เปิดเทอร์มินัลที่คุณเลือกและเปลี่ยนไดเร็กทอรีการทำงานเป็นโฟลเดอร์นี้ ( DVWA
)
เรียกใช้ docker compose up -d
DVWA สามารถใช้งานได้แล้วที่ http://localhost:4280
โปรดสังเกตว่าสำหรับการเรียกใช้ DVWA ในคอนเทนเนอร์ เว็บเซิร์ฟเวอร์กำลังรับฟังพอร์ต 4280 แทนที่จะเป็นพอร์ตปกติที่ 80 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตัดสินใจนี้ โปรดดูที่ฉันต้องการเรียกใช้ DVWA บนพอร์ตอื่น
หากคุณทำการเปลี่ยนแปลงในเครื่องและต้องการสร้างโปรเจ็กต์จากในเครื่อง ให้ไปที่ compose.yml
และเปลี่ยน pull_policy: always
เป็น pull_policy: build
การรัน docker compose up -d
ควรทริกเกอร์ Docker ให้สร้างอิมเมจจากในเครื่อง โดยไม่คำนึงถึงสิ่งที่มีอยู่ในรีจิสทรี
ดูเพิ่มเติมที่: pull_policy
ตามหลักการแล้ว คุณควรใช้ PHP เวอร์ชันเสถียรล่าสุด เนื่องจากเป็นเวอร์ชันที่แอปนี้จะได้รับการพัฒนาและทดสอบ
จะไม่มีการให้การสนับสนุนแก่ใครก็ตามที่พยายามใช้ PHP 5.x
เวอร์ชันที่ต่ำกว่า 7.3 มีปัญหาที่ทราบแล้วซึ่งจะทำให้เกิดปัญหา แอปส่วนใหญ่จะใช้งานได้ แต่สิ่งที่สุ่มอาจไม่เกิดขึ้น คุณจะไม่ได้รับการสนับสนุน เว้นแต่คุณจะมีเหตุผลที่ดีในการใช้เวอร์ชันเก่าดังกล่าว
หากคุณใช้การแจกจ่าย Linux ที่ใช้ Debian คุณจะต้องติดตั้งแพ็คเกจต่อไปนี้ (หรือเทียบเท่า) :
อาปาเช่2
libapache2-mod-php.php
mariadb-เซิร์ฟเวอร์
mariadb-ไคลเอนต์
phpphp-mysqli.php
php-gd.php
ฉันขอแนะนำให้ทำการอัปเดตก่อนหน้านี้ เพียงเพื่อให้แน่ใจว่าคุณจะได้รับทุกสิ่งที่เป็นเวอร์ชันล่าสุด
ปรับปรุงให้ดี apt ติดตั้ง -y apache2 mariadb-เซิร์ฟเวอร์ mariadb-ไคลเอนต์ php php-mysqli php-gd libapache2-mod-php
ไซต์นี้จะทำงานร่วมกับ MySQL แทน MariaDB แต่เราขอแนะนำ MariaDB อย่างยิ่งเนื่องจากใช้งานได้ทันที ในขณะที่คุณต้องทำการเปลี่ยนแปลงเพื่อให้ MySQL ทำงานได้อย่างถูกต้อง
DVWA จัดส่งมาพร้อมกับสำเนาจำลองของไฟล์กำหนดค่า ซึ่งคุณจะต้องคัดลอกเข้าที่แล้วทำการเปลี่ยนแปลงที่เหมาะสม บน Linux สมมติว่าคุณอยู่ในไดเร็กทอรี DVWA สามารถทำได้ดังนี้:
cp config/config.inc.php.dist config/config.inc.php
บน Windows การดำเนินการนี้อาจยากขึ้นเล็กน้อยหากคุณซ่อนนามสกุลไฟล์ หากคุณไม่แน่ใจเกี่ยวกับเรื่องนี้ โพสต์ในบล็อกนี้จะอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้:
วิธีทำให้ Windows แสดงนามสกุลไฟล์
แทนที่จะแก้ไขไฟล์การกำหนดค่า คุณสามารถตั้งค่าส่วนใหญ่โดยใช้ตัวแปรสภาพแวดล้อมได้ ในการปรับใช้ Docker หรือ Kubernetes สิ่งนี้ช่วยให้คุณแก้ไขการกำหนดค่าโดยไม่ต้องสร้างอิมเมจ Docker ใหม่ คุณจะพบตัวแปรในไฟล์ config/config.inc.php.dist
หากคุณต้องการตั้งค่าระดับความปลอดภัยเริ่มต้นเป็น "ต่ำ" เพียงเพิ่มบรรทัดต่อไปนี้ในไฟล์ compose.yml:
สิ่งแวดล้อม: - DB_SERVER=ฐานข้อมูล - DEFAULT_SECURITY_LEVEL=ต่ำ
หากต้องการตั้งค่าฐานข้อมูล เพียงคลิกที่ปุ่ม Setup DVWA
ในเมนูหลัก จากนั้นคลิกที่ปุ่ม Create / Reset Database
สิ่งนี้จะสร้าง / รีเซ็ตฐานข้อมูลสำหรับคุณโดยมีข้อมูลบางส่วนอยู่
หากคุณได้รับข้อผิดพลาดขณะพยายามสร้างฐานข้อมูล ตรวจสอบให้แน่ใจว่าข้อมูลประจำตัวฐานข้อมูลของคุณถูกต้องภายใน . ./config/config.inc.php
สิ่งนี้แตกต่างจาก config.inc.php.dist ซึ่งเป็นไฟล์ตัวอย่าง
ตัวแปรจะถูกตั้งค่าเป็นค่าต่อไปนี้ตามค่าเริ่มต้น:
$_DVWA[ 'db_server'] = '127.0.0.1';$_DVWA[ 'db_port'] = '3306';$_DVWA[ 'db_user' ] = 'dvwa';$_DVWA[ 'db_password' ] = 'p@ssw0rd ';$_DVWA[ 'db_database' ] = 'ดีวา';
โปรดทราบว่าหากคุณใช้ MariaDB แทนที่จะเป็น MySQL (MariaDB เป็นค่าเริ่มต้นในภาษา Kali) คุณจะไม่สามารถใช้ผู้ใช้รูทฐานข้อมูลได้ คุณต้องสร้างผู้ใช้ฐานข้อมูลใหม่ เมื่อต้องการทำเช่นนี้ ให้เชื่อมต่อกับฐานข้อมูลในฐานะผู้ใช้รูท จากนั้นใช้คำสั่งต่อไปนี้:
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 ไม่ได้ เพื่อแก้ไขปัญหานี้ มีตัวเลือกการกำหนดค่าเพื่อปิดใช้งานการตรวจสอบการรับรองความถูกต้อง ในการดำเนินการนี้ เพียงตั้งค่าต่อไปนี้ในไฟล์กำหนดค่า:
$_DVWA[ 'disable_authentication' ] = จริง;
คุณจะต้องตั้งค่าระดับความปลอดภัยให้เหมาะสมกับการทดสอบที่คุณต้องการ:
$_DVWA[ 'default_security_level' ] = 'ต่ำ';
ในสถานะนี้ คุณสามารถเข้าถึงคุณสมบัติทั้งหมดได้โดยไม่จำเป็นต้องเข้าสู่ระบบและตั้งค่าคุกกี้ใดๆ
./hackable/uploads/
- จำเป็นต้องเขียนได้โดยบริการเว็บ (สำหรับการอัปโหลดไฟล์)
บนระบบ Linux อาจพบได้ใน /etc/php/xx/fpm/php.ini
หรือ /etc/php/xx/apache2/php.ini
หากต้องการอนุญาตการรวมไฟล์ระยะไกล (RFI):
allow_url_include = on
[allow_url_include]
allow_url_fopen = on
[allow_url_fopen]
เพื่อให้แน่ใจว่า PHP แสดงข้อความแสดงข้อผิดพลาดทั้งหมด:
display_errors = on
[display_errors]
display_startup_errors = on
[display_startup_errors]
ตรวจสอบให้แน่ใจว่าคุณรีสตาร์ทบริการ php หรือ Apache หลังจากทำการเปลี่ยนแปลง
สิ่งนี้จำเป็นสำหรับแล็บ "Insecure CAPTCHA" เท่านั้น หากคุณไม่ได้เล่นกับแล็บนั้น คุณก็สามารถเพิกเฉยต่อส่วนนี้ได้
สร้างคีย์ API หนึ่งคู่จาก https://www.google.com/recaptcha/admin/create
จากนั้นไปในส่วนต่อไปนี้ของ ./config/config.inc.php
:
$_DVWA[ 'recaptcha_public_key' ]
$_DVWA[ 'recaptcha_private_key' ]
ชื่อผู้ใช้เริ่มต้น = admin
รหัสผ่านเริ่มต้น = password
...สามารถถูกบังคับดุร้ายได้อย่างง่ายดาย ;)
URL เข้าสู่ระบบ: http://127.0.0.1/login.php
หมายเหตุ: สิ่งนี้จะแตกต่างออกไปหากคุณติดตั้ง DVWA ลงในไดเร็กทอรีอื่น
สิ่งเหล่านี้ถือว่าคุณใช้ distro ที่ใช้ Debian เช่น Debian, Ubuntu และ Kali สำหรับ distros อื่นๆ ให้ทำตาม แต่อัปเดตคำสั่งตามความเหมาะสม
หากคุณใช้ Docker Desktop คุณจะสามารถเข้าถึงบันทึกได้จากแอปพลิเคชันกราฟิก รายละเอียดเล็กๆ น้อยๆ บางอย่างอาจมีการเปลี่ยนแปลงในเวอร์ชันที่ใหม่กว่า แต่วิธีการเข้าถึงควรจะเหมือนกัน
สามารถเข้าถึงบันทึกได้จากเทอร์มินัล
เปิดเทอร์มินัลแล้วเปลี่ยนไดเร็กทอรีการทำงานเป็น DVWA
แสดงบันทึกที่ผสาน
นักเทียบท่าเขียนบันทึก
ในกรณีที่คุณต้องการส่งออกบันทึกไปยังไฟล์ เช่น dvwa.log
นักเทียบท่าเขียนบันทึก > dvwa.log
เราไม่ใช้พอร์ต 80 เป็นค่าเริ่มต้นด้วยเหตุผลบางประการ:
ผู้ใช้บางรายอาจใช้งานบางอย่างบนพอร์ต 80 อยู่แล้ว
ผู้ใช้บางรายอาจใช้เครื่องมือคอนเทนเนอร์แบบไม่มีรูท (เช่น Podman) และ 80 เป็นพอร์ตที่ได้รับสิทธิ์ (< 1024) จำเป็นต้องมีการกำหนดค่าเพิ่มเติม (เช่น การตั้งค่า net.ipv4.ip_unprivileged_port_start
) แต่คุณจะต้องค้นคว้าด้วยตัวเอง
คุณสามารถเปิดเผย DVWA บนพอร์ตอื่นได้โดยเปลี่ยนการเชื่อมโยงพอร์ตในไฟล์ compose.yml
ตัวอย่างเช่น คุณสามารถเปลี่ยนแปลงได้
พอร์ต: - 127.0.0.1:4280:80
ถึง
พอร์ต: - 127.0.0.1:8806:80
ขณะนี้ DVWA สามารถเข้าถึงได้ที่ http://localhost:8806
ในกรณีที่คุณต้องการให้ DVWA ไม่เพียงแต่สามารถเข้าถึงได้จากอุปกรณ์ของคุณเท่านั้น แต่บนเครือข่ายท้องถิ่นของคุณด้วย (เช่น เนื่องจากคุณกำลังตั้งค่าเครื่องทดสอบสำหรับเวิร์กช็อป) คุณสามารถลบ 127.0.0.1:
ออกจากพอร์ตได้ การทำแผนที่ (หรือแทนที่ด้วย LAN IP ของคุณ) วิธีนี้จะฟังบนอุปกรณ์ที่มีอยู่ทั้งหมด ค่าเริ่มต้นที่ปลอดภัยควรฟังเฉพาะบนอุปกรณ์ลูปแบ็คในเครื่องของคุณเท่านั้น ท้ายที่สุดแล้ว มันเป็นเว็บแอปพลิเคชั่นที่มีช่องโหว่ซึ่งทำงานอยู่บนเครื่องของคุณ
ไฟล์ compose.yml
ที่รวมอยู่จะรัน DVWA และฐานข้อมูลโดยอัตโนมัติเมื่อ Docker เริ่มทำงาน
หากต้องการปิดใช้งาน คุณสามารถลบหรือใส่เครื่องหมายความคิดเห็นใน restart: unless-stopped
ในไฟล์ compose.yml
หากคุณต้องการปิดการใช้งานพฤติกรรมนี้ชั่วคราว คุณสามารถเรียกใช้ docker compose stop
หรือใช้ Docker Desktop ค้นหา dvwa
แล้วคลิก Stop นอกจากนี้ คุณยังสามารถลบคอนเทนเนอร์หรือเรียกใช้ docker compose down
บนระบบ Linux Apache จะสร้างไฟล์บันทึกสองไฟล์ตามค่าเริ่มต้น ได้แก่ access.log
และ error.log
และบนระบบที่ใช้ Debian ซึ่งมักจะพบใน /var/log/apache2/
เมื่อส่งรายงานข้อผิดพลาด ปัญหา หรืออะไรทำนองนั้น โปรดระบุอย่างน้อยห้าบรรทัดสุดท้ายจากแต่ละไฟล์เหล่านี้ บนระบบที่ใช้ Debian คุณสามารถรับสิ่งเหล่านี้ได้:
หาง -n 5 /var/log/apache2/access.log /var/log/apache2/error.log
หากคุณกำลังประสบปัญหานี้ คุณต้องเข้าใจตำแหน่งของไฟล์ ตามค่าเริ่มต้น รูทเอกสาร 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
ซึ่งจะให้ไดเร็กทอรี /var/www/html/DVWA/
พร้อมด้วยไฟล์ DVWA ทั้งหมดที่อยู่ภายใน จากนั้นพวกเขาเรียกดู http://localhost/
และรับหน้าต้อนรับ 404
หรือเริ่มต้นของ Apache เนื่องจากไฟล์อยู่ใน DVWA คุณต้องเรียกดู http://localhost/DVWA
ข้อผิดพลาดทั่วไปอื่นๆ คือการเรียกดู http://localhost/dvwa
ซึ่งจะให้ 404
เนื่องจาก dvwa
ไม่ใช่ DVWA
เท่าที่เกี่ยวข้องกับการจับคู่ไดเรกทอรี Linux
ดังนั้นหลังการตั้งค่า หากคุณพยายามเยี่ยมชมไซต์และได้รับ 404
ให้ลองนึกถึงตำแหน่งที่คุณติดตั้งไฟล์ ตำแหน่งที่ไฟล์เหล่านั้นสัมพันธ์กับรูทเอกสาร และไดเรกทอรีที่คุณใช้คือกรณีใด
โดยปกติแล้วจะเป็นปัญหาการกำหนดค่าอย่างหนึ่งซึ่งซ่อนปัญหาอื่นไว้ ตามค่าเริ่มต้น PHP จะไม่แสดงข้อผิดพลาด ดังนั้นหากคุณลืมเปิดการแสดงข้อผิดพลาดในระหว่างขั้นตอนการตั้งค่า ปัญหาอื่น ๆ เช่นความล้มเหลวในการเชื่อมต่อกับฐานข้อมูล จะทำให้แอปไม่สามารถโหลดได้ แต่มีข้อความแจ้งให้คุณทราบว่า ผิดจะถูกซ่อนไว้
ในการแก้ไขปัญหานี้ ตรวจสอบให้แน่ใจว่าคุณได้ตั้ง display_errors
และ display_startup_errors
ตามที่ระบุไว้ในการกำหนดค่า PHP แล้วรีสตาร์ท Apache
หากคุณเห็นสิ่งต่อไปนี้เมื่อเรียกใช้สคริปต์การตั้งค่า แสดงว่าชื่อผู้ใช้หรือรหัสผ่านในไฟล์กำหนดค่าไม่ตรงกับที่กำหนดค่าไว้ในฐานข้อมูล:
Database Error #1045: Access denied for user 'notdvwa'@'localhost' (using password: YES).
ข้อผิดพลาดกำลังบอกคุณว่าคุณกำลังใช้ชื่อผู้ใช้ notdvwa
ข้อผิดพลาดต่อไปนี้แจ้งว่าคุณชี้ไฟล์กำหนดค่าไปที่ฐานข้อมูลที่ไม่ถูกต้อง
SQL: Access denied for user 'dvwa'@'localhost' to database 'notdvwa'
มันบอกว่าคุณกำลังใช้ผู้ใช้ dvwa
และพยายามเชื่อมต่อกับฐานข้อมูล notdvwa
สิ่งแรกที่ต้องทำคือตรวจสอบอีกครั้งว่าคุณคิดว่าคุณใส่อะไรลงในไฟล์กำหนดค่าว่ามีอะไรอยู่จริงบ้าง
หากตรงกับสิ่งที่คุณคาดหวัง สิ่งต่อไปที่ต้องทำคือตรวจสอบว่าคุณสามารถเข้าสู่ระบบในฐานะผู้ใช้บนบรรทัดคำสั่งได้ สมมติว่าคุณมีผู้ใช้ฐานข้อมูล dvwa
และรหัสผ่าน p@ssw0rd
ให้รันคำสั่งต่อไปนี้:
mysql -u dvwa -pp@ssw0rd -D dvwa
หมายเหตุ: ไม่มีช่องว่างหลัง -p
หากคุณเห็นข้อความต่อไปนี้ แสดงว่ารหัสผ่านถูกต้อง:
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]>
เนื่องจากคุณสามารถเชื่อมต่อบนบรรทัดคำสั่งได้ อาจมีบางอย่างผิดปกติในไฟล์ปรับแต่ง ตรวจสอบอีกครั้งแล้วแจ้งปัญหาหากคุณยังไม่สามารถทำงานได้
หากคุณเห็นข้อความต่อไปนี้ แสดงว่าชื่อผู้ใช้หรือรหัสผ่านที่คุณใช้ไม่ถูกต้อง ทำซ้ำขั้นตอนการตั้งค่าฐานข้อมูลและตรวจสอบให้แน่ใจว่าคุณใช้ชื่อผู้ใช้และรหัสผ่านเดียวกันตลอดกระบวนการ
ERROR 1045 (28000): Access denied for user 'dvwa'@'localhost' (using password: YES)
หากคุณได้รับสิ่งต่อไปนี้ แสดงว่าข้อมูลประจำตัวผู้ใช้ถูกต้อง แต่ผู้ใช้ไม่สามารถเข้าถึงฐานข้อมูลได้ ทำซ้ำขั้นตอนการตั้งค่าอีกครั้งและตรวจสอบชื่อฐานข้อมูลที่คุณใช้
ERROR 1044 (42000): Access denied for user 'dvwa'@'localhost' to database 'dvwa'
ข้อผิดพลาดสุดท้ายที่คุณอาจได้รับคือ:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
นี่ไม่ใช่ปัญหาการรับรองความถูกต้อง แต่แจ้งให้คุณทราบว่าเซิร์ฟเวอร์ฐานข้อมูลไม่ได้ทำงานอยู่ เริ่มต้นด้วยสิ่งต่อไปนี้
บริการ sudo mysql เริ่มต้น
ข้อผิดพลาดที่คล้ายกับสิ่งนี้:
Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/sites/dvwa/non-secure/htdocs/dvwa/includes/dvwaPage.inc.php:535
หมายความว่าเซิร์ฟเวอร์ฐานข้อมูลของคุณไม่ทำงานหรือคุณมีที่อยู่ IP ผิดในไฟล์กำหนดค่า
ตรวจสอบบรรทัดนี้ในไฟล์ปรับแต่งเพื่อดูว่าเซิร์ฟเวอร์ฐานข้อมูลคาดว่าจะอยู่ที่ใด:
$_DVWA[ 'db_server' ] = '127.0.0.1';
จากนั้นไปที่เซิร์ฟเวอร์นี้และตรวจสอบว่าเซิร์ฟเวอร์กำลังทำงานอยู่ ใน Linux สามารถทำได้ด้วย:
สถานะ systemctl mariadb.service
และคุณกำลังมองหาสิ่งนี้ สิ่งที่สำคัญคือมันบอกว่า active (running)
● mariadb.service - เซิร์ฟเวอร์ฐานข้อมูล MariaDB 10.5.19 โหลดแล้ว: โหลดแล้ว (/lib/systemd/system/mariadb.service; เปิดใช้งาน; ที่ตั้งไว้ล่วงหน้า: เปิดใช้งาน) ใช้งานอยู่: ใช้งานอยู่ (กำลังทำงาน) ตั้งแต่วันพฤหัสบดี 14-03-2024 16:04:25 GMT; 1 สัปดาห์ 5 วัน ที่ผ่านมา
หากไม่ได้ทำงานอยู่ คุณสามารถเริ่มต้นด้วย:
sudo systemctl หยุด mariadb.service
จดบันทึก sudo
และอย่าลืมใส่รหัสผ่านผู้ใช้ Linux ของคุณหากมีการร้องขอ
ใน Windows ให้ตรวจสอบสถานะในคอนโซล XAMPP
ด้วย MySQL เวอร์ชันล่าสุด PHP ไม่สามารถสื่อสารกับฐานข้อมูลในการกำหนดค่าเริ่มต้นได้อีกต่อไป หากคุณพยายามเรียกใช้สคริปต์การตั้งค่าและได้รับข้อความต่อไปนี้ แสดงว่าคุณมีการกำหนดค่า
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/
หรือทำตามขั้นตอนเหล่านี้:
ในฐานะ root ให้แก้ไขไฟล์ต่อไปนี้: /etc/mysql/mysql.conf.d/mysqld.cnf
ใต้บรรทัด [mysqld]
ให้เพิ่มสิ่งต่อไปนี้: default-authentication-plugin=mysql_native_password
รีสตาร์ทฐานข้อมูล: sudo service mysql restart
ตรวจสอบวิธีการรับรองความถูกต้องสำหรับผู้ใช้ฐานข้อมูลของคุณ:
mysql> เลือก Host, User, Plugin จาก mysql.user โดยที่ mysql.user.User = 'dvwa';+-----------+-------------- ----+-----------------------+| โฮสต์ | ผู้ใช้ | ปลั๊กอิน |+-----------+------------------+---------------- ------+| โลคอลโฮสต์ | ดีวา | caching_sha2_password |+-----------+------------------+---------------- --------+1 แถวในชุด (0.00 วินาที)
คุณน่าจะเห็น caching_sha2_password
หากคุณทำเช่นนั้น ให้รันคำสั่งต่อไปนี้:
mysql> เปลี่ยนผู้ใช้ dvwa @ localhost ที่ระบุด้วย mysql_native_password BY 'p @ ssw0rd';
ดำเนินการตรวจสอบอีกครั้ง ตอนนี้คุณควรเห็น mysql_native_password
mysql> เลือก Host, User, Plugin จาก mysql.user โดยที่ mysql.user.User = 'dvwa';+-----------+-------+------- -----------------+| โฮสต์ | ผู้ใช้ | ปลั๊กอิน |+-----------+-+-----------------------+| โลคอลโฮสต์ | ดีวา | mysql_native_password |+-----------+-+--------------------------------------+1 แถวในชุด (0.00 วินาที)
หลังจากนั้นกระบวนการตั้งค่าควรจะทำงานได้ตามปกติ
หากคุณต้องการข้อมูลเพิ่มเติมโปรดดูหน้าต่อไปนี้: https://www.php.net/manual/en/mysqli.requirements.php
เซิร์ฟเวอร์ฐานข้อมูลไม่ทำงาน ใน distro ที่ใช้ Debian สิ่งนี้สามารถทำได้ด้วย:
บริการ sudo mysql เริ่มต้น
มีสาเหตุบางประการที่คุณอาจได้รับข้อผิดพลาดเหล่านี้ แต่สาเหตุที่เป็นไปได้มากที่สุดคือเวอร์ชันของเซิร์ฟเวอร์ฐานข้อมูลที่คุณใช้งานอยู่นั้นเข้ากันไม่ได้กับเวอร์ชันของ PHP
สิ่งนี้มักพบได้บ่อยที่สุดเมื่อคุณใช้งาน MySQL เวอร์ชันล่าสุดในรูปแบบ PHP และทำงานได้ไม่ดีนัก คำแนะนำที่ดีที่สุด ทิ้ง MySQL และติดตั้ง MariaDB เนื่องจากนี่ไม่ใช่สิ่งที่เราสามารถรองรับได้
สำหรับข้อมูลเพิ่มเติม โปรดดู:
https://www.ryadel.com/en/fix-mysql-server-gone-away-packets-order-similar-mysql- related-errors/
Apache อาจไม่มีสิทธิ์สูงพอที่จะรันคำสั่งบนเว็บเซิร์ฟเวอร์ หากคุณใช้งาน DVWA ภายใต้ Linux ตรวจสอบให้แน่ใจว่าคุณได้เข้าสู่ระบบในฐานะรูท ภายใต้ Windows เข้าสู่ระบบในฐานะผู้ดูแลระบบ
คุณอาจประสบปัญหากับ SELinux ปิดการใช้งาน SELinux หรือรันคำสั่งนี้เพื่อให้เว็บเซิร์ฟเวอร์สามารถพูดคุยกับฐานข้อมูล:
setebool -P httpd_can_network_connect_db 1
สำหรับข้อมูลการแก้ไขปัญหาล่าสุด โปรดอ่านทั้งตั๋วเปิดและปิดใน repo git:
https://github.com/digininja/DVWA/issues
ก่อนส่งตั๋ว โปรดตรวจสอบให้แน่ใจว่าคุณใช้โค้ดเวอร์ชันล่าสุดจาก repo นี่ไม่ใช่รุ่นล่าสุด แต่เป็นโค้ดล่าสุดจากสาขาหลัก
หากต้องการเพิ่มตั๋ว โปรดส่งข้อมูลอย่างน้อยต่อไปนี้:
ระบบปฏิบัติการ
5 บรรทัดสุดท้ายจากบันทึกข้อผิดพลาดของเว็บเซิร์ฟเวอร์โดยตรงหลังจากข้อผิดพลาดใดก็ตามที่คุณกำลังรายงานเกิดขึ้น
หากเป็นปัญหาเกี่ยวกับการรับรองความถูกต้องของฐานข้อมูล ให้ทำตามขั้นตอนด้านบนและจับภาพหน้าจอแต่ละขั้นตอน ส่งสิ่งเหล่านี้พร้อมกับภาพหน้าจอของส่วนของไฟล์กำหนดค่าที่แสดงผู้ใช้ฐานข้อมูลและรหัสผ่าน
คำอธิบายแบบเต็มเกี่ยวกับสิ่งที่เกิดขึ้น สิ่งที่คุณคาดว่าจะเกิดขึ้น และสิ่งที่คุณได้พยายามทำเพื่อแก้ไข "การเข้าสู่ระบบใช้งานไม่ได้" นั้นไม่เพียงพอสำหรับเราที่จะเข้าใจปัญหาของคุณและช่วยแก้ไข
ฉันจะพยายามรวบรวมวิดีโอแนะนำการใช้งานที่อธิบายช่องโหว่บางส่วนและแสดงวิธีตรวจจับและวิธีใช้ประโยชน์จากช่องโหว่เหล่านี้ นี่คือสิ่งที่ฉันได้ทำไปแล้ว:
การค้นหาและการใช้ประโยชน์จาก XSS ที่สะท้อน
การสนับสนุนนี้มีจำกัด ก่อนที่จะแจ้งปัญหา โปรดตรวจสอบให้แน่ใจว่าคุณพร้อมที่จะดำเนินการแก้ไขจุดบกพร่อง อย่าอ้างเพียงว่า "ใช้งานไม่ได้"
ตามค่าเริ่มต้น SQLi และ Blind SQLi จะดำเนินการกับเซิร์ฟเวอร์ MariaDB/MySQL ที่ไซต์ใช้ แต่เป็นไปได้ที่จะสลับไปทำการทดสอบ SQLi กับ SQLite3 แทน
ฉันจะไม่ครอบคลุมถึงวิธีทำให้ SQLite3 ทำงานกับ PHP ได้ แต่ควรเป็นกรณีง่ายๆ ในการติดตั้งแพ็คเกจ php-sqlite3
และตรวจสอบให้แน่ใจว่าได้เปิดใช้งานแล้ว
หากต้องการเปลี่ยน เพียงแก้ไขไฟล์กำหนดค่าและเพิ่มหรือแก้ไขบรรทัดเหล่านี้:
$_DVWA["SQLI_DB"] = "sqlite";$_DVWA["SQLITE_DB"] = "sqli.db";
ตามค่าเริ่มต้น จะใช้ไฟล์ database/sqli.db
หากคุณทำผิดพลาด เพียงคัดลอก database/sqli.db.dist
ไว้ด้านบน
ความท้าทายจะเหมือนกับ MySQL ทุกประการ เพียงแต่วิ่งแข่งกับ SQLite3 แทน
ขอขอบคุณสำหรับการสนับสนุนทั้งหมดของคุณและคอยอัปเดตโครงการนี้อยู่เสมอ
หากคุณมีความคิด การปรับปรุงบางอย่าง หรือเพียงต้องการทำงานร่วมกัน คุณสามารถมีส่วนร่วมและมีส่วนร่วมในโครงการ โปรดส่ง PR ของคุณได้เลย
พูดง่ายๆ ก็คืออย่า!
ประมาณปีละครั้งจะมีคนส่งรายงานเกี่ยวกับช่องโหว่ที่พบในแอป บางอันก็เขียนได้ดี บางครั้งก็ดีกว่าที่ฉันเคยเห็นในรายงานการทดสอบปากกาแบบเสียเงิน บางอันก็แค่ "คุณหายไปส่วนหัว จ่าย" ฉัน".
ในปี 2023 สิ่งนี้ได้ยกระดับขึ้นไปอีกระดับหนึ่งเมื่อมีคนตัดสินใจขอ CVE สำหรับช่องโหว่รายการใดรายการหนึ่ง โดยได้รับ CVE-2023-39848 ความฮาเกิดขึ้นมากมายและเสียเวลาไปกับการแก้ไขสิ่งนี้
แอปมีช่องโหว่ เป็นการจงใจ ส่วนใหญ่เป็นเอกสารที่บันทึกไว้อย่างดีซึ่งคุณศึกษาเป็นบทเรียน ส่วนเรื่องอื่นๆ เป็นเอกสารที่ "ซ่อนไว้" และให้ค้นหาด้วยตนเอง หากคุณต้องการแสดงทักษะของคุณในการค้นหาสิ่งพิเศษที่ซ่อนอยู่ เขียนบล็อกโพสต์หรือสร้างวิดีโอ เนื่องจากอาจมีผู้คนจำนวนมากที่สนใจเรียนรู้เกี่ยวกับสิ่งเหล่านั้นและว่าคุณค้นพบสิ่งเหล่านั้นได้อย่างไร หากคุณส่งลิงก์มาให้เรา เราอาจรวมลิงก์นั้นไว้ในข้อมูลอ้างอิงด้วย
หน้าแรกของโครงการ: https://github.com/digininja/DVWA
สร้างโดยทีมงาน DVWA