113

113

۷ دلیل برای اینکه استفاده از بهتر PHP است

http://www.iranphp.net

1

asp

از php عنوان مقاله : ٧ دلیل برتری

نگارنده

: سید حمید رضا هاشمی گلپایگانی

hamid@morva.net

: آدرس پست الکترونیک

١٣٨١

/٣/ تاریخ نگارش : ٢

http://www.iranphp.net

2

می باشد

: ASP بهتر از PHP ۷ دلیل برای اینکه استفاده از

مقدمه

به دلیل سوالات زیادی که در مورد این موضوع شده بود تصمیم گرفتم که کم ی در مورد ای ن موضوع تحق ی ق و نتیجه بر ای استفاده همان در سا یت

برای استفاده همگان قرار دهم

NET.

را شامل نمی شود

. قبلا گفته باشم که اینها تنها برداشت های شخصی من در این تحقیق می باشد و خوشحال می شوم که بقی ه IranPHP.netاست و ASP را ندارم و همچنین بعضی اطلاعات من مربوط به ASP ایرادات من را در این تحقیق برایم ارسال کنند به دلیل اینکه من تجربه کار با

۱

-سرعت ، سرعت ، سرعت

Apache Web

بر روی آن می توانستید سوار

و به همراه Linux بود بر روی سیستم عامل Pentium 166Mhz نوشتم بر روی یک کامپیوتر PHP اولین باری که یک کد به زبانWindows NT بسیار برایم جالب بود که چقدر کد های من سریع اجرا می شوند . یعنی در آن موقع با اگر شما یک Server

هم بر روی آن بالا می آمد فکر کنم

از یک

IIS کنید و به فرض کهMicrosoft را هم اجرا کند . علتش این است که ASP را نداشت چه برسد به اینکه بخواهد html کردن صفحات عادی Serve اصلا وقت

VBScript,

استفاده می کند که در آن هر موقع شما تصمیم به استفاده از یک عنصر خارجی مانند ASP در اجرا کردن کدهای زبان Technology

خارجی می دهد و جواب بدست

Engine های خارجی استفاده می کنند دستور به آن Engine خیلی چیزهای دیگر که در حقیقت از MSSQL, ODBC

های خارجی باعث کند شدن سرویس دهی م ی

برای استفاده از

اجرا نمائید زمانی در حدود ۹

Engine آمده را بررسی و برای استفاده در اختیارادامه برنامه می گذارد . همین رفت و برگشت و اجرا کردنMSSQL Extentions به طرق مختلف احساس کنید . مثلا اگر شما خود MSSQL شود که این را شما به خوبی می توانید در استفاده از.۵۴ ثانی ه ODBC مشترک ۱.۸۸ ثانیه زمان تلف می شود و اگر همان را با استفاده از Query استفاده کنید برای یک MSSQL

ها ی ویندوز استفاده م ی کند

. Engine اینها را به تنها ئی اجراءنم ی کند و از ASP تلف م ی شود که ای ن خود نشان م ی دهد که

Memory

۲ -استفاده بهینه از

کنید این صفحه ۲

۰ بار در حافظه بارگذاری می شود و درحقیقت حافظه شما ۲۰ برابر Include اگر شما در یک صفحه مثلا ۲۰ بار یک صفحه را IIS در 4

را مینویسند و می خواهند آنرا

ASP حل شده است اما بازهم برای کسانی که IIS زیادتر اشغال می شود . البته شنیدم که این مشکل در ویندوز ۲۰۰۰ و 5

بالا مسلما

مشکل زا خواهد شد

بالا

نیز به خوبی قابل ر

Load هستند اجرا کنند مشکل زا است و باعث کند شدن سیستم می شود و در NT که دارای سیستم عامل Hosting بر روی سرور هایLoad در هنگام اجرای یک کد باعث شده است که صفحات در Memory وجود نداشته و ندارد و استفاده درست از PHP این مشکل به طور کلی درٶیت باشند

۳

-خرج اضافی ندارید

یا ارسال نامه توس

در ن

این زبان هستند و ه ی

ط کد برنامه استفاده کنید باید امکانات اضافی File Uploading یا Encryption اگر بخواهید از امکاناتی نظیر ASP مثلا درظر Compile همه اینها در هنگام PHP شما اضافه گردد . این در حالیست که در IIS برای این کار خریداری کنید و نصب کنید تا این امکانات بهچ نصب یا خرج اضاف ی در کار نیست. Standard گرفته م ی شوند و همگ ی از امکانات

