webForumDet fria alternativet

Sida hackas hela tiden med Sql injections?

24 svar · 1 974 visningar · startad av evilaid

evilaidMedlem sedan apr. 2009433 inlägg
#1

Hej

Jag gjorde en lite sida som en kul grej för några år sedan, när jag tittade på sidan igår så visade det sig att databasens innehåll har ersatts med massa reklamlänkar och skit..

Jag tömde databsen igår och lade upp nytt material men idag är det någon som på nytt har kört sql injections?

på alla request så kör jag replace av "/" och " ' ".. Så hur kan dom återigen göra sql injections? Konstiga är att dom inom loppet av 12 timmar efter att jag gjort ordningen det återigenen kört sql injections.. kan någon ligga och bevaka sidan, jag menar sidan har i princip inga besökare i dagsläget?

Tacksam om någon kan se vilket hål dom använder eller ge red var jag ska börja leta..
Sidan är https://www.halmstadlunch.se

Mvh

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Helst bör du använda inbyggda saneringsdfunktioner om sådana finns. Exempelvis mysql_real_escape_string om du hade använt PHP och MySQL. (Vilket du ju nu inte gör.)

Rengör du all data? Även inloggningsformuläret t ex? Kan vara så att hackarna tar sig in den vägen och sedan postar länkar och skit inloggade.

På de "hemliga" sidorna, kollar du ordentligt att användaren har en giltig session innan du tillåter denna att posta? Kan vara så att hackaren på något sätt har listat ut vad dessa filer heter och postar utan att ens vara inloggad.

Generellt sett bör du alltid sätta fnuttar runt all användardata, även om det handlar om ett nummer. Finns inte fnuttarna kan man t ex mata in följande där det ska vara ett nummer:

1 OR 1=1

Detta resulterar i den giltiga frågan

SELECT * FROM users WHERE id = [U]1 OR 1=1[/U]

Alltså, antingen ska id = 1 vara sant, eller så ska vara 1=1 vara sant, och eftersom 1=1 är sant returneras alla rader. Om rad 1 innehåller en användare med högre åtkomst och bara den första raden i resultatet (som antas vara den enda) används, så loggas användaren som denna. Och allra bäst är att utöver det kolla att det som matas in är ett nummer innan du ens utför databasfrågan.

Detta kanske inte är applicerbart direkt på ditt fall, men det är en liten inblick i vilken typ av attacker som finns och vad man måste tänka på.

Du kan även logga alla databasfrågor, av alla typer, precis som de skickas i databasen. På så vis kanske du kan få ledtrådar om var felet ligger. Detta är enklast om du har en egen funktion som allar anrop går igenom så att du är säker på att du inte glömmer något anrop någonstans. Detta är prestandakrävande och bör absolut inte lämnas på på en sida i skarp drift, men kan hjälpa i ett fall som ditt.

Och ja, spammarna har nog automatiska kontroller. Vad de är ute efter är itne att dina besökare ska klicka på länkarna, utan att Google ska se länkarna och placera de sidor som det finns länkar till högre bland resultaten.

evilaidMedlem sedan apr. 2009433 inlägg
#3

Okey, tack för svaret..

Glömde nämna att jag använder MSSQL :)

Jag har ju en funktion för att köra replace på alla enkelfnuttar till två enkel fnuttar istället och detsamma för /...

Jag kör även alltid med fnuttar i alla databasfrågor oavsett variabeltyp..

Jag läste på lite olika sidor om sql injections och prövade lika olika modeller men jag fick då inte ut något från databasen?
Kör också alltid med session på alla sidor för validering..

hade varit kul om någon skulle kunna hitta "ingången" då jag har gått igenom alal sidor utan att hittat något?

Det är ju igentligen bara default sidan och inloggningssidan som borde vara aktuella.. Dom har ju lyckats peta in skit i 3 olika tabeller också och för att göra det måste dom nästan varit inloggade på sidan så felet borde ligga på inloggnignssidan men jag lyckas inte ta mig in den vägen?

clarkbonesMedlem sedan feb. 20013 023 inlägg
#4

Såg något fall där hackarna använt hexidecimala tecken för att komma runt enkla replace-funktioner.

evilaidMedlem sedan apr. 2009433 inlägg
#5

oj, det lät avancerat.. det har jag inte hittat något om faktiskt..

Kul ändå att den här sidan ändå fått sånt intresse att dom vill hacka den :)

@ndersMedlem sedan juni 200032 969 inlägg
#6

Du gör INTE replace på alla requests.

http://www.halmstadlunch.se/default.asp?todo=lunch&restid=68'&name=admin
http://www.halmstadlunch.se/om_Halmstad_lunch.asp?todo=lunch'&what=about

De här tog mig 20 sekunder att hitta.

@ndersMedlem sedan juni 200032 969 inlägg
#7

Jag hade använt parameteriserade frågor i koden.

http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

evilaidMedlem sedan apr. 2009433 inlägg
#8

@anders

Tänker jag fel, jag ersätter ju alla enkelfnuttar med två enkelfnuttar... Men felet blir ju samma om jag använder två enkelfnuttar?

Gick igenom allt igår och det borde vara replace på alla ställen..
är det bättre att ta bort alla fnuttar instället för att ersätta med 2 st?

Det felet man får fram, jag ser itne att man kan få fram något av det? eller :)

läser lite om parameteriserade frågor i koden.

