باستخدام نظام واحد () دعوة إلى تنفيذ أوامر متعددة في C

StackOverflow https://stackoverflow.com/questions/245600

  •  05-07-2019
  •  | 
  •  

سؤال

في مختبر أمن المعلومات أعمل على، لقد تم تكليف مع تنفيذ أوامر متعددة مع مكالمة واحدة إلى "النظام ()" (مكتوب في C، التي تعمل على فيدورا). ما هو بناء الجملة من شأنها أن تسمح لي لتنفيذ أكثر من القيادة من خلال نظام ()؟ (إن الفكرة هي هل يمكن تنفيذ الأوامر التعسفية من خلال تشغيل برنامج على كمبيوتر بعيد، إذا تفاعل البرنامج مع نظام التشغيل من خلال نظام () المكالمة.)

وأي بمعنى:.

char command[] = "????? \r\n"; 
system(command);
هل كانت مفيدة؟

المحلول

وهذا يعتمد على قذيفة يجري التذرع بها لتنفيذ الأوامر، ولكن في معظم قذائف العامة تستخدم ; لفصل الأوامر بذلك شيئا من هذا القبيل يجب أن تعمل:

command1; command2; command3

[تحرير]

وكما ذكرdicroce، يمكنك استخدام && بدلا من ; الذي سيوقف التنفيذ في أول الأمر أن تقوم بإرجاع قيمة غير صفرية. قد أو قد لا تكون مطلوبة (وبعض الأوامر قد ترجع غير صفر على النجاح) ولكن إذا كنت تحاول التعامل مع الأوامر التي يمكن أن تفشل ربما يجب عليك عدم سلسلة أوامر متعددة معا في نظام () تدعو كما لم يكن لديك أي وسيلة لتحديد مكان حدث الفشل. في هذه الحالة أفضل رهان سيكون إما لتنفيذ أمر واحد في وقت واحد أو إنشاء شيل الذي يقوم بإجراء معالجة الأخطاء المناسب، وندعو بدلا من ذلك.

نصائح أخرى

استخدم && بين أوامرك. فمن لديه ميزة أنه لا يزال فقط أوامر تنفيذ طالما عودتهم رموز الخطأ ناجحة. مثال:

و"سي دي / إجراءات && القط cpuinfo"

وأحد الاحتمالات تأتي إلى الذهن على الفور. هل يمكن كتابة كافة الأوامر إلى برنامج نصي ثم تشغيله مع:

system ("cmd.exe /c \"x.cmd\"");

وأو، الآن بعد أن لقد لاحظت أنك تعمل على فيدورا:

system ("x.sh");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top