بهترین انتخاب، بیشترین سرعت

- MySQL ۴

به

اضافی برای این کار نم ی

مقاله ای نوشتم

PHP با زبان DBMS و سازگار بودن این MySQL بپردازم . اما به خاطر قدرت خارق العاده MSSQL و MySQL در اینجا قصد ندارد به مقایسهModule پشتیبانی می کند و حتی نیازبه نصب Internally را به صورت دستورات MySQL اتصال به PHP صورتیکه. MySQL برخوردار است که شا ید بعدا درمورد SQL باشد ، از سرعت بس یار بالائی در کار با

http://www.iranphp.net

3

Java

و ++C/C به Syntax ۵ -نزدیک بودن

های این دو زبان اکثرا آشنا هستند

دستورات دچار مشکل نشوید که مسلما

Syntax معمولا با Java استفاده کرده اند و بخاطر محبوب بودن بی حد ++C/C از آنجائیکه اکثر برنامه نویسان ازSyntax های خود را شبیه به این زبانها انتخاب کرده است که برای یادگیری دوباره Syntax هم اکثر . PHP

اصلا برایش این مسائل مشکل حساب نمی شود

Microsoft

۶

-رفع ایرادات ، سریع ، بی دردسر

نباشید حر

ندارد یا لااقل به این زودی ها به نتیجه نمی رسید

ارسال کنید و یا اینکه در

ف شما خیلی خری دار Boeing خواسته اید که ایرادی را در سیستمهای خود رفع کند ؟ مسلما اگر شرکت بزرگی مانند Microsoft تا حالا ازPHP این امکان را به شما می دهد که شخصا اقدام به رفع مشکل کنید و آنرا برای دستندرکاران PHP بودن OpenSource

ارسال م ی گردد

. Patch موضوع را مطرح کنید و خواهید دید که از سراسر د نی ا بر ای رفع ای راد شما PHP های عمومی Mailing List

های مختلف

Platform ۷ -اجرا بر روی

که الان

Net. های جدیدتر ارائه خواهد کرد ( چه بسا این Technology رفع خواهد کرد و Microsoft درست است که خیلی از این ایرادات را

ASP

در سیستم عاملها ی دیگر

یعنی هیچ ! بدلیل اینکه Windows بدون ASP وجود دارد و آن این است که ASP آمده همه را درست کرده باشد ) اما یک مشکل اساسی برایASP های ویندوز اجرا می کند که درسیستم عامل های دیگر خبری از آنها نیست . لذ ا Engine نصفی از کدها را توسط

همیشه دار ای ضعفها ی بزرگ ی است

.

ها ی خا

ها را داراست که این یک مزیت برای برنامه نویس ها محسوب م ی

شود

برگرفته از

ص ه یچ Engine شدن است و از Compile ها قابل Platform در همه GNU C Compiler به دلیل آنکه توسط PHP اماOS سیستم عاملی برای اجرای کدها استفاده نمی کند قابلیت اجرا بر روی تعدا زیادی از:

http://php.weblogs.com/php_asp_7_

reasons

utf- به 8 windows- تبدیل 1256

http://www.iranphp.net

1

utf-

به 8 windows- عنوان مقاله : تبدیل 1256

نگارنده

: .………………

آدرس پست الکترونیک

: .………………

تاریخ نگارش

: …….…………

http://www.iranphp.net

2

:

utf- به 8 windows- تبدیل 1256

<?

php

function

convert_w1256_to_utf_8($text) {

$converted_text

\xFF]))/"

=preg_replace_callback("/(:\&\#([0-9]{1,4})\;|([\x80-,"replace_content",$text);

return

}

$converted_text;

function

