Un sito web del mio cliente è stato compromesso da una persona che dichiara di avere ora accesso al database. Dal fatto che questa persona ha inviato una email dicendo "contattami e ti dirò dove si trova il buco" Posso solo sperare che l'accesso sia limitato alla sola lettura.
Ho controllato i log di accesso e ho trovato uno script & variabile di richiesta GET senza escape che consente di passare sonde maligne
L'attacco è iniziato piuttosto spesso:
xxx.xxx.xx.xxx - - [24/Jun/2017:17:29:02 -0600] "GET /x.x?x=2 HTTP/1.1" 200 13785 "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
xxx.xxx.xx.xxx - - [24/Jun/2017:17:29:02 -0600] "GET /x.x?x=2'A=0 HTTP/1.1" 200 181 "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
xxx.xxx.xx.xxx - - [24/Jun/2017:17:29:03 -0600] "GET /x.x?region='0=A HTTP/1.1" 200 181 "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
Quindi segue query come quelle
xxx.xxx.xx.xxx - - [24/Jun/2017:17:29:03 -0600] "GET /x.php?x=(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fcOnCaT(0x217e21,%2f**%2fvErSiOn(),0x217e21))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a) HTTP/1.1" 200 55 "http://x/x.php?x=(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fcOnCaT(0x217e21,%2f**%2fvErSiOn(),0x217e21))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
Da quello che posso vedere, la persona ha una buona idea di come sia il database e il suo contenuto.
Vorrei sapere quale strumento viene utilizzato per generare queste sonde dopo aver trovato un input non protetto, quindi posso eseguirlo personalmente per scoprire l'ambito completo di ciò a cui l'utente malintenzionato avrebbe potuto accedere.
Stiamo parlando di un'app legacy PHP / MySQL senza un'affidabile sanitizzazione dell'input, quindi suppongo che il modo migliore per vedere che cosa c'è che non va sia eseguire uno scanner di sicurezza da solo.
Come posso risolverlo?
Soluzione
Lo strumento che ho richiesto per scansionare quel sito per ulteriori problemi e amp; per provare a sfruttarli & & aggiustarli era sqlmap. Spero che aiuti qualcuno in futuro.