(OWASP汉化)攻击系列大全(十):注释攻击

漏洞描述

通过向应用程序输入代码的评论可以危害到系统。随着数据被解析,注入/格式不正确的评论可能会导致进程采取意想不到的行为导致攻击。

风险因素

TBD

漏洞示例

攻击者可能会用不同的编程或脚本语言进行攻击

database

如果攻击者有能力操作数据库查询语言,那么他也可以注入语句终止符号,使其查询的语句终止在注释符上。

SELECT body FROM items WHERE id = $ID limit 1;

假设攻击者通过GET方法发送了变量$ ID中的以下数据:

"1 or 1=1; #"

最终的查询语句是:

SELECT body FROM items WHERE id = 1 or 1=1; # limit 1;

#后面的limit 1 就会被注释掉,不起任何作用

下面是常见数据库语句的注释符号(– 后面有空格):

  • MySQL:#,
  • MS SQL:
  • MS Access: %00 (hack!)
  • Oracle:

空字节

为了注释某些部分的查询,攻击者可以使用典型的给定语言的标准序列,或者使用他自己的方法来终止查询,而这些方法仅受限于他的想象力。一个更为直观的例子是一个空字节方法,用于在MS Access数据库中的当前查询之后注释掉所有内容。

Embedding Null Code .

shell

Shell(bash)也使用#终止解释

例如:

<?
$ =sth $_GET['what];
system("/usr/bin/find -name '$sth' -type f");
?>

使用/find.php?what=*'%20%23攻击者将绕过限制“-type f”和此命令:

/usr/bin/find -name '*' -type f

会变成

/usr/bin/find -name '*' #-type f

所以最终执行的命令是

/usr/bin/find -name '*'

HTML注入

如果对谁能够插入评论没有限制,那么使用开始评论标签:

<!--

可以在网站上留下其他显示的内容。

invisible.php

<?php
print "hello!: ";
print $_GET['user'];
print " Welcome friend!";
?>

然后输入

GET /invisible.php?user=<!--

结果变为

hello!:

相关代理

TBD

相关攻击

相关漏洞

相关防御

参考