ورود

View Full Version : SQL Injection



tc1000
دوشنبه 15 شهریور 1389, 00:50 صبح
با سلام
آیا SQL Injection فقط برای تکس باکس ها که قراره یه Action داشته باشه انجام میشه؟
بطور مثال login که یوزر نیم و پسورد دار ؟
یا مثلا یک فروشگاه که محصولات رو کلیک میکنید و آنلاین پرداخت میکنید و بعد از بانک صفحه بر میگرده اینها همه با دیتا بیس سر و کار داره آیا اینها هم احتمال تزریق SQL Injection رو داره؟

Behrouz_Rad
دوشنبه 15 شهریور 1389, 01:09 صبح
همه جا احتمالش هست. حتی از طریق Header های Http. بستگی به نحوه ی تعامل برنامه نویس با ورودی هایی داره که به سمت برنامه از سمت کلاینت ارسال میشن.

tc1000
سه شنبه 16 شهریور 1389, 01:30 صبح
این کد می هستش که فکر میکنم خیلی راحت sql در درون این تزریق میشه
آیا راهی داره کمکم کنید که کد رو طوری تغییر بدم که sql injection نتونه راهی به اون داشته باشه


strcon = ConfigurationManager.ConnectionStrings("MembershipConnectionString").ConnectionString

Dim conn As New NpgsqlConnection(strcon)
Dim mycommand As New NpgsqlCommand("select * from normal_users where user_id='" + Trim(TextBox1.Text) + "'", conn)
Dim myadapter As New NpgsqlDataAdapter
myadapter.SelectCommand = mycommand
conn.Open()
mycommand.ExecuteNonQuery()

Dim dr2 As NpgsqlDataReader
dr2 = mycommand.ExecuteReader()

ممنون

Behrouz_Rad
سه شنبه 16 شهریور 1389, 01:36 صبح
بارها بحث شده. یا از پارامترهای Inline در هنگام مقداردهی استفاده کن یا از Stored Procedure ها.

موفق باشید.

ali_shmki
سه شنبه 16 شهریور 1389, 01:48 صبح
چاره كار شما اينه:
Dim mycommand As New SqlCommand("select * from normal_users where user_id=@id", conn)

mycommand.Parameters.AddWithValue("id", TextBox1.Text)

tc1000
سه شنبه 16 شهریور 1389, 02:24 صبح
یعنی این دیگه راهی برای نفوذ نداره؟

amirh_karimifar
سه شنبه 16 شهریور 1389, 02:57 صبح
نفوذ از طریق injection بله با روشهای بالا دیگه احتمالش کم میشه . ولی راه های نفوذ دیگه ایم هست .
الان request flooding و یا روش های دیگه .

tc1000
شنبه 20 شهریور 1389, 02:44 صبح
Dim mycommand As New NpgsqlCommand("select * from normal_users", conn)
آیا این هو قابل نفوذ هستش؟
منظور با sql injection هستش

Behrouz_Rad
شنبه 20 شهریور 1389, 10:50 صبح
Dim mycommand As New NpgsqlCommand("select * from normal_users", conn)
آیا این هو قابل نفوذ هستش؟
منظور با sql injection هستش
وقتی پارامتر ورودی نداره قابل نفوذ نیست. در ضمن، هیچ وقت از "*" در جلوی SELECT استفاده نکن. باعث Table Lookup میشه.

موفق باشید.

tc1000
شنبه 20 شهریور 1389, 11:16 صبح
پس از چی استفاده کنم
و سوال اصلی table lookup چطوری بوجود میاد با چه نفوذی

Behrouz_Rad
شنبه 20 شهریور 1389, 13:02 عصر
پس از چی استفاده کنم
و سوال اصلی table lookup چطوری بوجود میاد با چه نفوذی
نام فیلدها رو مستقیماً جلوی SELECT بنویس تا موتور پردازشگر دستور SQL نیاز نداشته باشه Table سیستمی رو جستجو کنه تا نام فیلدهای جدولت رو استخراج کنه.

موفق باشید.

tc1000
شنبه 20 شهریور 1389, 15:59 عصر
اگر بخوام کل فیلدها رو ببینم اون موقع چه کار کنم؟
یعنی منظورم برای یک گزارش هستش

ricky22
شنبه 20 شهریور 1389, 16:06 عصر
خب اسم همه ی فیلد ها رو دستی بنویس.

tc1000
شنبه 20 شهریور 1389, 16:09 عصر
و اگه تعداد فیلدها زیاد باشند؟

Mostafa_Dindar
شنبه 20 شهریور 1389, 16:17 عصر
و اگه تعداد فیلدها زیاد باشند؟

برنامه نویسی رو رها کن , برو دنبال ساز و آواز .

در Object Explorer فلدر Columns رو Drag کن و در صفحه Query رها کن .

حالا شما بپرس , Object Explorer کجاست ...

ASPX
یک شنبه 21 شهریور 1389, 10:49 صبح
منظورشون اينه كه وقتي مينويسي


select * from normal_users

تا اينكه بنويسي


select name,family ,... from normal_users

در حالت اول بايد نام ستون ها پيدا بشه و يك جستجو ! lookup صورت گرفته روي جدول ! اين ديگه ربطي به sql injection نداره و ديگه نفوذي در كار نيست