replace_content($matches_content) {

//windows-1256 character set

$windows1256

= array(

'€'

, # 0x20AC EURO SIGN

'

پ', # ٠ x067E ARABIC LETTER PEH

'‚'

, # 0x201A SINGLE LOW-9 QUOTATION MARK

'ƒ'

, # 0x0192 LATIN SMALL LETTER F WITH HOOK

'„'

, # 0x201E DOUBLE LOW-9 QUOTATION MARK

'…'

, # 0x2026 HORIZONTAL ELLIPSIS

'†'

, # 0x2020 DAGGER

'‡'

, # 0x2021 DOUBLE DAGGER

'ˆ'

, # 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT

'‰'

, # 0x2030 PER MILLE SIGN

'

ٹ', # ٠ x0679 ARABIC LETTER TTEH

'‹'

, # 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK

'OE'

, # 0x0152 LATIN CAPITAL LIGATURE OE

'

چ', # ٠ x0686 ARABIC LETTER TCHEH

'

ژ', # ٠ x0698 ARABIC LETTER JEH

'

ڈ', # ٠ x0688 ARABIC LETTER DDAL

'

گ', # ٠ x06AF ARABIC LETTER GAF

'

', # 0x2018 LEFT SINGLE QUOTATION MARK

'

', # 0x2019 RIGHT SINGLE QUOTATION MARK

'

', # 0x201C LEFT DOUBLE QUOTATION MARK

'

', # 0x201D RIGHT DOUBLE QUOTATION MARK

'

', # 0x2022 BULLET

'

', # 0x2013 EN DASH

'

', # 0x2014 EM DASH

'

ک', # ٠ x06A9 ARABIC LETTER KEHEH

'

', # 0x2122 TRADE MARK SIGN

'

ڑ', # ٠ x0691 ARABIC LETTER RREH

'›'

, # 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK

'oe'

, # 0x0153 LATIN SMALL LIGATURE OE

''

, # 0x200C ZERO WIDTH NON-JOINER

''

, # 0x200D ZERO WIDTH JOINER

'

ں', # ٠ x06BA ARABIC LETTER NOON GHUNNA

' '

, # 0x00A0 NO-BREAK SPACE

'

،', # 0x060C ARABIC COMMA

'

¢', # 0x00A2 CENT SIGN

'

£', # 0x00A3 POUND SIGN

'

¤', # 0x00A4 CURRENCY SIGN

'

¥', # 0x00A5 YEN SIGN

'

¦', # 0x00A6 BROKEN BAR

http://www.iranphp.net

3

'

§', # 0x00A7 SECTION SIGN

'

¨', # 0x00A8 DIAERESIS

'©'

, # 0x00A9 COPYRIGHT SIGN

'

ھ', # ٠ x06BE ARABIC LETTER HEH DOACHASHMEE

'

«', # 0x00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK

'

¬', # 0x00AC NOT SIGN

''

,

# 0x00AD SOFT HYPHEN

'

®', # 0x00AE REGISTERED SIGN

'

¯', # 0x00AF MACRON

'

°', # 0x00B0 DEGREE SIGN

'

±', # 0x00B1 PLUS-MINUS SIGN

'

²', # 0x00B2 SUPERSCRIPT TWO

'

³', # 0x00B3 SUPERSCRIPT THREE

'´'

, # 0x00B4 ACUTE ACCENT

'μ'

, # 0x00B5 MICRO SIGN

'¶'

, # 0x00B6 PILCROW SIGN

'·'

, # 0x00B7 MIDDLE DOT

'¸'

, # 0x00B8 CEDILLA

'

¹', # 0x00B9 SUPERSCRIPT ONE

'

٠ # ,'؛x061B ARABIC SEMICOLON

'

»', # 0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK

'

¼', # 0x00BC VULGAR FRACTION ONE QUARTER

'

½', # 0x00BD VULGAR FRACTION ONE HALF

'

¾', # 0x00BE VULGAR FRACTION THREE QUARTERS

'

٠ # ,'؟x061F ARABIC QUESTION MARK

'

ہ', # ٠ x06C1 ARABIC LETTER HEH GOAL

'

ء', # ٠ x0621 ARABIC LETTER HAMZA

'

آ', # ٠ x0622 ARABIC LETTER ALEF WITH MADDA ABOVE

'

أ', # ٠ x0623 ARABIC LETTER ALEF WITH HAMZA ABOVE

'

ؤ', # ٠ x0624 ARABIC LETTER WAW WITH HAMZA ABOVE

'

إ', # ٠ x0625 ARABIC LETTER ALEF WITH HAMZA BELOW

'

ئ', # ٠ x0626 ARABIC LETTER YEH WITH HAMZA ABOVE

'

ا', # ٠ x0627 ARABIC LETTER ALEF

'

ب', # ٠ x0628 ARABIC LETTER BEH

'

ة', # ٠ x0629 ARABIC LETTER TEH MARBUTA

'

ت', # ٠ x062A ARABIC LETTER TEH

'

ث', # ٠ x062B ARABIC LETTER THEH

'

ج', # ٠ x062C ARABIC LETTER JEEM

'

ح', # ٠ x062D ARABIC LETTER HAH

'

خ', # ٠ x062E ARABIC LETTER KHAH

'

د', # ٠ x062F ARABIC LETTER DAL

'

ذ', # ٠ x0630 ARABIC LETTER THAL

'

ر', # ٠ x0631 ARABIC LETTER REH

'

ز', # ٠ x0632 ARABIC LETTER ZAIN

'

س', # ٠ x0633 ARABIC LETTER SEEN

'

ش', # ٠ x0634 ARABIC LETTER SHEEN

'

ص', # ٠ x0635 ARABIC LETTER SAD

'

ض', # ٠ x0636 ARABIC LETTER DAD

'

×', # 0x00D7 MULTIPLICATION SIGN

'

ط', # ٠ x0637 ARABIC LETTER TAH

'

ظ', # ٠ x0638 ARABIC LETTER ZAH

'

ع', # ٠ x0639 ARABIC LETTER AIN

'

غ', # ٠ x063A ARABIC LETTER GHAIN

'

', # ٠ x0640 ARABIC TATWEEL

'

ف', # ٠ x0641 ARABIC LETTER FEH

http://www.iranphp.net

4

'

ق', # ٠ x0642 ARABIC LETTER QAF

'

ک', # ٠ x0643 ARABIC LETTER KAF

'à'

, # 0x00E0 LATIN SMALL LETTER A WITH GRAVE

'

ل', # ٠ x0644 ARABIC LETTER LAM

'â'

, # 0x00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX

'

م', # ٠ x0645 ARABIC LETTER MEEM

'

ن', # ٠ x0646 ARABIC LETTER NOON

'

ه', # ٠ x0647 ARABIC LETTER HEH

'

و', # ٠ x0648 ARABIC LETTER WAW

'ç'

, # 0x00E7 LATIN SMALL LETTER C WITH CEDILLA

'è'

, # 0x00E8 LATIN SMALL LETTER E WITH GRAVE

'é'

, # 0x00E9 LATIN SMALL LETTER E WITH ACUTE

'ê'

, # 0x00EA LATIN SMALL LETTER E WITH CIRCUMFLEX

'ë'

, # 0x00EB LATIN SMALL LETTER E WITH DIAERESIS

'

ى', # ٠ x0649 ARABIC LETTER ALEF MAKSURA

'

ی', # ٠ x064A ARABIC LETTER YEH

'î'

, # 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX

'ï'

, # 0x00EF LATIN SMALL LETTER I WITH DIAERESIS

''ً

, # 0x064B ARABIC FATHATAN

''ٌ

, # 0x064C ARABIC DAMMATAN

''ٍ

, # 0x064D ARABIC KASRATAN

''َ

, # 0x064E ARABIC FATHA

'ô'

, # 0x00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX

''ُ

, # 0x064F ARABIC DAMMA

''ِ

, # 0x0650 ARABIC KASRA

'

÷', # 0x00F7 DIVISION SIGN

''ّ

, # 0x0651 ARABIC SHADDA

'ù'

, # 0x00F9 LATIN SMALL LETTER U WITH GRAVE

''ْ

, # 0x0652 ARABIC SUKUN

'û'

, # 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX

'ü'

, # 0x00FC LATIN SMALL LETTER U WITH DIAERESIS

' '

, # 0x200E LEFT-TO-RIGHT MARK

'

٠ # ,' x200F RIGHT-TO-LEFT MARK

'

ے', # ٠ x06D2 ARABIC LETTER YEH BARREE

);

#windows1256

return

}

