Sqli-Labs_Lesson_4 GET - Error based - Double Quotes - String

Sqli-Labs 是一个印度人的开源项目平台。里面包含了基本的各种注入类型,同时又有get和post类型,以及一些基本的绕过学习。

项目地址:https://github.com/Audi-1/sqli-labs

SQL注入

Lesson-3 #Get - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

SQL注入中常用的字符:
注释符号 : --+
select ...from.... : 用于从表中选取数据
order by : 用于对结果集进行排序
union select : 用于合并两个或者多个SELECT语句的结果集
concat : 返回字符串连接的结果

运行测试环境:http://localhost/sqli-labs-master/Less-4/
输入ID参数1:http://localhost/sqli-labs-master/Less-4/?id=1 ,返回正常,继续测试陆续输入2,3,4,5,6....,均返回正常,而且随着参数ID值的改变,页面返回的name和Password的值也会出现不同。
在参数中尝试插入单引号,网站没有报错:
插入单引号
在参数中尝试插入单引号和括号,网站也没有报错:
插入单引号+括号
测试一下双引号,网站报出错误信息:

【You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1】

插入双引号

根据我们的输入的是1",可以推测出

SELECT username from table where id =("input")

测试一下:
and 1=1
and 1=2
查看网页代码:
Less-4/index.php
继续查询表字段的列数:
测试3列
测试4列
3的时候显示正常,4的时候报错,说明只有三列,输入错误参数进一步找到查询点:
查询点

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

Mysql的INFORMATION_SCHEMA数据库包含了一些表和视图,提供了访问数据库元数据的方式。

元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

SCHEMATA表:提供了关于数据库的信息。
TABLES表:给出了关于数据库中的表的信息。
COLUMNS表:给出了表中的列信息。
STATISTICS表:给出了关于表索引的信息。
USER_PRIVILEGES表:给出了关于全程权限的信息。该信息源自mysql.user授权表。
SCHEMA_PRIVILEGES表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。
TABLE_PRIVILEGES表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。
COLUMN_PRIVILEGES表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。
CHARACTER_SETS表:提供了关于可用字符集的信息。
COLLATIONS表:提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。
TABLE_CONSTRAINTS表:描述了存在约束的表。
KEY_COLUMN_USAGE表:描述了具有约束的键列。
ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。
VIEWS表:给出了关于数据库中的视图的信息。
TRIGGERS表:提供了关于触发程序的信息。

查询一下dvwa数据库中全部的表名:
dvwa数据表中的第一列
dvwa数据表中的第三个列

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

对比一下数据库,和插入SQL语句查询的结果一样:
Mysql数据库中
也可以通过group_concat()查询:
group_concat()查询

group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。

查询users里面的字段:

*http://localhost/sqli-labs-master/Less-4/?id=-4") union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

users中的字段
查询username,password字段里面的内容:

*http://localhost/sqli-labs-master/Less-4/?id=-4") union select 1,group_concat(username,password),3 from users --+

username,password字段里面的内容

*PS:我在这里还遇到一个出错的情况,我感觉应该是权限的问题,希望有大神可以解惑,我查询user_id,first_name字段内容的时候出现了错误:

查询user_id出错

利用注入神器sqlmap验证一下:
SQLMAP结果
进一步测试,DBA权限哦,欲知后事如何,请听以后分解:
DBA权限

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容