如何使用XSSaminer工具在PHP源码中挖掘XSS漏洞

WBOY
Release: 2016-06-23 13:02:59
Original
2049 people have browsed it

当想要在服务器的开source脚本代码中发掘跨站脚本漏洞时,使用静态分析方法可以使我们的分析过程变得更加简单并且自动化,另外,网上也可以找到许多相关的工具。

我近期发现了一种通过寻找共性pattern在PHPsource码中发掘跨站脚本漏洞的简单方法。该方法是使用一个名为 XSSaminer 的工具,该工具根据grep创建,并使用bash语言编写。

工具介绍

它首先会检查脚本参数:

if [ -z $1 ]then   echo -e "Usage:\n$0FILE\n$0 -r FOLDER"   exitelse   f=$1fi
Copy after login

代码分析:如果第一行的参数$1为空,就显示使用$0作为脚本名的用例并终止程序;否则,就将该参数分配给主函数中使用的f变量。

sources=(GET POST REQUEST "SERVER\['PHP""SERVER\['PATH_" "SERVER\['REQUEST_U")sinks=(echo die printprintfprint_rvar_dump)
Copy after login

接下来是带有不完整字符串的source和sink,之所以不完整,是因为它们只用于匹配。sink使用source,如果可以相互匹配(在没有任何过滤的情况下),我们就需要考虑是否有用户输入注入到已经生成的HTML代码中。

如果sink中使用了GET、POST或REQUEST全局变量,那么这很明显就是注入问题。但是SERVER有一些特殊的地方,假设输入以下网址(带有破坏HTML属性的注入):

http://domain/page.php/"><svg onload=alert(1)>
Copy after login

尽管上面只提到了三个SERVERsource,但是我们却可以在上述代码中找到四个SERVER,如下:

$_SERVER[‘PHP_SELF’] – returns the current URL decodedhttp://domain/page.php/"><svg onload=alert(1)>$_SERVER[‘PATH_TRANSLATED’] – returns file path on the system/var/www/html/page.php/">$_SERVER[‘PATH_INFO’] – returns info between page name and querystring (?)/">$_SERVER[‘REQUEST_URI’] – returns the current URLhttp://domain/page.php/"><svg onload=alert(1)>
Copy after login

最后一个,REQUEST_URI,没有将URL特殊字符解码成双引号(“)或小于号(<),但是由于浏览器使用这些已编码的字符创建请求,因此,这是一个隐患。但是它只应用在存储型XSS中,用于拦截和编辑浏览器请求(或使用其他HTTP客户端),或者在加载sink前在PHP代码的其他位置进行解码。

xssam(){        fori in ${sources[@]}        do               a=$(grep-in "\$_${i}" $f | grep -o "\$.*=" | sed "s/[]\?=//g" | sort -u)                forj in ${sinks[@]}               do                       grep--color -in "${j}.*\$_${i}" $f                        fork in $a                       do                               grep--color -in "${j}.*$k" $f                       done               done        done}
Copy after login

Xssam 函数用于结合source和sink,通过前两个“for”循环找到直接的隐患位置,“a”变量用于获取接收不安全的全局值(source)的变量名称。借助第三个“for”循环实现一级的脚本变量追踪。

if [ $f != "-r" ]then        xssamelse        for i in $(find $2 -type f -name "*.php")        do               echo "File: $i"               f=$i               xssam        donefi
Copy after login

在主代码中,这段脚本用于选择是单个文件调用xssam函数还是进入递归模式。该过程通过使用命令行中提供的带有-r选项(代替文件名)的文件夹($2)来满足另一个“for”循环中相同的函数调用。

用例:

./xssaminerFILE (单个文件)./xssaminer-r FOLDER (递归模式, 文件夹中所有的.php文件)
Copy after login

XSSaminer 的主要目标是比较容易实现的XSS,而且经常会出现误报,但是它的LoC/result率是十分高的。

测试实例

如下截图为该工具对WordPress主题 Rational Lite 的测试结果:

它在 2 个不同的文件中找到了 3 个 XSS 漏洞,但是第二个为误报,第一个得到确认:

通过在整个模块文件中追踪存在漏洞的代码,发现当使用dismiss_id GET参数回调未认证的ajax操作时会弹出警告,一个0day漏洞出现了。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!