?>

$windows1256[ord($matches_content[1])-0x80];

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

1

چیست ؟

(Buffer Overflow) سرریز بافر

نویسنده بهرنگ فولادی

Behrang@hat-squad.com

1382/8/18

www.hat-squad.com

Hat-Squad

گروه امنیتی

(

مشاور و ارائه دهنده سرویسهای امنیتی)

Service@hat-squad.com

Copyright © 2003, Hat-Squad Security Group

"

درج تمام یا قسمتی از مطالب این مقاله تنها با اجازه نویسنده آن مقدور می باشد "

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

2

از قدیمیترین مشکلات امنیتی سیستمهای آامپیوتری بوده است

. در حال حاضر اگر به ضعفهای امنیتی نرم (Overflow Buffer) سریز بافر

1

از این ضعفها مربوط به / ثبت شده اند ،نگاهی بیاندازید ، متوجه می شوید آه حداقل 3 SecurityFocus افزارهای مختلف آه در سایتهایی مثل

Buffer Overflow

می شوند.این مشکل در تمام سیستم های عامل دیده شده است.در این مقاله با یک مثال ساده ، موضوع Buffer Overflow

و چگونگی استفاده نفوذگرها از آن جهت نفوذ به سیستم های آامپیوتری بررسی خواهد شد

