Tjenare.
Jag använder ASPupload som komponent och det har nu visat sig att det går att utnyttja detta till att bli admin. Killen sade att han laddade upp ASP eller PHP-kod för att manipulera sig själv och bli admin. Har nu letat som ingen annan efter en lösning på problemet - utan resultat.
Det jag vill göra är att alltså ENDAST tillåta .gif och .jpg-mime för att förhindra att detta sker. Sidan ligger tillfälligt uppe på IIS5 då min andra server krashade och IIS5 är nästan oanvändbart.
Hur gör jag detta i ASPupload-koden?
Tacksam för svar. // SlewME
Låt helt enkelt bli att spara filer med andra filslut än .gif, .jpg och .jpeg.
Visste att jag skulle varit tydligare i min tråd. Det har inte med saken att göra, självklart har jag sett till att andra filer än dessa inte ska sparas. MEN ASPupload läser av filers mime-typ och lägger upp filen på servern samt tar bort den om det är fel filtyp.
Detta skrev han på MSN till mig;
"Spoofad MIME-typ + extension med ASP eller PHP == exekvera kod på servern"
"Problemet är att scriptet litar på MIME-typen"
"Finns två lösningar, enkla och svåra. Typ."
"Enkla är att neka servern att servera allt som slutar på .asp eller .php ifrån katalogen som filer uppladdas till."
"Svåra är att kolla direkt i scriptet."
Vill alltså få ett SVAR på hur jag löser detta? Dvs. antingen neka .asp/.php eller att bara acceptera en viss mime-typ.
Då är det ju löst. Så länge filslutet inte är något annat än de nämnda så har du inget problem. Filens mime-typ är ointressant.
Tror inte att du hänger med? Eller så är jag kass på att förklara.
Allt är som det ska vara MEN han kan ändå ladda upp .asp eller .php-filer. Dvs. det går att gå runt, vilket jag har försökt att komma fram till många gånger i mina tidigare trådar.
<%
If Request.Querystring("do") = "bild" Then
Set connect = Server.CreateObject("ADODB.Connection")
connect.open "driver={MySQL ODBC 3.51 Driver};server=localhost;uid=***;pwd=***;database=***"
Set ObjRS = Server.CreateObject("adodb.recordset")
strSQL = "SELECT * From bildkey Where userid = "&CLng(session("id"))
Set ObjRS = Connect.Execute(strSQL)
Set Upload = Server.CreateObject("Persits.Upload.1")
On Error Resume Next
Upload.SetMaxSize 614400, True
Upload.OverwriteFiles = True
Upload.Save "C:\Inetpub\wwwroot\***\***\bilder\"
NewName = ObjRS("key")
If Err.Number = 8 Then
Session("message") = "Tyvärr så är bilden är större än tillåtet, max 600kb!"
Response.Redirect "index.asp?s=laddaupp&id=" &Request.Querystring("id")
Else
If Err <> 0 Then
Session("message") = "Ett fel uppstod, var god försök igen."
Response.Redirect "index.asp?s=laddaupp&id=" &Request.Querystring("id")
Else
Session("message") = "Din bild är uppladdad"
End If
End If
Set File = Upload.Files("File")
For Each File In Upload.Files
If File.ImageType <> "GIF" and File.ImageType <> "JPG" Then
Session("message") = "Du kan bara ladda upp .jpg och .gif-filer"
File.Delete
Response.End
END IF
File.Copy "C:\Inetpub\wwwroot\***\***\bilder\" & NewName & File.ext
File.Delete
strSQL = "UPDATE members Set bild = 'bilder/"&NewName&File.ext&"', confirm = '0' where id ="&CLng(Request.Querystring("ID"))
Connect.Execute(strSQL)
Session("message") = "Din bild är uppladdad"
Response.Redirect "index.asp?s=laddaupp&id="&session("id")
Next
End IF
%>
1. På raden med Upload.Save(....) sparas alla uppladdade filer på disken. Spara i minnet (genom att inte ange en sökväg) eller på en icke-webbåtkomlig plats i stället, annars kan filer bli kvar om något går snett i ett senare skede.
2. Använd "File.ext" för att kontrollera filtypen
3. Om formuläret (kanske ett spoofat formulär) tillåter flera filer så kommer alla utom den första felaktiga att ligga kvar, eftersom Response.End avslutar loopen
Läs vad emission skriver. Du börjar ju med att spara alla uppladdade filer på disken. Spara inte filen på disk förrän du kontrollerat att filen är av rätt typ.
Läs vad emission skriver. Du börjar ju med att spara alla uppladdade filer på disken. Spara inte filen på disk förrän du kontrollerat att filen är av rätt typ.
Läste det. Har gjort så nu,
<%
IF Request.Querystring("do") = "bild" THEN
Set connect = Server.CreateObject("ADODB.Connection")
connect.open "driver={MySQL ODBC 3.51 Driver};server=localhost;uid=***;pwd=***;database=***"
Set ObjRS = Server.CreateObject("adodb.recordset")
strSQL = "SELECT * From bildkey Where userid = "&CLng(session("id"))
Set ObjRS = Connect.Execute(strSQL)
Set Upload = Server.CreateObject("Persits.Upload.1")
On Error Resume Next
Upload.SetMaxSize 614400, True
Upload.OverwriteFiles = True
Upload.Save
NewName = ObjRS("key")
if Err.Number = 8 Then
Session("message") = "Tyvärr så är bilden är större än tillåtet, max 600kb!"
Response.Redirect("index.asp?s=laddaupp")
Else
If Err <> 0 Then
Session("message") = "Ett fel uppstod, var god försök igen."
Response.Redirect("index.asp?s=laddaupp")
Else
Session("message") = "Din bild är uppladdad"
End If
End If
Set File = Upload.Files("File")
For Each File In Upload.Files
If File.ImageType <> "GIF" and File.ImageType <> "JPG" Then
Session("message") = "Du kan bara ladda upp .jpg eller .gif bilder"
Response.Redirect("index.asp?s=laddaupp")
File.Delete
Response.End
END IF
File.SaveAs "C:\Inetpub\wwwroot\***\inne\bilder\" & NewName & File.ext
strSQL = "UPDATE members Set bild = 'bilder/"&NewName&File.ext&"', confirm = '0' where id ="&CLng(session("ID"))
Connect.Execute(strSQL)
Session("message") = "Din bild är uppladdad"
Response.Redirect("index.asp?s=laddaupp")
Next
End IF
%>
Bör alltså inte gå att göra som han gjorde tidigare nu ?