漏洞描述
通过向应用程序输入代码的评论可以危害到系统。随着数据被解析,注入/格式不正确的评论可能会导致进程采取意想不到的行为导致攻击。
风险因素
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数据库中的当前查询之后注释掉所有内容。
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