آامپایل شوند

اشاره نخواهد شد

. در پایان روشهایی برای جلوگیری از این نوع(در Windows نوشته شده اند و باید تحت سیستم عامل C حملات ارائه خواهد شد.برنامه های ذآر شده در این مقاله به زبان). Unix/Linux مورد نظر است وبه سیستم های عامل دیگر مثل Win این مقاله تنها سرریز بافر در برنامه های 32

بررسی موضوع را با یک برنامه آوتاه آغاز می آنیم

:

--------------------------------------------------------------------------------------------------------------------------------------

/* big.exe */

#include <stdio.h>

int insecure_func (char *big) {

char insecure_buff[100];

strcpy(insecure_buff,big);

return 0;

}

int main (int argc, char *argv[]) {

char input_buff[1024];

gets(input_buff);

insecure_func(input_buff);

return 0;

}

-----------------------------------------------------------------------------------------------------

input_buff

با فرستادن insecure_func قرار میدهد سپس هنگامی آه تابع input_buff برنامه ابتدا رشته ورودی از صفحه آلید را در آرایه

از

خواهد شد

insecure_buff آپی خواهد آرد.نکته اصلی آوچکتر بودن اندازه insecure_buff رادر input_buff فراخوانی شود ، این تابع مقدار موجود در. (Overflow) سرریز insecure_buff ، بیشتر از 100 آاراآتر را در خود جای داده باشد input_buff است. بطوریکه اگر input_buff

پیغام خطایی شبیه مورد

زیر دریافت خواهید آرد

Enter را به عنوان ورودی به برنامه بدهید. پس از زدن آلید 'a' حال برنامه را آامپایل و اجرا آنید و بیش از 100 آاراآتر:

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

3

پیغام خطا

ببینیم چه اتفاقی افتاده است

قرار داده و آنترل را به روال فراخوانی شده می دهد

دوباره اجرای برنامه راه به روال اصلی می دهد

دارای ساختار زیر است

