PDA

View Full Version : ورود غیر مجاز به فرم



mokh_pascal_sangesary
شنبه 19 مرداد 1387, 15:16 عصر
با asp.net 2.0 یه سایت دارم.3 سالی هست داره کار میکنه.این 2 - 3 روزه خیلی یه موضوعی منو نگران کرده. یکی هست که میتونه بدون داشتن پسورد وارد سایت بشه و وارد صفحه خصوصی کاربر بنده خدا(هر کاربری - حتی نام کاربری خودم!) بشه و هر کاری خواست انجام میده.(نام کاربری توی سایت مشخص هست ولی پسورد نه)

اصول sql_Injection هم رعایت شده و با store procedure نام کاربری و پسورد از دیتابیس چک میشه .

پسورد کاربر رو هم کسی نداره و اگر فرض کنیم که پسورد رو هم داشته باشه ، با اینکه کاربر پسورد خودش رو عوض میکه باز هم میبینیم ایشون وارد سایت شده و هر کاری خواسته کرده !

کسی با این اطلاعات چیزی به ذهنش میرسه ؟
ممنون میشم اگه کمک کنید 3 سال تلاشم نپره (آخه یه کاری ازم خواسته کنم که دست از سرم بر داره و اگه این کار رو نکنم سایم رو هواست و این روزاست که فرصتم تموم شه)

:ناراحت:

raravaice
شنبه 19 مرداد 1387, 16:02 عصر
1.سایت Down کن.
2.سورس برنامه رو مرور کن.عیب یابی کن.
3.سایت رو UP کن.
4.بعد به طرف بگو ... :)

من از این آدما زیاد دیدم تحت هیچ شرایطی هم باهات کنار نمیان.

موفق باشید

mokh_pascal_sangesary
شنبه 19 مرداد 1387, 22:27 عصر
1.سایت Down کن.
2.سورس برنامه رو مرور کن.عیب یابی کن.




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


If isvalida(txtusername.text, txtpass.text) = True Then
Dim tkt As FormsAuthenticationTicket
Dim cookiestr As String
Dim ck As HttpCookie
tkt = New FormsAuthenticationTicket(1, txtusername.text, DateTime.Now(), _
DateTime.Now.Addminute(30), False, "your custom data")
cookiestr = FormsAuthentication.Encrypt(tkt)
ck = New HttpCookie(FormsAuthentication.FormsCookieName(), cookiestr)
ck.Path = FormsAuthentication.FormsCookiePath()
Response.Cookies.Add(ck)
Session.Timeout = 30
Session.Add("ses_name", txtusername.text)
My.Response.Redirect("user_page.aspx", True)


تابع isvalida هم تابعی هستش که نام کاربری و پسورد رو با دیتابیس از طریق store procedure تطبیق میده.

میشه کمک کنید؟ 3 ساله ها !

raravaice
شنبه 19 مرداد 1387, 22:59 عصر
شما از کجا مطمئن هستی که طرف داره از دروازه صفحه login شما وارد میشه؟



تابع isvalida هم تابعی هستش که نام کاربری و پسورد رو با دیتابیس از طریق store procedure تطبیق میده.

سورس این قسمت هم بزارید.


موفق باشید

mokh_pascal_sangesary
شنبه 19 مرداد 1387, 23:49 عصر
شما از کجا مطمئن هستی که طرف داره از دروازه صفحه login شما وارد میشه؟


