webForumDet fria alternativet

Säkerhetshål

ASP

14 svar · 814 visningar · startad av Astro69

Medlem sedan feb. 200524 inlägg
Frågan#1

Hej!

Jag har en community kåd i ASP som av en eller annan anledning finns det säkerhetshål!

En kille reggade sig som test o sen hadde jag ett mail där han skrev att han lyckades komma åt min databas som är MySQL o byta lösenordet på admin kontot.

Så nu undrar jag hur får man reda på väg kan han ha kommit in.

Är det nån som kan hjälpa mig?

Medlem sedan okt. 20041 556 inlägg
#2

Sök på *injection* eller sql-injection i detta forum

Medlem sedan feb. 200524 inlägg
#3

Travoni skrev:

Sök på *injection* eller sql-injection i detta forum

Tackar för det snabba svaret du gav mig! Jag ska söka det på en gång!

Medlem sedan feb. 200524 inlägg
#4

Travoni skrev:

Sök på *injection* eller sql-injection i detta forum

Så! Nu har jag kollat runt o ett ställe jag hittade om detta va just på http://www.sakerkod.se/sql-injection.html men jag måste erkänna at jag fattade 0

Kan nån beskriva närmare på hur kåden ska vara?

Blir snurrig. :x

Medlem sedan dec. 2005655 inlägg
#5

Du kan ha osäker kod så att man kan manipulera strängar och dylikt, och på så vis "lura" databaskopplingen att hämta annan data. Tecknet ' är väl det som brukar sabba för de flesta.

Medlem sedan feb. 200524 inlägg
#6

Jag kan ta ett exempel där jag tror att det är värst om jag har förståt det rätt!

<%
DT = Now()
myArray = Conn.Execute("Select U.status,A.active_check,U.userid From sidan_users U, sidan_active A Where A.userID=U.userId").GetRows()
For i = 0 To ubound(myArray,2)
  'If myArray(0,i) = 1 AND Isnull(myArray(1,i)) Or myArray(1,i)="" Then
  '  Conn.Execute("Update sidan_users Set status=0,humor=0 Where userid=" & FixaTecken(myArray(2,i)))
  '  Conn.Execute("Update hellas_active Set status_var='Ej inloggad' Where userid=" & FixaTecken(myArray(2,i)))
  'End If
  If myArray(0,i) = 1 AND DateDiff("n", myArray(1,i), DT) > 45 Then
    Conn.Execute("Update sidan_users Set status=0,humor=0 Where userid=" & FixaTecken(myArray(2,i)))
    Conn.Execute("Update sidan_active Set status_var='Ej inloggad' Where userid=" & FixaTecken(myArray(2,i)))
  End If
Next	

Response.Cookies("sidanUser") = Trim(Request.Form("anvnamn"))
Response.Cookies("sidanUser").Expires = date + 365