: هر گاه یک تابع از درون یک روال دیگر فراخوانی میشود ، سیستم عامل آدرس برگشت به روال فعلی را در محلی. بدین ترتیب پس از پایان روال مذآور ، سیستم عامل با (Stack)ٍ " از حافظه به نام "پشته. در مثال بالا آدرس برگشت قبل از وقوع سرریز (پیش از اجرای Stack بازیابی ادرس برگشت از: Stack اشاره دارد. بنابراین قبل از وقوع سرریز return به دستور 0 ( strcpy دستور

___________________

| |

_|___________________|

| | |

| | | *************************

100 bytes = | | insecure_buff | !!! stack grows down !!!

| | | *************************

|_|___________________|_

| | |

| return address | | = 4 bytes

|___________________|_|

|___________________|

Stack

همیشه به سمت آدرسهای پایین تر رشد می آند

باشد

x

ساختار. هنگام شروع اجرای برنامه، سیستم عامل 100 بایت برای بافر (stack) پشتهinsecure_buff بزرگتر از big در حالتی آه اندازه رشته موجود در strcpy آنار می گذارد. واضح است آه اجرا شدن دستور insecure_buffخواهد شد. اگر آمی دقت آنید ، می فهمید آه چرا آدرس برگشت بعد از سریز 616161610 (return address) ، باعث تغییر آدرس برگشت

آپی شود

. insecure_buff قرار بوده به بافر strcpy در مبنای 16 است آه توسط دستور 'a' آد اسکی آاراآتر x است . 061

مشخص شد

آه تمام برنامه ها و روالهایی آه روی یک سیستم عامل در حال اجرا هستند، در آخرین لایه، چیزی جز آدهای ماشین نیستند آه پشت سرهم

خوانده و آنترل اجرای

برنامه را به آن آدرس منتقل می آند

. اما چگونه این مشکل برای نفوذ به سیستم مورد استفاده قرار می گیرد؟ می دانیم overflow stack تا اینجا علت و چگونگی بروزEIP آامپیوتر آدرس حافظه مربوط به دستورالعمل بعدی را در طول اجرای برنامه از رجیستر CPU . خوانده و اجرا می شوند. حال اگر بتوان آدرس موجود در این رجیستر را در هر مرحله ای از اجرای برنامه به مقدار دیگری تغییر داد،

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

4

یا سرویس پنهانی

backdoor بدون درنگ اجرای بقیه برنامه را از این آدرس جدید ادامه خواهد داد. تصور آنید در محل آدرس جدید آد یک CPU

ویا هر نوع آد مخرب دیگری قرار داشته باشد

یا آد محرب اجرا شده، آنترل سیستم مزبور را بدست

. نتیجه این خواهد شد آه آامپیوتر این آد را بجای آد برنامه اصلی آه مسیرش توسط ما عوضbackdoor شده، اجرا خواهد نمود و بدین ترتیب نفوذگر خواهد توانست با استفاده از

در سیستم هدف

. برای overflow گیرد. بنابراین نفوذگر برای رسیدن به هدف خود باید دو مساله را حل آند. اول یافتن راهی برای ایجاد

و

ها از حوصله این مقاله خارج است و نمی توان روش

... را برای یافتن روشی Ftp Server ،Mail Server ، Server Web اینکار نفوذگر ، سرویسها و برنامه های در حال اجرا روی سیستم هدف مانندoverflow آردن هر آدام از آنها آزمایش خواهد نمود. بحث یافتن overflow جهت

شده برای اجرای آد

دلخواه

overflow استانداردی را پیشنهاد آرد و بیشتر روی سعی و خطا استوار است. مرحله دوم استفاده از برنامه.

آد مورد نظر خود را روی سیستم اجرا آنیم

نامیده می شود

است آه آار مورد نظر مارا روی سیستم انجام خواهد داد و با تغییر آدرس برگشت، آنترل را به این آد خودمان می دهیم

مورد نظر خواهیم رسید

. رشته ای را big.exe برای نشان دادن روس آار نفوذگر، سعی می آنیم برنامه با استفاده از برنامه) exploit می سازیم آه شامل یک آد آوچک دستورات زبان اسمبلی (آه اصطلاحا (a به عنوان ورودی (به جای 100 آاراآتر. بدین ترتیب به نتیجه.

احتیاج داریم تا بدانیم رشته ورودی ساخته شده توسط ما در چه محلی روی آدرس برگشت ذخیره شده در انتهای

برای یافتن اندازه بافر سرریز شده است

Exploit برای نوشتن آد. Disassembler خواهد افتاد.برای دانستن این موضوع دو راه وجود دارد.روش اول استفاده از یک Stack

در این روش مجبوریم به دنبال تابعی بگردیم آه سرریز در آن اتفاق می افتد

های اسکی

. راه دوم انجام آزمون و خطا است ، ابتدا باید رشته آاراآتری از آد32 تا 255 بسازیم ، آد آوچک زیر این آار را برایمان انجام می دهد:

-------------------------------------------------------------------------------------------------------------------------------

/* ascii.exe */

#include <stdio.h>

void main(void) {

int i;

for (i=0;i<256;i++) printf("%c",i);

}

-------------------------------------------------------------------------------------------------------------------------------

این سوال پیش می آید آه چرا آاراآتر ها با آد اسکی بزرگتر از

32 را انتخاب آردیم. توجه داشته باشید آه رشته ای آه به عنوان ورودی به

strcpy

هنگام آپی آردن رشته آاراآتری به یکی از این آدها برسد آن را به عنوان انتهای رشته تلقی خواهد آرد و بقیه رشته آپی نخواهد شد

همین دلیل است آه ما بازه

اجرا می آنیم

باشد چون اگر تابع LF(0x0a) ، NULL(0x00) ،(EOF(0x1a،(CR(0x0c برنامه هدف می دهیم نباید حاوی آد های اسکی آاراآترهای. به32 تا 255 را آه شامل هیچکدام از این آدها نیست انتخاب می آنیم. حال برنامه را آامپایل آرده ، به صورت زیر:

C:\> c:\bof\big.exe | ascii.exe

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

5

است

رشته ورودی روی آدرس برگشت می افتد

(ترتیب قرارگیری از راست به چپ است). یعنی با شروع از محل صدو چهارم x8b8a حاوی آدرس 89880 EIP این بار در پیغام خطا رجیستر. پس در رشته ای آه خواهیم ساخت محلهای 104 تا 107 حافظه (به طول 4 (x88-0x20= بافر ( 1040

بایت

) باید حاوی آدرس برگشت به آدی باشد آه می خواهیم اجرا شود.

را تشکیل دهیم

از ابتدای بافر تا محل

از محل

مارابه

پر می آنیم

مساله آخر تعیین آدرس محل حافظه است آه می خواهیم به جای آدرس برگشت واقعی قرار دهیم

می پردازیم

. در این باره دو امکان وجود دارد : Exploit مشکل اول حل شد ، حالا باید تصمیم بگریریم آه چگونه آد104 بافر Exploit -1 قرارگیری آد108 بافر به بعد Exploit -2 قرارگیری آد104 بایت محدود خواهد آرد ، به همین جهت روش دوم را انتخاب می آنیم و محلهای حافظه قبل از Exploit انتخاب روش اول اندازه آد. x یعنی 900 NOP (No Operand) آدرس صدوچهارم را نیز با آد دستور اسمبلی. ابتدا به بررسی وضعیت رجیسترها و: ( return اسمبلی (تولید شده توسط دستور 0 RET ساختار بافر درست قبل از اجرای دستور

___________________

| |

0|___________________|

| |

| | *************************

| insecure_buff | !!! stack grows down !!!

| | *************************

104|___________________|

| |<--- ESP

| return address |

108|___________________|

به محل

اجرا آنیم ، پردازنده بلافاصله آنترل را به آدرس

جستجو آنیم ، آدرس حافظه پیدا شده همان آدرسی است

104 حافظه اشاره خواهد آرد ، پس اگر بتوانیم در این لحظه ESP رجیستر RET همان طور آه می بینید ، درست قبل از اجرای دستور4 بایتی قرار داده شده در محلهای 104 تا 107 می دهد وما به منظور خود jmp esp یک دستورjmp esp (0xff0xe رسیده ایم . ابتدا باید حافظه سیستم را به دنبال آد دستور ( 4

آه بجای آدرس برگشت واقعی در محلهای

104 تا 107 بافر قرار می گیرد. با این حساب ترتیب اجرای برنامه به صورت زیر در خواهد آمد:

RET--> JMP ESP--> Our Exploit Code

های متصل به آن جستجو آرد

. بهترین راه جستجو در DLL و هم در حافظه مربوط به big.exe را می توان هم در حافظه برنامه xff0xe ترآیب 40

ویندوز را رد می آنیم و مطالعه آن را به عهده خواننده علاقه

PE

PE های متصل به برنامه است (در اینجا یکی دو فصل مربوط به فرمت فایلهای DLLمی شوند با آمک برنامه های Load در حافظه Image Base با شروع از آدرس NT سیستم در ویندوز DLL مند می گذاریم ). فایلهای

sysinternals

استفاده می آنیم آه می توانید آن را از سایت LISTDLLS می توان به آسانی این آدرس را پیدا آرد. در اینجا از برنامه Analyser

دریافت آنید

:

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

6

C:\bof> listdlls big.exe

. . .

Base Size Version Path

0x00400000 0x27000 C:\bof\big.exe

0x77f60000 0x5c000 4.00.1381.0130 D:\WINNT\System32\ntdll.dll

0x77f00000 0x5e000 4.00.1381.0133 D:\WINNT\system32\KERNEL32.dll

های آن در حافظه را می بینیم

ها بر خلاف داخل فایل نیست

ظاهر می شود ، دستور زیر را اجرا می آنیم

. می توانیم در حافظه یا داخل هر آدام از این 3 فایل نشان داده DLL اطلاعات راجع به محل قرارگیری برنامه و. از یک Offset بگردیم . جستجو در حافظه راحتتر است چون نیازی به محاسبه jmp esp شده به دنبال آد دستور: SoftICE استفاده می آنیم و هنگام وقوع سرریز آه آنسول SoftICE مثلا Debugger

S 1000000 | ffffffff fee4

نتیجه

. xFFFFFFFF حافظه یعنی 0 Offset اولین آدرسی آه بایت اول مخالف صفر دارد) تا آخرین ) x یعنی جستجوی حافظه از آدرس 010000000

زیر حاصل خواهد شد

:

Pattern found at 0023:77f327e5 (77f327e5)

،

نیست و براحتی می توان از آن استفاده آرد

NULL(0x00) ،(EOF(0x1a،(CR(0x0c پیدا شد این آدرس حاوی هیچکدام از آدهای x77f327e در محل آدرس 50 jmp esp دستور. LF(0x0a)

نصب شده روی سیستم عامل هدف مقادیر متفاوتی خواهد بود ، یه این سبب در مواردی آه

نصب شده روی آامپیوتر هدف اطلاع پیدا آنیم و سپس آدرس درست برای آن

Service Pack توجه : آدرس فوق با توجه به ورژنService Pack می نویسیم به طریقی از شماره Remote Exploit

نویسی وجود دارند آه این مشکل را حل می آنند

. Exploit را استفاده آنیم. روشهاب پیشرفته دیگری برای Service Pack

معلوم شده است

بودن هدف متفاوت خواهد بود

زمینه مطالب و آدهای فراوانی روی وب موجود هستند آه با پیش زمینه فعلی به آسانی می توانید از آنها ایده بگیرید

2-آدرس آه باید بجای آدرس برگشت واقعی Exploit در این مرحله تمام اطلاعات لازم را در اختیار داریم : 1-محل قرارگیری آد. در این Remote یا Local است آه بر حسب Exploit قرار داده شود ، می دانیم. تنها آار باقیمانده نوشتن برنامه.

چلوگیری آنیم؟

Buffer Overflow چگونه از حملات

قبل از

به صورت

بروز نمی آرد

big.exe از ضعف حاصل از عدم تست اندازه داده ورودی استفاده می آنند. اگر برنامه نویس buffer overflow حملاتstrncpy از strcpy را چک می آرد یا بجای تابع big اندازه ورودی strcpy(insecure_buff,big); دستور. لذا مهمترین اصل در برنامه نویسی یک سرویس یا overflow استفاده می آرد، مشکل strncpy(insecure_buff,big,100);

ها چک آردن اندازه تمام ورودیها به برنامه قبل از انجام هر آاری روی داده هاست

. برای برنامه overflow برنامه مقاوم در برابر

وجود دارند آه برنامه نویس می تواند با لینک آردن این آتابخانه ها به نرم افزارش،

ها را بگیرد

StackGuard آتابخانه هایی مانند linux/unix نویسان محیط. overflow جلوی بسیاری از

Of 7

Copyright © 2003, Hat-Squad Security Group www.hat-squad.com

7

اما در اآثر موارد، به آد سورس برنامه یا سرویس نصب شده روی سیستم خود دسترسی نداریم و قادر به تشخیص ضعفهای احتمالی از طریق

بررسی سورس برنامه نیستیم همچنین اینکار از توان افراد غیر متخصص حارج می باشد

است

. چاره ای آه در بعضی سیستم های عامل مانند. همچنین این روش بصورت محدودی روی (Stack) اندیشیده شده است، ممانعت از اجرای آد در محیط پشته Linux و Sun/OS

های ارائه شده توسط تولید آننده نرم

افزار است آه در

Fix ها و Patch سیستمهای ویندوز پیاده شده است. اما بهترین و راحتترین روش برای عموم نصب تمام99 % مواقع موثر خواهد بود.

ارسال نمایید

. behrang@hat-squad.com سوالات و نظرات خود را به آدرس

: PE

دریافت اطلاعات بیشتر در مورد

http://msdn.microsoft.com/library/en-us/dnwbgen/html/msdn_peeringpe.asp?frame=true

: LISTDLLS

دریافت برنامه

http://www.sysinternals.com/