SQL注入简单介绍

SQL注入是什么?

​ SQL注入英文名叫SQL Injection,其它啥一大堆东西我就不多说了,大家可以百度、谷歌等等,我就给个维基百科对SQL注入的解释链接,我这里就不详细介绍了。点这里跳转到维基百科

​ SQL注入其实是一种危害极大的web型漏洞,其利用在网页用户可控参数处(如:输入用户名或密码、翻页等)恶意执行网站数据库命令操作,甚至拖(脱)库(跑路)、getshell等,下面我就拿我们常在网页上面输入自己的账号和密码来简单的解释下SQL注入的利用过程。

​ 懂一点web开发的都知道,用户的账号和密码等信息均保存在网站数据库中,当我们在一个网页端输入用户名和密码的时候,其会在后端代码中执行SQL语句,查询数据库中是否有这个用户并与其相对应的密码(当然不像我说的这么简单),其实当我们在进行输入用户名和密码的时候,这里有2个非常关键的点,也是SQL注入必须具备的两点,一个是参数用户可控,也就是我们可以对页面输入一些内容,并且根据我们输入的内容进行改变,第二个就是,参数带入数据库查询,也就是我们在页面输入的这个内容会通过后端代码带入数据库中进行查询,当我们在网页端输入自己的用户名和密码后,我们会点击登录,这个时候后端的代码就会执行其查询用户名和密码的SQL语句,我们就可以在输入用户名的时候做一些小操作,让其可以在输入用户名的时候执行我们特定的SQL语句,以此达到SQL注入攻击,下面我们通过一些操作来理解下攻击过程,这个过程会在后面的sqli靶场中慢慢解析。

-------------------------------------我是分割线 --------------------------------

我们先来到一个网页端的登录界面:
SQL注入简单介绍_第1张图片
这个时候我是没有登录的,我现在有一个账号(用户名:admin,密码:admin),使用这个账户正常登录界面:
SQL注入简单介绍_第2张图片
通过输入正确的用户名和密码我们成功登录,并且在网页中显示了我们登录的用户名和密码,截取登录成功的数据包内容:
SQL注入简单介绍_第3张图片
通过上面2张图片,发现当登录成功,页面将会显示登录的用户名和密码(注意这个是sqli靶场界面,现实中是进入登录界面,这个靶场我将会在后面进行详细讲解)
下面来进行不正常的登录,也就是网上常说的万能密码登录,其实万能密码就是利用SQL注入漏洞进行攻击,我们来构造万能密码admin' or '1'='1 --+这个是我们构造的万能密码,这个我将在后面的sqli靶场解析中解释其构造原理。
这个时候当作不知道用户名密码,但我们知道这个输入口存在SQL漏洞,下面利用万能密码进行登录:
SQL注入简单介绍_第4张图片
我们可以发现,当我们使用构造的万能密码登录,都没输入密码,只需要在用户名处输入构造好的万能密码即可登录,其实我们在输入用户名的时候就恶意构造了一个SQL语句,下面我们来简单的解析下这其中的原理;
上面登录用户和密码的SQL语句为:

SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1

当我们输入正常用户名和密码时的SQL语句:

SELECT username, password FROM users WHERE username='admin' and password='admin' LIMIT 0,1

懂SQL语法的朋友应该恍然大悟,这不就是对数据库内容进行检查嘛,检查users表中是否有username为admin并且password为admin的字段内容;
当我们使用构造的SQL注入操作时,SQL语句为:

SELECT username, password FROM users WHERE username='admin' or '1'='1 --+' and password='' LIMIT 0,1

其实这个时候很多朋友就应该清楚了,--为SQL语句(MySQL)的注释符,+在url中代表空格,因为在Mysql中,使用--注释需要在后面添加一个空格,这个语句的意思就是查询users表是否有username为admin或者1是否等于1(当然这个…不用我们多想),然后注释--后面的内容,是不是非常interesting。
我们可以来看一下在数据库中执行这条SQL语句:
SQL注入简单介绍_第5张图片
非常interesting,非常nice!其实我想说的是我们不是不用输入密码就可以登录,而且可以通过该处进行网站数据库查询,我们可以通过输入用户名这个点,来进行我们想要进行的SQL语句操作,比如拖(脱)裤(跑路)、上传webshell等操作。(当然,用脚趾头想想,现实中肯定不会这么简单,我们将会在后面的sqli靶场中学习各种SQL注入的骚操作)
通过上面的例子,我们对SQL注入的攻击过程和一些简单原理以及进行了大概的了解,现在对SQL注入是否有一定的了解呢。。(当然,初学者可能看不懂为何要这样构造,后面我会一一道来)

SQL注入的一些类型:

SQL注入类型挺多的,我这里就说几个,后面我会通过靶场来带大家判断一个链接是否存在注入以及注入的类型;
常用SQL注入类型:

  • 字符型注入
    • 字符型注入主要是在参数后面添加单引号(')或双引号("),比如上面我们构造的万能密码,其实就是一个字符型注入。
  • 数字型注入
    • 数字型注入主要是在参数后面通过and或者or来进行判断,比如id=1 and 1=1返回的页面不变,构造id=1 and 1=2这个时候页面返回内容改变,就可以判断出这个点存在数字型注入。
  • 盲注(是一个大项,也是现实中遇到最多的注入)
    • boolean注入
      • 布尔盲注,通过字段意思就大概可以知道,盲注盲注,就是你构造了注入语法,页面不会返回任何报错内容,甚至不返回内容,布尔布尔,也就是真或者假,布尔注入,其实就是通过构造注入语法,查看页面返回的内容(后面我将通过靶场解析)
    • 时间注入
      • 主要是通过sleep函数指定页面暂停几秒才进行页面内容显示,比如我让页面暂停5s才返回页面内容,如果页面暂停了5s后返回了内容,说明存在时间注入。
    • 等…
  • 等…
    其实SQL注入还有很多注入类型及操作,那些我们将会在靶场中进行讲解,通过靶场实战让大家更好的理解。

找SQL注入一定要记住两点:

  • 参数用户可控
  • 参数带入数据库查询

仅供学习参考

你可能感兴趣的:(WEB安全,SQL注入,WEB安全,SQL注入)