
هنا سنقوم بإعداد مختبرنا على جهاز SEED Ubuntu 16.04 الافتراضي، وعلينا أولاً تثبيت خدمة Go Git Service (GOGS) على جهازنا الافتراضي قبل الانتقال إلى استغلال ثغرة حقن SQL. لإعداد الجهاز الافتراضي، إليك الخطوات:
الخطوة 1: تثبيت قاعدة البيانات
بمجرد تسجيل الدخول إلى النظام، يجب تشغيل الأمر التالي للتأكد من تحديث مكتباتنا ومستودعاتنا: $ sudo apt-get -y update
نستخدم MySQL server في الواجهة الخلفية، ولذلك نحتاج إلى تثبيته على جهازنا الافتراضي، ويمكننا فعل ذلك بالأمر التالي: $ sudo apt-get – y install mysql-server
أثناء تثبيت قاعدة البيانات، يطلب النظام كلمة مرور مستخدم root لقاعدة البيانات. الآن سننشئ ملفًا باسم gogs.sql. لقد استخدمنا nano، لكن أي محرر ملفات سيعمل.
ثم نلصق عبارات SQL التالية في الملف gogs.sql ونحفظه. DROP DATABASE IF EXISTS gogs; CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
الآن سننفّذ الملف gogs.sql باستخدام MySQL لإنشاء قاعدة بيانات GOGS بالأمر التالي: $ mysql – u root -p < gogs.sql
بعدها يُطلب منا إدخال كلمة مرور root التي أنشأناها أثناء مرحلة تثبيت قاعدة البيانات، وبإدخالها نتمكن من بناء قاعدة بيانات GOGS بنجاح.
لتثبيت GOGS من المصدر، نحتاج إلى أدوات التحكم بالإصدارات مثل Git وMercurial، ولتثبيتها على جهازنا الافتراضي نستخدم الأمر التالي: $ sudo apt-get -y install mercurial git
الخطوة 2: تثبيت Go
GOGS مكتوب بلغة البرمجة Go، ولذلك نحتاج إلى تثبيتها قبل تجميع GOGS.
أولاً، هناك بعض متغيرات البيئة التي نحتاج إلى ضبطها، ولضبطها نعدّل ملف ~/.bashrc ونضيف إليه الأسطر التالية ثم نحفظ الملف: export GOPATH=/home/git/go export GOROOT=/usr/local/src/go export PATH=${PATH}:$GOROOT/bin
للتأكد من تطبيق تغييراتنا بنجاح، نشغّل الأمر التالي: $ source ~/.bashrc
الآن نستخدم أمر wget لتثبيت أحد الإصدارات المُجمَّعة من Go، والأمر هو كما يلي: $ wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
ثم نفك ضغطه باستخدام الأمر التالي: $ tar zxf go1.4.2.linux-amd64.tar.gz
بمجرد فك ضغط الملف، نغيّر دليل العمل إلى $GOROOT المعرَّف في ~/.bashrc، والأمر لذلك هو: $ sudo mv go $GOROOT
الآن، نتحقق من تثبيت Go على جهازنا الافتراضي باستخدام الأمر: $ go
للوصول إلى مجلد Gogs بكل المستندات المطلوبة، ببساطة استنسخ مجلد Gogs عبر git إلى المسار $GOPATH/src/github.com/gogits/gogs يمكن فعل ذلك بالأمر التالي: $ cd $GOPATH/src/github.com/gogits/gogs
الآن سنثبّت Supervisor لإدارة خدمة Gogs باستخدام الأمر: $ sudo apt-get -y install supervisor
بعد تثبيت Supervisor على جهازنا الافتراضي، سننشئ الآن عملية خفية لـ Gogs (daemon) عن طريق إنشاء قسم إعدادات في Supervisor. وللقيام بذلك، نحتاج أولاً إلى تحديد موقع لملفات السجل. موقع ملفات السجل هو /var/log/gogs. والأمر لذلك هو: $ sudo mkdir -p /var/log/gogs
بعد تحديد موقع تخزين السجلات، نتابع تعديل ملف إعدادات Supervisor الموجود في /etc/supervisor/supervisord.conf، والأمر لذلك هو: $ sudo nano /etc/supervisor/supervisord.conf
نضيف المحتوى التالي إلى الملف لإنشاء قسم Gogs:
[program:gogs] directory=/home/git/go/src/github.com/gogits/gogs/ command=/home/git/go/src/github.com/gogits/gogs/gogs web autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/gogs/stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/gogs/stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment = HOME="/home/git", USER="git" user = git
الكود أعلاه يحدد الأوامر التي نريد تنفيذها لتشغيل Gogs، وتشغيل Supervisor، وتوفير موقع ملفات السجل ومتغيرات البيئة المقابلة. الآن نعيد تشغيل Supervisor لتسري التغييرات باستخدام الأمر: $ sudo service supervisor restart
للتحقق من أن Gogs يعمل بالفعل، نستخدم الأمر التالي: $ ps -ef | grep gogs يعرض أمر ps معلومات عن العمليات النشطة، ونستخدم grep عبر تلك النتائج للحصول على معلومات Gogs.
طريقة أخرى للتحقق من أن الخادم يعمل هي النظر إلى ملف stdout.log باستخدام الأمر: $ tail /var/log/gogs/stdout.log
يمكننا الآن حتى زيارة صفحة الويب التي ستعرض صفحة التثبيت. سيكون عنوان URL لذلك هو: http://10.0.2.15:3000
الخطوة 4: إعداد Nginx كخادم وكيل عكسي (Reverse Proxy)
أولاً، نحتاج إلى تثبيت Nginx، ونفعل ذلك باستخدام الأمر التالي: $ sudo apt-get -y install nginx
الآن، ننشئ ملف إعدادات Nginx لـ Gogs، وسيكون موجودًا في etc/nginx/sites-available/gogs. ونضيف أيضًا الكود التالي إلى الملف:
server { listen 80; server_name “ADD IP ADDRESS HERE!!!”;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://localhost:3000;
}
}
نحتاج أيضًا إلى إنشاء ارتباط رمزي (symlink) ليتمكن Nginx من الوصول إلى الملف. يُنشأ الارتباط الرمزي بين /etc/nginx/sites-available/gogs و /etc/nginx/sites-enabled/gogs. يمكننا إنشاء الارتباط الرمزي باستخدام الأمر التالي:
$ sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/gogs
أخيرًا، نحتاج إلى إعادة تشغيل خدمة Nginx لتفعيل إعدادات الاستضافة الافتراضية. أمر إعادة التشغيل هو: $ sudo service nginx restart
يمكننا الآن زيارة عنوان URL المستخدم سابقًا دون استخدام رقم المنفذ. العنوان هو: http://10.0.2.15
الخطوة 5: تهيئة Gogs
قبل أن نتمكن من تهيئة Gogs، يجب ملء بعض المعلومات على صفحة الويب الخاصة بالخادم، وعنوان URL الخاص بها هو: http://10.0.2.15/install
في القسم الأول، نملأ معلومات قاعدة البيانات، وهي MySQL في حالتنا. الحقول هي كما يلي:
نوع قاعدة البيانات: MySQL المضيف: 127.0.0.1:3306 المستخدم: root كلمة المرور: seedubuntu اسم قاعدة البيانات: gogs
في القسم الثاني، نملأ الإعدادات العامة لـ Gogs، والحقول الخاصة بها هي: مسار جذر المستودعات: /home/git/gogs-repositories مستخدم التشغيل: git النطاق: 10.0.2.15 منفذ HTTP: 300 عنوان URL للتطبيق: http://10.0.2.15:3000
بعد ذلك، نعدّل إعدادات اسم المستخدم وكلمة المرور للمسؤول ضمن إعدادات حساب المسؤول.
الآن، ننقر على «Install Gogs» ونسجّل الدخول.
الخطوة 6: اختبار Gogs
للتأكد من أن Gogs يعمل بالفعل كما هو مصمَّم، نجري اختبار سحب/دفع (pull/push) بسيط. أولاً، نذهب إلى العنوان http://10.0.2.15/repo/create وننشئ مستودعًا باسم my-test-repo.
بعد ملء جميع المعلومات المطلوبة، يمكننا المضي قدمًا في إنشاء المستودع بالنقر على الزر الأخضر «Create Repository».
الآن، يمكننا أيضًا استنساخ هذا المستودع باستخدام الأمر: $ git clone http://10.0.2.15//my-test-repo.git
ثم ننتقل إلى موقع المستودع على جهازنا الافتراضي ونحدّث ملف README.md. أخيرًا، ننفّذ commit لكل التغييرات ونرفعها باستخدام الأمر: $ git add –-all %% git commit -m “init command”” && git push origin master
تم إنشاء المستودع بنجاح، والآن عندما نزور العنوان http://10.0.2.15/iammuskaan/my-test-repo يمكننا رؤية المحتوى مضافًا إلى ملف README.md.