desafio - Inf

Propaganda
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> </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> </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> </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?
Download