注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjcjack的博客

 
 
 

日志

 
 

Taint-0.3.0(A XSS codes sniffer) released  

2012-05-21 21:59:51|  分类: 技术相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近几天忙里偷闲, 一直在完善taint, 今天我觉得终于算做到了80%的满意了, 根据80:20原则, 我觉得可以做为一个里程碑的版本了 :) .

什么是Taint? An extension used for detecting XSS codes(tainted string), And also can be used to spot sql injection vulnerabilities, shell inject, etc.

经过我实际测试, Taint-0.3.0能检测出实际的一些开源产品的(别问是什么)隐藏的XSS code, SQL注入, Shell注入等漏洞, 并且这些漏洞如果要用静态分析工具去排查, 将会非常困难, 比如对于如下的例子:

  1. <?php
  2.    $name = $_GET["name"];
  3.    $value = strval($_GET["tainted"]);
  4.  
  5.    echo $$name;

对于请求:

  1.  
  2. http://****.com/?name=value&tainted=xxx

静态分析工具, 往往无能为力, 而Taint却可以准确无误的爆出这类型问题.

  1. Warning: main() [function.echo]:
  2.      Attempt to echo a string that might be tainted in %s.php on line %d

现在0.3.0已经发布, 我想短时间内, 我不会再添加新功能了. enjoy, PHP Taint.

另外, 多说一句, Taint可以说是, 我完成的扩展中最为复杂的一个, 使用了各种tricky技巧, 大家如果有兴趣做扩展开发, 可以用来作为一个很好的高级教材.

附录:

A. Tainted String

所有来自$_GET, $_POST, $_COOKIE的变量, 都被认为是Tainted String

B. taint检测的函数/语句列表, 当这些函数使用tainted string参数的时候, taint会给出警告:

1. 输出函数/语句系列

  1. echo
  2. print
  3. printf
  4. file_put_contents

2. 文件系统函数

  1. fopen
  2. opendir
  3. basename
  4. dirname
  5. file
  6. pathinfo

3. 数据库系列函数/方法

  1. mysql_query
  2. mysqli_query
  3. sqlite_query
  4. sqlite_single_query
  5. oci_parse
  6. Mysqli::query
  7. SqliteDataBase::query
  8. SqliteDataBase::SingleQuery
  9. PDO::query
  10. PDO::prepare

4. 命令行系列

  1. system
  2. exec
  3. proc_open
  4. passthru
  5. shell_exec

5. 语法结构

  1. eval
  2. include(_once)
  3. require(_once)

C. 消除tainted信息的函数, 调用这些函数以后, tainted string就会变成合法的string:

  1. escapeshellcmd
  2. htmlspecialchars
  3. escapeshellcmd
  4. addcslashes
  5. addslashes
  6. mysqli_escape_string
  7. mysql_real_escape_string
  8. mysql_escape_string
  9. sqlite_escape_string
  10. PDO::quote
  11. Mysqli::escape_string
  12. Mysql::real_escape_string

D. 调用中保持tainted信息的函数/语句, 调用这些函数/语句时, 如果输入是tainted string, 则输出也为tainted string:

  1. = (assign)
  2. . (concat)
  3. "{$var}" (variable substitution)
  4. .= (assign concat)
  5. strval
  6. explode
  7. implode
  8. sprintf
  9. vsprintf
  10. trim(as of 0.4.0)
  11. rtrim(as of 0.4.0)
  12. ltrim(as of 0.4.0)

E. 链接:

  评论这张
 
阅读(95)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017