Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2019-5096-GoAhead-Web-Server-Dos-Exploit — استغلال بلغة Python لثغرة CVE-2019-5096، وهي ثغرة استخدام بعد التحرير (use-after-free) في معالج الرفع لخادم الويب GoAhead، مما تسبب في حرمان من الخدمة عبر تحرير مزدوج (double-free). | Kitploit
أدوات/GitHubGitHub/ianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالاختبار العشوائياستغلال الملفات الثنائية
GitHubianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit

CVE-2019-5096-GoAhead-Web-Server-Dos-Exploit

استغلال بلغة Python لثغرة CVE-2019-5096، وهي ثغرة استخدام بعد التحرير (use-after-free) في معالج الرفع لخادم الويب GoAhead، مما تسبب في حرمان من الخدمة عبر تحرير مزدوج (double-free).

عرض المستودع
1327منذ 6 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2019-5096 Use After Free Dos Exploit

python TriggerDOS.py ip	

TriggerDoubleFree

تحليل الثغرة

[https://github.com/embedthis/goahead.git] GoAhead رابط GitHub

الفرق بين النسخ المطبوعة (git diff)

GitDiff

تحليل الكود الرئيسي

في الكود، نحدد الموقع upload.c:370، نرى أنه قبل تنفيذ

	wp->currentFile=0

تم تنفيذ

typedef struct WebsUpload {
    char    *filename;              /**< Local (temp) name of the file */
    char    *clientFilename;        /**< Client side name of the file */
    char    *contentType;           /**< Content type */
    ssize   size;                   /**< Uploaded file size */
} WebsUpload;
...

typedef struct Webs {
...
    WebsUpload      *currentFile;
...
}Webs;
...
processContentData(Webs *wp){
...
	file = wp->currentFile;
	...
	hashEnter(wp->files, wp->uploadVar, valueSymbol(file), 0);
	defineUploadVars(wp);
	wp->currentFile=0;
	...
}

حيث دالة hashEnter تقوم بإضافة عنصر إلى جدول التجزئة، مما يتسبب في مراجع متعددة لـ wp-currentFile. سيتم تحرير بنية WebsUpload الموجودة في wp->files (جدول التجزئة) عند انتهاء جلسة http (انتهاء دورة حياة Webs) بواسطة استدعاء termWebs

static void termWebs(Webs *wp, int reuse)
{
...
#if ME_GOAHEAD_UPLOAD
    if (wp->files >= 0) {
        websFreeUpload(wp);// traverses hashtable and frees each WebsUpload structure.
    }
#endif
}

الآن ننظر إلى نقطة تحرير أخرى:

...
processUploadHeader(Webs *wp, char *line)
{
	while (key && stok(key, ";\r\n", &nextPair)) {// this splits by ; to parse upload header
		...
		else if (scaselesscmp(key, "filename") == 0) {
		...
		freeUploadFile(wp->currentFile);
		file = wp->currentFile = walloc(sizeof(WebsUpload));
		...		
        }
	}
}

نجد أنه إذا كان حقل الرأس filename موجودًا في رأس الرفع، يتم تحرير wp->currentFile، ثم تخصيص WebsUpload جديد باستخدام walloc.
نظرًا لأن sizeof(WebsUpload) يقع ضمن حجم global_max_fast، فسيتم تخصيص الكومة وفقًا لمبدأ آخر ما يدخل أول ما يخرج، وبالتالي يتم تخصيص الكتلة المحررة حديثًا على الفور، ثم يتم إضافتها مرة أخرى إلى جدول التجزئة في دالة processContentData. الآن جدول التجزئة يحتوي على مرجعين لنفس الكتلة، مما يؤدي إلى تحرير مزدوج (double free) وتعطل البرنامج عند استدعاء termWebs.

تشغيل الثغرة

إضافة رأسين upload في طلب واحد:
بعد دالة processContentData، يتم الدخول مرة أخرى إلى دالة processUploadHeader. أي الترتيب التالي للاستدعاء:

websProcessUploadData (حلقة) #آلة حالة الرفع، تحدد كل حلقة حالة واحدة ->initUpload()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->return;

إمكانية تنفيذ الكود

...

تنزيل الأداة