ฉันมีการติดตั้งกับผู้ใช้หลายคนที่สามารถโฮสต์หน้าเว็บส่วนตัวของพวกเขา (ให้บริการโดย apache ผ่าน mod_userdir
) ตั้งอยู่ใต้ public_html
ในบ้านของพวกเขา การสนับสนุน php ยังเปิดใช้งานใน apache
ในขณะนี้ฉันมีการกำหนดค่าต่อไปนี้ใน /etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
UserDir <home basedir>/*/public_html
UserDir disabled root
<Directory <home basedir>/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes Options
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
ปัญหาคือเนื่องจากสคริปต์ php ทุกตัวถูกเรียกใช้โดยผู้ใช้ www-ข้อมูล
, แต่ละหน้าผู้ใช้มีสิทธิ์เหนือผู้ใช้รายอื่นทุกคน public_html
. ตัวอย่างเช่น ฉันสามารถรับ php reverse shell และตรวจสอบเนื้อหาของผู้ใช้รายอื่นได้
ฉันได้ลองเพิ่ม
php_admin_value open_baseir ""
ข้างใน ไดเรกทอรี
แท็กด้านบน สิ่งนี้จะป้องกันช่องโหว่ด้านความปลอดภัยที่อธิบายไว้ข้างต้น แต่จริง ๆ แล้วอนุญาตให้สคริปต์ php ลงไปที่ลำดับชั้นของไดเร็กทอรีเท่านั้น ตัวอย่างเช่น
<?php
chdir('assets');
echo getcwd();
chdir('..');
echo "<br>";
echo getcwd();
?>
ผลิต
<home>/public_html/ทรัพย์สิน
<home>/public_html/ทรัพย์สิน
ปัญหาจะได้รับการแก้ไขถ้า <หน้าแรก>/public_html
เส้นทางถูกฮาร์ดโค้ดในไฟล์ open_baseir
ตัวแปร แต่แน่นอนว่าฉันต้องสามารถทำเช่นนี้กับผู้ใช้ทั้งหมดผ่านตัวแปรบางตัวได้
apache เก็บไวด์การ์ด (<ตามบ้าน>/*/public_html
) ตรงกับตัวแปรบางตัวที่ฉันสามารถเข้าถึงได้ภายใน ไดเรกทอรี
แท็ก? หรือมีวิธีอื่นที่ดีกว่าในการทำเช่นนี้ เช่น การเรียกใช้หน้าผู้ใช้แต่ละหน้าในสภาพแวดล้อมแบบ chroot