首页 > 数据库 >SQLI-LABS(Less-7)

SQLI-LABS(Less-7)

时间:2022-09-06 22:33:18浏览次数:89  
标签:语句 Less 数据库 LABS SQLI --+ outfile id

Less-7(GET-Dump into outfile-String)

打开Less-7页面,可以看到页面中间有一句Please input the ID as parameter with numeric value,那么先使用ID这个参数通过GET方式传入一个数值。

确定注入点

注入语句:?id=1。可以看出没有回显查询结果。

接着试一下?id=1',发现出错了,但是并不回显错误。也就是说我们无法从前端得知语法错误,这样就无法确定闭合符号。

接着尝试?id=1",看到没有页面显示正常,那么SQL语句可能是使用双引号进行闭合的。

使用注入语句:?id=1" --+看看是否能够正常闭合并注释,从下图看出是没有问题的。

接着尝试注入语句?id=1" and 1=1 --+?id=1" and 1=2 --+,发现注入第一条语句时页面正常,注入第二条语句时居然也是正常的。说明之前的判断有误。

重新尝试常用的闭合语句:

SQL语句原代码:
'$id'
"$id"
('$id')
("$id")
(('id'))

闭合代码:
1' #
1" #
1') #
") #
')) #

最后发现,本关使用的闭合语句为')),并且?id=1')) --+正常、?id=1')) and 1=1 --+正常、?id=1')) and 1=2 --+错误。由此判断此处存在注入点。

确定数据

既然本关是没有查询结果回显也不会显示语法错误信息,只能判断出存在成功和错误两种信息,那么可以考虑使用布尔型盲注,通过前端显示的是成功还是错误信息来判断注入的语句是否正确。

注入语句:?id=1')) and length((select database()))>5 --+length()函数会返回括号内的字符串长度,例如length('abc')返回3,表示字符串长度为3,这样上述语句就变成了查询当前数据表是否存在id为1并且当前数据库名长度是否大于5,而我们知道当前数据库存在id为1的用户,那么整个注入语句就可以直接用来判断当前数据库名的长度是否大于5。

从上图中可以看出数据库名的长度是大于5的,接着判断是否当前数据库名是否小于10,使用:?id=1')) and length((select database()))<10 --+,通过这种方式最终可以得出,当前数据库名长度为8。

下一步判断数据库名是什么,使用注入语句:?id=1')) and substring((select database()),1,1)<'z' --+判断当前数据库名的第一个字符是否小于z,接着通过二分法不断猜解,得出当前数据库名第一个字符为s,通过此方法最终可以猜解出当前数据库名。接下来的表名、列名、用户名、密码都可以使用此方法猜解得出。

outfile函数

不过根据这关主页的提示,应该使用outfile函数,利用outfile函数在数据库有写权限的目录写入文件。
要使用outfile函数写文件,需要先知道网站的路径,虽然第七关没有回显,但是可以在第一关的回显中使用@@datadir来获取数据库的存储数据路径。
补充:@@datadir获取数据库存储数据路径 ,@@basedir是MYSQL获取安装路径
在第一关使用注入语句:?id=1' and 1=2 union select 1,2,@@datadir --+,拿到了数据的存储路径:/var/lib/mysql/,可以根据路径判断操作系统为Linux,在Linux下默认的网站路径为/var/www/html。(但是这里通过作弊的方式得知SQLI-LABS Less-7靶场的路径为/var/www/sqlilabs/Less-7

确认当前用户读写权限

MySQL是通过权限表来控制用户对数据库访问的,权限表存放在mysql数据库中,主要的权限表有以下几个:user,db,host,table_priv,columns_privprocs_priv,通常用户信息、修改用户的密码、删除用户及分配权限等就是在mysql数据库的user表中。(MySQL user表详解)
注入语句:?id=1')) and (select count(*) from mysql.user)>0 --+,如果回显正常,就是表示最高权限。

利用outfile写入文件确定当前数据库名

注入语句:?id=1')) union select 1,2,database() into outfile '/var/www/sqlilabs/Less-7/1.txt' --+

虽然前端页面报错了,但是文件已经写入到/var/www/sqlilabs/Less-7/下,通过URL可以访问:

这样就得到当前数据库名security

利用outfile写入文件确定当前数据库名

注入语句:?id=1')) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() into outfile '/var/www/sqlilabs/Less-7/2.txt' --+

利用outfile写入文件确定users表中的列名

注入语句:?id=1')) union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() into outfile '/var/www/sqlilabs/Less-7/3.txt' --+

利用outfile写入文件确定users表中的用户名和密码

注入语句:?id=1')) union select 1,group_concat(username),group_concat(password) from users into outfile '/var/www/sqlilabs/Less-7/4.txt' --+

到此,就得到了当前表中所有的用户名和密码。既然可以写入文件,那么可以直接写入一句话木马(后续补充)。

标签:语句,Less,数据库,LABS,SQLI,--+,outfile,id
From: https://www.cnblogs.com/Timesi/p/16661422.html

相关文章

  • SQLI-LABS(Less-6)
    Less-6(GET-Doubleinjection-DoubleQuotes-String)打开Less-6页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通......
  • less 的使用
    使用less替代<运算符可以让你的算法更加通用。例如,当算法作用于无法提供<运算符的类型上时,该类型可以通过自定义less的重载版本,以继续工作。当代码会对比较结果......
  • SQLI-LABS(Less-5)
    Less-5(Doubleinjection-SingleQuotes-String)打开Less-5页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GE......
  • SQLI-LABS(Less-4)
    Less-4(Errorbased-DoubleQuotes-string)打开Less-4页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式......
  • php8.0源码编译安装mysqli拓展
    将开发环境web项目上传到CentOS8.0云服务器上后,调用PHP文件报500错误,经排查php环境中不存在mysqli拓展,导致无法使用mysqli_connect()函数;查看phpinfo()页面证实猜想;原因可......
  • Serverless 架构下的 AI 应用开发:入门、实战与性能优化
    作者:Serverless随着时间的推移,Serverless架构变得越来越火热,凭借着极致弹性、按量付费、低成本运维等特性,在很多领域发挥着越来越重要的作用;机器学习领域在近些年也非常......
  • [HTML+CSS] 17.less 简介
    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版目录less简介1、安装插件2、编写less3、less语法less注释父子关系嵌套变量其他4、混合函数其他5、......
  • 02-mORMot框架样例学习-02 - Embedded SQLite3 ORM(SQLite3 数据库)
     programProject01;uses{$ISynDprUses.inc}//useFastMM4onolderDelphi,orsetFPCthreadsForms,SysUtils,SynCommons,mORMot,Unit1......
  • sqli-labs第二关
    1.判断是否存在注入输入?id=1可以看出存在注入2.判断什么类型的注入输入?id=1'发现出现错误提示,说明单引号影响了闭合,为数字型注入说明其他步骤和第一关相似,只需要......
  • sqli-labs第一关
    sqli-labs通关记录1.判断是否可以注入输入?id=1输入?id=2由此可以判断出可以进行注入2.判断什么类型的注入输入?id=1'输入?id=1'--+可以看出第一次输入结果出......