@ndersMedlem sedan juni 200032 969 inlägg
#9

Om du gör replace överallt som du sägler - då borde du inte få incorrect syntax-fel, utan snarare andra felmeddelanden. Får vi se koden?

Annars känns det som att det är en ny sida - så då är mitt tips att göra om och göra rätt. Det tjänar du på! :)

evilaidMedlem sedan apr. 2009433 inlägg
#10

yes jag kollar på det när jag kommer hem sen så kan jag visa koden också.. satt nämligen igår och gick igenom koden för att kolla såa tt jag hade replace på alla men jag har kanske missat något...

Du, är det någon skillnad om jag kör replace och ersättar med dubbla tecken eller kan jag bara köra replace och ta bort fnuttar och slash'es ?
tack för hjälpen..

@ndersMedlem sedan juni 200032 969 inlägg
#11

Skillnaden är att det är rätt att escape:a och fel att ta bort. :)

evilaidMedlem sedan apr. 2009433 inlägg
#12

:bire:)

evilaidMedlem sedan apr. 2009433 inlägg
#13

Helt otroligt, nu är det tredje gången innehållet i databasen raderas och fylls upp med reklamlänkar, verkar som att dom kör en update någonstans för det läggs inte till några nya rader i någon tabell??

nu har jag kollat igenom alla replace och provar man denna adressen

http://www.halmstadlunch.se/default.asp?todo=lunch&restid='72&name=Tylebäck

så får man ett fel som hänvisar till denna kod bit:

                        
SQL = "SELECT namn, keywords, descript FROM HL_rest where id='"&FriendlySQL(request.QueryString("restid"))&"' AND site ='"&siteIS &"'"
Set db = connect.execute(SQL)

Detta är replace funktionen:

Function FriendlySQL(Variabel)
FriendlySQL(reuqest.querystring("pwd"))
    strNewSql = Replace(Variabel, "'", "''")
    strNewSql = Replace(strNewSql, "\", "\\")
    FriendlySQL = strNewSql
End Function

Läste en del om parameteriserade frågor och det är väll melodin man sjunga framöver men det hade ju varit kul att få stopp på det på denna sidan utan att göra om allt just nu..

@ndersMedlem sedan juni 200032 969 inlägg
#14

evilaid skrev:

nu har jag kollat igenom alla replace och provar man denna adressen

http://www.halmstadlunch.se/default.asp?todo=lunch&restid='72&name=Tylebäck

så får man ett fel som hänvisar till denna kod bit:

Jo, men det har ingen betydelse. Det blir samma sak om du lägger dit vilken bokstav som helst. Det är inte ett fel du behöver oroa dig för.

Om jag vore du skulle jag gå igenom loggarna för att se hur saker och ting sker.

evilaidMedlem sedan apr. 2009433 inlägg
#15

Okey.. Nu ligger detta på binero och jag har kollat kontrollpanelen, verkar inte som att man har tillgång till några loggar?

Fattar inte vad dom gör, nu senast inatt så var innehållet i databasen utbytt?

@ndersMedlem sedan juni 200032 969 inlägg
#16

Om du inte lyckas hitta loggarna i kontrollpanelen så föreslår jag att du ringer till Bineros support så de kan hjälpa dig att ta fram loggarna. Loggar är ovärderligt i dylika sammanhang.

mvh

nitro2k01Medlem sedan aug. 20039 342 inlägg
#17

Jag var i kontakt med Bineros support för ett par månader sen ang. http-loggar, och de sa de mer eller mindre att det inte funkade för tillfället och att de jobbade på att få det att funka. Du kan prova att kontakta supporten och se om de kan få fram loggarna.

evilaidMedlem sedan apr. 2009433 inlägg
#18

yes pratade med binero igår och dom bad mig skicka in ett ärende till dom.. Dom kunde inte lova något men dom skulle kolla på det..

En annan sak jag kom och tänka på nu, jag har ju ingen felhanteringsrutin i min kod nu, det jag läst om sql injections bygger ju mycket på att man i dom felmeddelanden som sidan spottar ur sig kan få information om databasen som man sedan kan bygga vidare på för att lyckas med sina injections..

Borde inte en enkel grej som försvårar vara att ta hand om alla felmmedelanden och bara skriva ut ett eget meddelande som itne säger något om just databasen??

@ndersMedlem sedan juni 200032 969 inlägg
#19

ASP är ganska kass ur felhanteringssynpunkt (ASP är ganska kass på det mesta om man tänker efter. ;) ). Jag är inte helt säker på att det hjälper att lägga till felhantering - det är ofta botar som utför sql injection-attacker.

on error resume next

' kod som kan generera fel

if err.number <> 0 then
     ' iiih - funka inte!!!
else
     ' weee - funka!!!
end if
err.clear
on error goto 0
evilaidMedlem sedan apr. 2009433 inlägg
#20

Okey tack och tack även för exemplet.. Men även en bot borde väll få samma meddelande eller? Allt är ju exekverat på servern så det borde väll inte komma med något annat än mitt valda felmeddelande typ " iiih - funka inte!!!" :)

Sen har ju någon påpekat detta med .NET osv :)
Men trad asp är ju faktiskt väldigt smidigt, jag tycker ju fotfarande att det känns som att man har mer kontroll med trad asp... Men jag har köpt ett gäng böcker så jag ska försöka...

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)