بسم الله الرحمن الرحيم
اليوم سوف اقوم بشرح طريقه جديده من نوعها في عمليه exploiting & hijacking functions في برامج التشغيل
الموصله ديناميكيا ( اتحدث عن ليونكس )

هذه التقنيه الجديده من نوعها والخاصه بنظام ليونكس تمكنك من التغيير في فنكشن محدد لتتحكم فيه عن طريق مكتبات ديناميكيه
تقوم بعمل load لها عن طريق LD_PRELOAD .
ال LD_PRELOAD هي خاصيه قويه في ليونكس تعالج المكتبات الديناميكيه التي تستعمل من قبل البرامج .
مثلا لدينا هاذا الكود C
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char passwd[] = "!#$%^&*()(*&^%$%^&*()";
if(argc < 2)
{
printf("%s <passwd>\n",argv[0]);
return(0);
}
if(!strcmp(passwd, argv[1]))
{
printf("Correct passwd ...\n");
return(1);
}
printf("Wrong passwd ....\n");
return(0);
}مثل ماتشوف الكود هاذا راح يقبل اوامر من سطر الاوامر مباشره ليقارن المدخل الاول argv[1] مع passwd
اذا كان المدخل مشابه ل passwd راح يقولك Correct passwd ... واذا كان المدخل خاطء راح يقولك Wrong passwd ...
لنقوم بتجميع البرنامج وتشغيله
Qnix dev # gcc passwd.c -o passwd Qnix dev # ./passwd ./passwd <passwd>
قمنا بتجميعه وتشغيله .. والان لنعتبر انني لا اعرف ماهو الباسورد ولدي هاذا البرنامج واريد عمل hijacking ل strcmp()
لكي اقوم بتغير قيمه ال passwd واختيارها بنفسي <_<
الان سوف نقوم بعرض ال dynamic libs المستخدمه من قبل البرنامج
Qnix dev # ldd passwd linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0x40032000) /lib/ld-linux.so.2 (0x40000000)
طبعا جميع هذه المكتبات يتم معالجتها عن طريق LD_PRELOAD ... الان نحن سنقوم بكتابه مكتبه مشاركه تقوم
بعمل hijack ل strcmp() وتغير قيمتها من s1 الى s2 .
سوف نقوم الان بكتابه الكود
#include <stdio.h>
#include <string.h>
int strcmp(const char *s1, const char *s2)
{
printf("Real passwd : %s\n",s1);
printf("Hijacked : %s\n",s2);
return(0);
}هاذا الكود سوف يقوم بارجاع fixed value للداله strcmp()
وسوف يعرض لنا ال s1 وال s2
ال s1 : هي القيمه الحقيقه في البرنامج وهي passwd ... كما ترون
في الكود هاذا الكود
if(!strcmp(passwd, argv[1]))
كما مبين في الشكل ان ال
passwd = s1
argv[1] = s2
سوف نقوم الان بتجميع الكود وتشغيله ونرى ماذا سيحدث
Qnix dev # gcc -fPIC -c hijack.c -o hijack.o Qnix dev # gcc -shared hijack.o -o hijack.so
قمنا بتجميع البرنامج ... الان سوف نقوم بادخاله عن طريق LD_PRELOAD ( هي خاصه ب bash )
وبعدها نقوم بتشغيل البرنامج مباشره ... فالبرنامج سوف يقوم بتشغيل هذه المكتبه وهي سوف تقوم بتغيير القيمه s1
الى s2 وارجاعها على انها equal
( لاننسى ان ال return 0; دائما يعيد قيمه مساويه )
Qnix dev # LD_PRELOAD="./hijack.so" ./passwd aaaa Real passwd : !#$%^&*()(*&^%$%^&*() Hijacked : aaaa Correct passwd ...
تمت العمليه تم ارجاع قيمه s2 على انها Equal :lol:
صوره:

قمت بأنشاء فيديو عن هذه الطريقه لكي يوضح عملها اكثر .... يمكن الحصول عليه من هنا
http://www.0x11.org/rewlp.html
( اي استفسار ارجو طرحه هنا بدون تردد ... وإن شاء الله نشوف تفاعل مع الموضوع )
تحياتي