Skip to content

SQLi

Креирати .NET Framework апликацију или ASP.NET веб апликацију која демонстрира рањивост апликација/веб апликација на SQL injection.

  1. Креирајте базу података помоћу SQL Server менаџмент студија под називом TvojePrezimeIme.
Слика 1. Креирање базе података

База података треба да садржи само једну табелу Users која има поља UserID (PK, int), Username (VARCHAR(50)) и Password (VARCHAR(50)). Унесите неколико слогова у базу података.

Слика 2. Креирана табела са неколико унетих слогова
  1. У MS Visual Studio додајте конекцију ка креираној бази података, па креирајте нову .NET Framework апликацију.
Слика 3. Додавање конекције

Апликација треба да демонстрира безбедан начин креирања SQL упита користећи параметре и небезбедан начин где се цео упит формира као стринг. Предлог како апликација може да изгледа:

Слика 4. Безбедно – упит је креиран са параметрима наведеним у textBox1 и textBox2 (стање dataGridView1, резултат dataGridView2)
Слика 5. Небезбедно – упит је креиран као стринг са вредностима из textBox3 и textBox4 (стање dataGridView3, резултат dataGridView4)

usp_Domaci

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Domaci]
@akcija AS INT = NULL,
@uName AS NVARCHAR(50)=null, 
@uPass AS NVARCHAR(50) = null AS
 
IF(@akcija=0)
BEGIN
SELECT U.Username, U.Password FROM Users AS U
END

IF(@akcija=1)
BEGIN
SELECT U.Username, U.Password FROM Users AS U
WHERE U.Username=@uName AND U.Password=@uPass
END

Konekcija.cs

using System.Data;
using System.Data.SqlClient;

namespace Domaci
{
    class Konekcija
    {
        public static SqlCommand GetCommand()
        {
            SqlConnection con = new SqlConnection("Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Domaci;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            return cmd;
        }
    }
}
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Domaci
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            PrikaziStanje();
        }

        private void PrikaziStanje()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "usp_Domaci";
            cmd.Parameters.AddWithValue("@akcija", 0);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            try
            {
                cmd.Connection.Open();
                da.Fill(dt);
                dataGridView1.DataSource = dt;
                dataGridView3.DataSource = dt;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                cmd.Connection.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string uName = textBox1.Text;
            string uPass = textBox2.Text;
            UlogujSe(uName, uPass);
            PrikaziStanje();
        }

        private void UlogujSe(string uName, string uPass)
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "usp_Domaci";
            cmd.Parameters.AddWithValue("@akcija", 1);
            cmd.Parameters.AddWithValue("@uName", uName);
            cmd.Parameters.AddWithValue("@uPass", uPass);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            try
            {
                cmd.Connection.Open();
                da.Fill(dt);
                dataGridView2.DataSource = dt;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                cmd.Connection.Close();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string uName = textBox3.Text;
            string uPass = textBox4.Text;
            string cmd = "SELECT Username, Password FROM Users WHERE Username = '" + uName + "' AND Password = '" + uPass + "'";
            SqlConnection con = new SqlConnection("Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Domaci;Integrated Security=True");
            SqlDataAdapter da = new SqlDataAdapter(cmd, con);
            DataTable dt = new DataTable();
            try
            {
                con.Open();
                da.Fill(dt);
                dataGridView4.DataSource = dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                con.Close();
            }
        }
    }
}