Set IPBlock=Conn.Execute("Select IPnr From sidan_ipblock Where IPnr='" & FixaTecken(Request.Servervariables("REMOTE_ADDR")) & "'")
If IPBlock.EOF Then
  Set RecSet=Conn.Execute("Select active,userId,anvnamn,pass From sidan_users where anvnamn='" & FixaTecken(Request.Form("anvnamn")) & "'")
    If Not RecSet.EOF Then
      Set Block=Conn.Execute("Select slutdatum,user From sidan_comblock Where slutdatum > '" & FixaTecken(DT) & "' And user=" & FixaTecken(RecSet(1)))
        If Block.EOF Then
          If Request.Form("pass") = RecSet(3) Then
            If RecSet(0)=1 Then
              Conn.Execute("Update hellas_users Set senast=current_timestamp,status=1,inloggningar=inloggningar+1 Where userID=" & FixaTecken(RecSet(1)))
              Conn.Execute("Update sidan_active Set active_check=current_timestamp Where userID=" & FixaTecken(RecSet(1)))

              Conn.Execute("Insert Into sidan_inloggningar(user,date,ip) Values(" & FixaTecken(RecSet(1)) & ",current_timestamp,'" & FixaTecken(Request.Servervariables("REMOTE_ADDR")) & "')")
              Session("sidan_session")  = Secure
              Session("aktivTime") = Now()
              Session("user_id")   = RecSet(1)
              Session("anvnamn")   = RecSet(2)
              Session("cUsername") = RecSet(2)
              Session("min")       = now()
              Session.TimeOut      = 500
              Block.Close:Set Block=Nothing
              RecSet.Close:Set RecSet=Nothing
              IPBlock.Close:Set IPBlock=Nothing
              Conn.Close:Set Conn=Nothing
              Response.Write "<script language=Javascript>"
              Response.Write "top.location.href='default.asp';"
              Response.Write "</script>"
            Else
              Block.Close:Set Block=Nothing
              RecSet.Close:Set RecSet=Nothing
              IPBlock.Close:Set IPBlock=Nothing
              Call AlertUserAndRedirect("Kontot är inte aktiverat genom länken du \nfick i mailet när du blev medlem!","default.asp") 
            End If
          Else
            Block.Close:Set Block=Nothing
            RecSet.Close:Set RecSet=Nothing
            IPBlock.Close:Set IPBlock=Nothing
            Conn.Close:Set Conn=Nothing
            Response.Write "<script language=Javascript>"
            Response.Write "alert('Du skrev fel lösenord!');"
            Response.Write "self.location.href='default.asp';"
            Response.Write "</script>" 	
          End If
        Else
          Block.Close:Set Block=Nothing
          RecSet.Close:Set RecSet=Nothing
          IPBlock.Close:Set IPBlock=Nothing
          Call AlertUserAndRedirect("Du är blockad från sidan t.o.m " & Block(0) & "!","default.asp") 
        End If
    Else
      RecSet.Close:Set RecSet=Nothing
      IPBlock.Close:Set IPBlock=Nothing
      Call AlertUserAndRedirect("Anvnamnet finns inte! Kanske har \ndu inte loggat in på 2 månader?","default.asp") 
    End If
Else
  IPBlock.Close:Set IPBlock=Nothing
  Call AlertUserAndRedirect("Ditt IP-nummer " & Request.Servervariables("REMOTE_ADDR") & " är blockat!","default.asp") 	
End If
%>

Så vad ska ändras o finns det en lucka här? Om inte var kan man hitta den?

Medlem sedan mars 20025 907 inlägg
#7

GAOH!
Snälla, inneslut din kod inom [kod]-taggarna när du postar kod. Det blir så väldigt mycket enklare att läsa då.

På flera ställen anropar du funktionen FixaTecken(), hur ser den ut? Det låter som den gör precis det som det tipsats om i tråden, dvs "fixar" till tecknet ' så att det blir ofarligt.

Medlem sedan feb. 200524 inlägg
#8

Peeer skrev:

GAOH!
Snälla, inneslut din kod inom [kod]-taggarna när du postar kod. Det blir så väldigt mycket enklare att läsa då.

På flera ställen anropar du funktionen FixaTecken(), hur ser den ut? Det låter som den gör precis det som det tipsats om i tråden, dvs "fixar" till tecknet ' så att det blir ofarligt.

Jag sökte nu med min notepad o fann en massa hmmm
en av raderna va

viewfile.asp (64):                Conn.Execute("Update sidan_galleri_besok Set datum=current_timestamp,antal=antal+1 Where bildId=" & Int(FixaTecken(Request.QueryString("id"))) & " And besokar_id=" & FixaTecken(Session("user_id")))

Jag hittade 1180 st

Hur gör jag nu då?

Medlem sedan jan. 20023 327 inlägg
#9

Posta koden till funktionen FixaTecken, om den är taskigt skriven så är det högst sannolikt att problemet ligger där.

Medlem sedan feb. 200524 inlägg
#10

Jag har kollat o kan fortfarande inte fatta vad jag ska leta efter o vad jag ska göra åt det!
Hittade det som beskrevs här ovan "FixaTecken" o det fanns en massa sådarna ställen!
Men vad ska jag kolla i samband med det o göra vad sen?

Medlem sedan okt. 20041 556 inlägg
#11
Function FixaTecken(ByVal sString)
	FixaTecken = Replace(Replace(trim(sString), "'", "''"),"\","/")
End Function

Conn.Execute("Update sidan_galleri_besok Set datum=current_timestamp,antal=antal+1 Where bildId=" & FixaTecken(Request.QueryString("id")) & " And besokar_id=" & Session("user_id")),,128
Medlem sedan feb. 200524 inlägg
#12

I en fil som heter settings.asp så finns bland annat denna kod!
o alla filerna har settings.asp som inc

function FixaTecken(value)
    done = replace(trim(value), "'", "''")
    done = replace(done, "\", "\\")
    FixaTecken = done
end function

Är det då klart eller behöver jag göra mer?

Jag är orolig att det kan finnas mer som är fel i säkerheten men hur skyddar man sig mot intrång?

Det vore bra om man kunde få veta hur man går till väga för att göra intrång för att förstå lättare hur man kan skydda sig!

Jag har en fil som heter funktion.asp där jag har en känsla att det finns hål i dem med!

Återkommer med den kodningen!

Medlem sedan feb. 200524 inlägg
#13
<%
'## -- DB METHODS --
Function GetDbRows(query)
	If Len("" & query) = 0 Then Exit Function
	Dim rstTemp
	Set rstTemp = CONN.Execute(query)
		If Not rstTemp.EOF Then GetDbRows = rstTemp.GetRows()
		rstTemp.Close
	Set rstTemp = Nothing
End Function

Function ExecuteScalar(query)
	If Len("" & query) = 0 Then Exit Function
	Dim rstTemp
	Set rstTemp = CONN.Execute(query)
		If Not rstTemp.EOF Then ExecuteScalar = rstTemp(0)
		rstTemp.Close
	Set rstTemp = Nothing
End Function

Function CountMembersBySex(sex)
	Dim queryCount
	queryCount = "Select Count(*) From astro_users Where active=1 and kon=" & sex
	CountMembersBySex = CONN.Execute(queryCount).Fields(0)
End Function

Public Function CountMemberAgeRange(startYear, endYear, sex)
	CountMemberAgeRange = CONN.Execute("Select count(*) From astro_users Where kon= " & sex & " And ar Between " & startYear & " And " & endYear).Fields(0)
End Function

Sub ForumBlock()
	CONN.Execute("Update astro_active Set active_check=current_timestamp Where userid=" & Session("user_id"))
End Sub

Sub SetUserLastActivityTime()
	CONN.Execute("Update astro_active Set active_check=current_timestamp Where userid=" & Session("user_id"))
End Sub

Sub SetMemberLocation(location)
	CONN.Execute("Update astro_active Set status_var='" & location & "' Where userid=" & Session("user_id"))
End Sub

'## -- END DB METHODS --

detta är halva funktion om ens det!
Jag har blivit blind tror jag på att glo o söka efter fel men ser ni nån säkerhetshål i denna???

Medlem sedan feb. 200524 inlägg
#14

Om det ät Tecknet ' som är boven i det hela, vad skall jag ersätta den med?

Ett exempel som finns är att i början av en kod så finns dena tecken '

'## -- DB METHODS --
Function GetDbRows(query)
	If Len("" & query) = 0 Then Exit Function
	Dim rstTemp
	Set rstTemp = CONN.Execute(query)
		If Not rstTemp.EOF Then GetDbRows = rstTemp.GetRows()
		rstTemp.Close
	Set rstTemp = Nothing
End Function bla bla bla

är den betydelsefull eller är det dem tecken i själva skriptet?

Medlem sedan apr. 20031 660 inlägg
#15

HEJ!

' (även kallad fnutt) i början av en rad betyder att det är en kommentar i vb-script.

Klargörande:
Du SKA ha funktionen FixaTecken, det är INTE den som är problemet, det är lösningen!

Den används så att på varje ställe där du tar emot data som användaren kan lägga till via tex formulär, lägger du den runt värdet, precis som du gjort, för att plocka bort eventuellt skadlig kod.

Du behandlar även en del data från sessioner i bifogade funktioner, och jag vet inte om man kan komma åt att ändra dessa.

269 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)