از اونجا که لوگ فایل دارم و معلومه که از طریق صفحه لوگین وارد سایت شده (من آخرین ورود کاربر رو توی دیتابیس ذخیره میکنم ، همین هفته قبل خودم با نام کاربری خودم سه شنبه وارد شدم و کارم رو انجام دادم و رفتم و جمعه دیدم که تمام اطلاعات نام کاربری من تغییر کرده و یا حذف شده و از دیتابیس هم نگاه کردم و دیدم که از طریق صفحه لوگین پنج شنبه وارد شده بوده و هر بلایی خواسته بر سرو آورده


سورس اون قسمت رو هم بگذار




Private Function isvalida(ByVal emails As String, ByVal pass As String) As Boolean

Dim con As New Data.SqlClient.SqlConnection(System.Configuration. ConfigurationManager.ConnectionStrings.Item("constr").ConnectionString)
con.Open()
Dim dr As Data.SqlClient.SqlDataReader = exe_r_s("user_login", con, emails, pass)
If dr.HasRows Then
con.Close()
Return True
Else
con.Close()
Return False
End If
con.Close()
Return False
End Function


Private Function exe_r_s(ByVal str_sql As String, ByVal conq As Data.SqlClient.SqlConnection, ByVal em As String, ByVal pa As String) As Data.SqlClient.SqlDataReader
Try

Dim com As New Data.SqlClient.SqlCommand(str_sql, conq)
com.CommandType = Data.CommandType.StoredProcedure
com.Parameters.Add("@Parameter_user", Data.SqlDbType.NVarChar).Value = em
com.Parameters.Add("@parameter_pass", Data.SqlDbType.NVarChar).Value = pa
Return com.ExecuteReader(Data.CommandBehavior.CloseConnec tion)
Catch ex As Exception

End Try
End Function




این هم اسکریپت sql



create PROCEDURE [dbo].[user_login]
@u nvarchar(50),
@p nvarchar(50)
AS
select * from users where username=@u and pass_word=@p

KambizZandi
یک شنبه 20 مرداد 1387, 00:03 صبح
به به
آقا اينکه آخرشه
عزيزم شما sql injection رو رعايت کردي آخه
ببين تو sp يه مشکل بزرگ داري
اينکارو بکن:
1- تو sp فقط نام کاربري رو چک و بقيه سطر رو بده تو خروجي
2- تو کدت سطر رو بگير و فيلد رمز اونو با رمزي که کاربرت داده چک کن
يعني از data layer بيارش تو appliation layer
3- نکته مهم: اگر تعداد سطرهاي برگردانده شده بيشتر از 1 بود يعني کاربرت داره inject ميکنه. در اين حالت error بده
همين

raravaice
یک شنبه 20 مرداد 1387, 00:13 صبح
بهتره که برای ورودی هاتون هم یه سورس اضافی بنویسید که بیبینید طرف با چه injection وارد میشه تا علاوه بر گفته های دوست عزیزمون KambizZandi به موراد دیگری هم پی ببرید.

موفق باشید

mokh_pascal_sangesary
یک شنبه 20 مرداد 1387, 00:49 صبح
به به
به به
آقا اينکه آخرشه
عزيزم شما sql injection رو رعايت کردي آخه
ببين تو sp يه مشکل بزرگ داري
اينکارو بکن:
1- تو sp فقط نام کاربري رو چک و بقيه سطر رو بده تو خروجي
2- تو کدت سطر رو بگير و فيلد رمز اونو با رمزي که کاربرت داده چک کن
يعني از data layer بيارش تو appliation layer
3- نکته مهم: اگر تعداد سطرهاي برگردانده شده بيشتر از 1 بود يعني کاربرت داره inject ميکنه. در اين حالت error بده
همين
همين

ممنون . ببخشید که من حرفه ای نیستم و کار عجیب غریبی انجام دادم:خجالت:


ممنون.الان آپ میکنم . یعنی از همین الان میتونم شروع کنم به کل کل با یارو ؟ (ولی اگه باز بتونه وارد بشه این دفعه سایتمو پاک میکنه!!! :افسرده:)

Exception
یک شنبه 20 مرداد 1387, 12:20 عصر
ممنون.الان آپ میکنم . یعنی از همین الان میتونم شروع کنم به کل کل با یارو ؟ (ولی اگه باز بتونه وارد بشه این دفعه سایتمو پاک میکنه!!! :افسرده:)نه، نمیتونی کل کل کنی! چون این تیکه از کدت از اول هم مشکلی نداشته و لازم نبود که چک کردن پسورد رو بیاری تو application layer! دنبال مشکل یه جای دیگه باید بگردی!

اگر مطمینی که طرف از همین صفحه لاگین وارد شده، تمام فیلدهای این صفحه رو هم لاگ کن تا ببینی برای username و password چی زده تا تونسته لاگین بشه.

فقط یه سوال: نمیخواستی قبل از استفاده از email، چک کنی که درست وارد شده یا نه؟

salehbagheri
یک شنبه 20 مرداد 1387, 19:52 عصر
بهترین راه برای جلوگیری از هک شدن، استفاده از کنترل Login خود ASP هست! در ضمن خود مایکروسافت بیان کرده که امنیت فایل ASPNETDB.MDF خیلی بالاست و به همین راحتی کسی نمی تونه هکش کنه!

royaj111111
یک شنبه 20 مرداد 1387, 20:07 عصر
login asp براي من error ميده !!!!!

DotNet_King
یک شنبه 20 مرداد 1387, 23:01 عصر
شاید طرف هاست یکی می خواد سر به سرت بزاره!! تو بانکت یوزر پس ها رو کد کردی ؟