
استغلال لتنفيذ أوامر عن بُعد في أمر go get الخاص بـ Golang.
استغلال لتنفيذ الأوامر عن بُعد في أمر go get في Golang.
عندما تقوم بتنفيذ go get لحزمة، صُممت Go لبناء الحزمة وتثبيتها دون تشغيل أي كود منها. القصد هو أنه يمكنك بأمان جلب حزم Go وبناؤها وحتى تثبيتها دون الوثوق بها على الإطلاق. نظريًا، يبدو أن هذه مهمة بسيطة لأدوات Go، لكن في الواقع، إنها تحدٍ حقيقي. يقوم go get بالكثير تحت الغطاء، بما في ذلك استدعاء أدوات طرف ثالث مثل git وclang بطرق تتأثر بشدة بإعدادات الحزم. ضمان سلامة هذه الاستدعاءات هو معركة شاقة لم يحسمها Go بعد.
عندما يتم تفعيل cgo، تستدعي خطوة البناء أثناء go get مُصرّف C المضيف، gcc أو clang، مع إضافة علامات المُصرّف المحددة في ملفات مصدر Go. يدعم كل من gcc وclang آلية إضافات (plugin) يتم فيها تحميل مكتبة مشتركة كإضافة داخل المُصرّف، وفقًا لتوجيهات علامات المُصرّف. هذا يعني أن مستودع حزمة Go يمكن أن يحتوي على ملف exploit.so إلى جانب ملف مصدر Go يقول (على سبيل المثال) // #cgo CFLAGS: -fplugin=exploit.so، مما يتسبب في تحميل الإضافة الهجومية في مُصرّف C المضيف أثناء البناء. إضافات gcc وclang غير مقيدة تمامًا في وصولها إلى النظام المضيف.
Go قبل 1.8.7، وGo 1.9.x قبل 1.9.4، وإصدارات Go 1.10 الأولية قبل Go 1.10rc2 تسمح بتنفيذ أوامر عن بُعد عبر go get أثناء بناء الكود المصدري، من خلال استغلال ميزة إضافات gcc أو clang، لأن وسيطتي -fplugin= و -plugin= لم تكونا محظورتين. Go قبل 1.8.7، وGo 1.9.x قبل 1.9.4، وإصدارات Go 1.10 الأولية قبل.
للاستغلال، سنحتاج إلى استضافة حزمتنا الخبيثة. نحتاج إلى موقع ويب يدعم TLS وسلسلة شهادات صالحة. طريقة سهلة للقيام بذلك هي استخدام github
بعد ذلك، ستحتاج إلى ملف plugin/.so خبيث. الكود الموجود في exploit.c سيساعدك في ذلك.
ملاحظة: غيّر الكود التالي في exploit.c إلى الأمر الخاص بك
void exploit() {
system("<Your CMD>");
}
ملاحظة: قم بتجميع هذا الملف وفقًا لبنية جهاز/حاسوب الضحية
يمكنك بناء exploit.sp باستخدام الأمر التالي:
gcc -shared -o exploit.so -fPIC exploit.c
بمجرد استضافة حمولتك الكاملة على Github، يجب أن تكون قادرًا على تمرير رابط الحزمة إلى الضحية.