sql注入(一)

发布时间 2023-04-27 16:25:32作者: ZT不高兴

一:sql注入原理

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

二:危害

  1. 窃取数据库信息。
  2. 写入webshell获取网站权限。

三:sql注入流程

  1. 寻找传参页面
  2. 判断是否存在注入点
  3. 判断字段的数量
  4. 判断字段回显的位置
  5. 查找数据库名
  6. 查找表名
  7. 查找字段名
  8. 查找字段内容
  9. 找后台登录

四:常见符号/函数/语句归类

  注释符

  #url 编码23%  单行注释在URL种#表示锚点,也就是hash路由,带上#不会请求后端路由,而是刷新前端路由

  -- x        单行注释x表示任意字符,这里表示有一个空格

  /**/        内联注释

 

  常见运算符

  &&   同  and

  !    同  not

  ^   同  xor

  \      转义符

  ~     一元比特反转

  +     加,可替代空格

 

  常用函数

  user()        获取当前操作的用户名,同session_user(),current_user()有时也用sysytem_user()  

  version()         获取当前数据库版本信息

  database()        获取当前数据库名称

  @@datadir       获取数据库路径

  @@hostname    获取安装MYSQL的计算机名称

  

  截取字符串常用的函数
  mid(str,pos,length)      对字符串str,自pos位开始截取,截取长度为length
  substr(str,start,length)   对指定字符串进行截取,为substring的简版
l  left(a,b)          表示从数据库名左侧截取1位
  ord函数是返回字符的ASSCI码,常和截取字符函数一起使用
    ord(substr(database(),1,1)) > 114 判断数据库名的第一个字符的ASSCI码是否大于114
    ord()函数同assci()函数都是返回字符串的assci码值

  concat()将多个字符合并成一个字符串
  concat_ws() 简单理解为带分隔符的连接字符串
  group_concat()返回一个字符串结果,该结果由分组中的值连接而成