Challenge 6 - Genome Injection (do livro Hacker's Challenge, de Mike Schiffman) Sintoma do problema: A empresa Godplay, Inc recebeu uma carta anônima de uma pessoa afirmando que roubou vários dados da pesquisa sobre genomas. Acreditando ser um blefe, o diretor da empresa repassou o caso à equipe de segurança, que verificou a seguinte situação: 1. O servidor de SQL somente se conecta ao mundo externo através das portas 25 e 443. 2. Os pesquisadores da Godplay podem fazer consultas à base de dados, https://www.godplay.com/field/index.htm. O código fonte desta página: <html> <head> <title>Godplay Logon</title> <meta http-equiv="Content-type" content="text/html; charset = iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <p><img src="../images/godplaylogo.gif" width="352" height="288"> </p> <p>&nbsp;</p> <p><b><font face="Tahoma" size="2">Welcome to Godplay's Remote Field Data Collection Site. </font></b><br> You are required to log in via this secure site. Please note that all submisions will be recorded, and verifications of field data receipt will be automatically emailed to the address we have on file for your logon.</p> <p>&nbsp;</p> <form name="Logon" method="post" action="https://www.godplay.org/scripts/ Logon.asp"> <p><font face="Tahoma"> <i><b>log on using the following information: </b></i><br> Username <input type="text" name="uname" maxlenght="25"> <br> <br> Password <input type="password" name="pword" maxlenght="25"> <br> </font></p> <p> <input type="submit" name="Submit" value="Submit"> </p> </form> <p>&nbsp;</p> </body> </html> Código fonte do Logon.asp: <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.ConnectionString="Provider=SQLOLEDB.1;Password=GGAAGAAGA;Persist Security Info=True;User ID=SA;Initial Catalog=Genome;Data Source=Gserver1" Conn.Open Set rst= Conn.Execute("select * from userinfo where username = '" & Request.Form("uname") & "' and password = '" & Request.Form("pword") & "'") via If rst.eof then Response.Redirect "badLogon.asp" Else Session("Userid") = rst!userid Session("Fullname") = rst!Fname & " " & rst!Lname Session("LastLogon") = rst!LastLogon Set rst=nothing Set rst=Conn.Execute("Update userinfo set LastLogon = getdate() where userID = " & ServerVariables("Userid")) Response.Redirect "Loadprofile.asp" End if %> Tentando-se um apóstrofe (') no campo de Username, obtém-se a seguinte resposta: Microsoft OLE DB Provider for SQL Server error '80040e14' Unclose quotation mark before the character string '' and Password=''. /scripts/Logon.asp, line 20 Tentando-se ME como Username e um apóstrofe no campo de Password, a resposta é: Microsoft OLE DB Provider for SQL Server error '80040e14' Unclose quotation mark before the character string '''. /scripts/Logon.asp, line 20 Tentando-se ME como Username e ' or 0=0 -- como Password, a resposta fica: Godplay Logon Failed Unknow user: ME Please use the "back" feature of your browser to re-enter your username and password. Questões: 1. O que está ocorrendo? Que tipo de ataque está sendo usado? 2. Existe uma possibilidade de obter uma lista de usuários cadastrados na base de dados? 3. Como um atacante poderia obter o resultado de uma consulta?