无标题文章

  • 首先搭建dvwa环境************下载地址************

    无标题文章_第1张图片
  • 下面是mac下平台的配置(mac+apache+mysql+php=mamp):





  • 然后是平台配置文件../config/config.inc.php:


    无标题文章_第2张图片


  • 平台账号/密码:admin/password
    首次访问install.php
    然后观察各项配置是不是绿色权限通过,如发现不是就进入目录设置一下文件权限和php配置即可。最后安装数据库。
    然后登入后把security等级调到low
    我们看注入测试的练习
    首先一些基础的sql语句可以上这边获知:********click-me********
    下面我们看下select的一个非常容易理解的特性,也就相当于某些程序语言的echo:

    无标题文章_第3张图片

    无标题文章_第4张图片
  • 这个时候应该使用select比之前更加性感了对不!
    我们开始一些基础查询先了解下dvwa的数据库:


    无标题文章_第5张图片

    无标题文章_第6张图片

    无标题文章_第7张图片
  • 我们开始测试:


    无标题文章_第8张图片
  • 这里我们输入“1”,看到他返回三行,一行是id,一行是first name,一行是username


    无标题文章_第9张图片
  • 这时候的url栏变成了如下:


  • 那么我们手动修改这个id=2的时候,url和页面变成了:


    无标题文章_第10张图片
  • 那么很显然可以推测,这里传入数据库查询的参数“id”是可控的不?所以这边当前状态我们可以疑似发掘了一个注入点,我们提交单引号看下结果:


    无标题文章_第11张图片

    无标题文章_第12张图片
  • 那么这个php页面的查询语句我们也来追根溯源看一下:


    无标题文章_第13张图片
  • 他的语句是:select first_name,last_name from users where user_id='';
    那么我们提交的"1'"就会变成:select first_name,last_name from users where user_id='1'';
    显然多了一个单引号造成了不闭合,查询自然出错了。
    这里我们在普及几个查询语句的tip:
    无标题文章_第14张图片
  • 不用多说,“臭名昭著”的联合查询。
    再来个关于 order by:


    无标题文章_第15张图片
  • 那么结合联合查询的union 我们想到通常会有注入语句 order by来定位字段数:
    我们先看下user表中有哪些字段


    无标题文章_第16张图片
  • 然后我们使用通常的注入语句order by来尝试猜解字段数:


    无标题文章_第17张图片
  • 我们发现猜解1和2的时候页面正常,3的时候就报错了,但是我们字段数显然有8个,所以这里再来张图大家对比观察下:


    无标题文章_第18张图片


  • 注意观察我select的字段数量,大家发现上图我select了3个字段,所以order by的时候3是正确4是错误。那么我们改成*试试?

    无标题文章_第19张图片


    很显而易见,1没有问题,8 没有问题,9没有问题,然后在入侵步骤中我们接下来顺理成章地就使用union select了。
  • 现在当我们发现单引号出错的时候,为了让我们的恶意语句插入数据库继续执行,我们需要闭合单引号或者注释掉它。方法有三个:


    无标题文章_第20张图片

    无标题文章_第21张图片

    无标题文章_第22张图片



    这里注意了“--”后面有一个空格。在url当中,我们需要使用“+”来代替“--”后面的空格。

  • 那么这个时候我们就可以在中间添加语句进行注入了,也还是通常思路,首先order by 一下:


    无标题文章_第23张图片

    无标题文章_第24张图片

    无标题文章_第25张图片
  • 这里说3个就出错了,原因很简单,咱们看下代码文件并结合之前我们铺垫的order by的小知识点看下:


    无标题文章_第26张图片
  • 原文件select了2个字段,所以显然我们只可能order by 到2。
    接下来联合查询注入:


    无标题文章_第27张图片

    无标题文章_第28张图片
  • 语句为"1' union select 1,2#“和“1' union select user(),version()#"
    通过这里我们知道可以在1和2的地方爆出我们所需要的信息,然后我们就可以正常构造查询语句了。这里又有一个tip,因为在mysql版本>5.0以后会有一张系统表叫做information_schema。
    相关知识点见这里********Click-me********
  • 我们可以通过他来对不知道表名和字段的情况下进行联合查询。
    1' union select table_name,2 from information_schema.tables where table_schema= 'dvwa'#
    这里的数据库 dvwa我们可以在上图中替换函数user()为database()就行。
    无标题文章_第29张图片
  • 1' union select column_name,2 from information_schema.columns where table_schema= 'dvwa' and table_name= 'users'#
    无标题文章_第30张图片
  • 1' union select user,password from users#
    无标题文章_第31张图片


    ********至此,注入完成!********

你可能感兴趣的:(无标题文章)