SQL — INJECTION Урок 2. SQL — инъекции в ASP.NET 2.2

Таблица News содержит три поля: ID, Title и Text, также как и в предыдущем уроке. Попробуем начать атаку SQK инъекцией на эту страницу. Для начала проверим отображаются ли ошибки на сервере. Для этого добавим кавычку после id. В зависимости от настроек сайта вам либо отобразиться, либо нет информация об ошибке, но так как я работаю под localhost в Visual Studio, то все ошибки мне отображаются. Дальше попробуем вместо номера просунуть какое — нибудь вычисляемое выражение. Например 1+1 Мы видим, что ASP.NET выводит ошибку, а символ плюса куда — то делся, соответственно запрос стал неверным с точки зрения sql. Попробуем другое выражение со знаком минус, например 2-1. Запрос выполнился отобразив новость с id = 1. То, что у нас сработала данная подстановка свидетельствует о наличии sql инъекции на данной странице. Продолжим процесс исследования сайта на предмет внедрения sql кода. Для этого попробуем узнать сколько параметров отображается. Попробуем как и в предыдущем уроке выяснить это с помощью UNION. Для этого попробуем объединить null. Тогда наш параметр будет иметь вид: id=-1 UNION SELECT null
Мы получаем ошибку исполнения. Нам говорят о том, что использовать null плохо. На всякий случай попробуем три null(так как у нас три параметра передается в select запросе). И опять нас ждет такая же ошибка. Попробуем заменить null на 1. В этом случае нам придется чуть чуть поиграться с параметрами, подобрав все так, чтобы там, где находиться число единица была без кавычек, а где строковой в кавычках. Для того, чтобы вывести три единицы на странице нужно передать следующий параметр:id=-1 UNION SELECT 1, ‘1’, ‘1’
Теперь вместо двух строковых полей выведем не единицы, а имя и пароль из таблицы Users:id=-1 UNION SELECT 1, Name, Password FROM Users
Теперь злоумышленник сможет узнать все имена и пароли пользователей.
Создадим страницу на которой пользователь сможет регистрироваться. Она будет состоять из двух текстовых полей и кнопки зарегистрироваться.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table>
    <tr>
    <td>Login</td>
    <td><asp:TextBox ID="tbLogin" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>Password</td>
    <td><asp:TextBox ID="tbPassword" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>
    <asp:Button ID="btnRegistr" runat="server" Text="Reg" onclick="btnRegistr_Click" />
    </td>
    <td>
        <asp:Label ID="lblInfo" runat="server" Text="Label"></asp:Label>
    </td>
    </tr>
</table>

При регистрации нового пользователя опять воспользуемся сложением строк. Тогда наш запрос будет иметь следующий вид:

1
INSERT INTO Users (Name, Password, ROLE) VALUES (myname, mypassword, 0)
1
2
3
4
5
6
7
8
protected void btnRegistr_Click(object sender, EventArgs e)
{
    string connectionString = WebConfigurationManager.ConnectionStrings["ourBase"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);
    SqlCommand command = new SqlCommand("INSERT INTO Users (Name, Password, ROLE) VALUES ('" + tbLogin.Text + "', '" + tbPassword.Text + "', 0)", con);
    con.Open();
    lblInfo.Text = command.ExecuteNonQuery().ToString();
}

Label на этой странице показывает количество записей, которое было вставлено. Попробуйте сами найти и использовать уязвимость на этой странице.
В следующем уроке мы узнаем как защититься от этих уязвимостей и попробуем найти новые, чтобы злоумышленники не смогли эксплуатировать наши сайты.

Категория: SQL — INJECTION | Добавил: ghost_mod (29.09.2016)
Просмотров: 426 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Подписка:1
Код *: