BUUCTF/sqli-labs 1-23关

题目

在这里插入图片描述

步骤

打开靶机页面,这是一个练习sql注入的专项靶场。

Less-1

提示输入参数id,我们设一个id=1并执行

在这里插入图片描述

显示了两行数据,我们更改id的值为2-1

在这里插入图片描述

发现数据变化了,id的数据类型应该是字符型,我们继续测试,输入id=2’

结果报错了

在这里插入图片描述

再次输入id=2’ and 1=1 --+ ,页面恢复正常,说明id的数据类应该是带单引号的字符

在这里插入图片描述

开始使用order by猜解当前表有多少个字段

在这里插入图片描述

当到4的时候出现了报错,所以该表应该只有3个字段

在这里插入图片描述

使用右联查发现显示在前端的数据分别是第2列和第3列,接下来就是查询出数据库的名称,使用database()函数

在这里插入图片描述

得到数据库名称是security,根据数据库名称,查询该数据库下有哪些表,通过MariaDB下的源数据库information_schema

在这里插入图片描述

group_concat函数的作用是将多个数据合并为一条

得到有四张表,分别是emails,referers,uagents,users

同样的方法可以根据表名,查询出表中的字段名,最终查询到具体数据

闯关目标为获取flag,将以上四个表字段查询了一遍未发现flag,说明flag不在当前数据库,我们查询下服务器内还有哪些数据库

在这里插入图片描述

可以看到里面有个ctftraining数据库,flag多半在这个数据库中

在这里插入图片描述

查询下flag表下有哪些字段

在这里插入图片描述

只有flag一个字段,那我们直接查询flag的值

在这里插入图片描述

得到flag值。

后续关卡将不再详细讲述以上基本sql注入方法,以获取数据库名为通关目标。

Less-2

在这里插入图片描述

通过id=3-1,但是显示的是id=2的数据可知,这次id字段的数据类型为字符型

我们直接order by获取字段数

在这里插入图片描述

结果还是只有3个字段,通过database()成功获取数据库名

在这里插入图片描述

Less-3

在这里插入图片描述

这一关通过测试发现id字段是字符型,且是带单引号的,但是后面加入命令后还是报错,说明id字段不仅带单引号可能还带括号,我们继续尝试

在这里插入图片描述

当我们加了一个反括号后数据成功显示,说明是带了单括号,剩余步骤与前面一致

在这里插入图片描述

Less-4

在这里插入图片描述

第四关,根据测试id字段应该是带双引号及单括号的字符型,剩余步骤与前面一致

在这里插入图片描述

Less-5

这一关和前面的就有很大不同了,页面回显的数据都是一致的,我们只能知道sql注入的代码执行是否成功

在这里插入图片描述

通过测试我们知道id是带单引号的字符型,所以可以采用基于字符型的错误回显注入

报错注入的方法主要有三种

1.floor报错,比较复杂

原理是利用数据库主键不能重复,使用group by分组,产生主键key冗余而报错

id=2' and (select 1 from (select count(*),concat((SELECT schema_name FROM information_schema.schemata LIMIT 5,1),floor (rand(0)*2)) as x from information_schema.tables group by x) as a) --+
通过爆库让数据库名显示到报错信息中

在这里插入图片描述

2.updatexml报错

UPDATEXML (XML_document, XPath_string, new_value)

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值

当我们XPath_string语法报错时候就会报错,updatexml()报错注入和extractvalue()报错注入基本差不多。

id=2' and updatexml(1,concat(0x7e,(database()),0x7e),1) --+

在这里插入图片描述

3.extractvalue

extractvalue(XML_document,XPath_string)

第一个参数:XML_document是String格式,为XML文档对象的名称

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

作用:从XML_document中提取符合XPATH_string的值,当我们XPath_string语法报错时候就会报错。

concat和我前面说的的group_concat作用一样

2' and extractvalue(1,concat(0x7e,(database()),0x7e)) --+

在这里插入图片描述

Less-6

和关卡5类似,id是双引号字符型

在这里插入图片描述

Less-7

这关我们先测试id字段数据类型

在这里插入图片描述

经过测试,id字段为字符型且被双括号包含。

同时报错信息为静态固定,无法使用报错注入,也因为正确信息也为静态固定信息,无法使用联合查询注入。

在这里插入图片描述

上面提示让我们使用outfile,outfile是sql的语法,可以通过into outfile命令,将查询到的结果写入目标路径,在知道目标系统的绝对路径时可以使用,如

-1')) union select 1,2,database() into outfile"/tmp/1.txt"--+
可以打开1.txt,里面被写入了查询到的当前数据库名
同样也可以写入一句话木马,通过webshell管理工具连接来控制目标主机
-1')) uni
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值