最近在使用WebScarab的时候发现有个bug,这个bug本身很容易修复,只是为此无法使用直接下载的WebScarab的binary,必须重新编译一下。特把编译过程纪录下来。
下载源代码:
直接通过IE下载最新的snapshot:
http://dawes.za.net/gitweb.cgi?p=webscarab.git;a=tree
编译需求:
看了下说明文档,编译需要使用ANT。所以又下载了JDK1.6以及ANT1.8,在把JDK以及ANT得环境设置好之后准备开工。
开始编译:
把下载的WebScarab得源代码解压缩之后进入其目录,直接执行
ant
结果失败,报错说找不到ProGuard。
ProGuard是个什么东东?把WebScarab的ANT脚本打开之后发现是因为有个新的task需要ProGuard的jar包
<taskdef
classpath="${proguard.location}/lib/proguard.jar"
resource="proguard/ant/task.properties"
/>
不管了,google一下之后在这里http://proguard.sourceforge.net/ 把目前最新的4.7下载了下来,解压缩之后发现里面有编译好的jar包。
再次编译:
仔细看了下WebScarab的编译脚本,定义proguad的task需要把proguard.jar放到${proguard.location}/lib/proguard.jar这个目录下面,proguard.location这个参数在编译脚本里面没有,需要在ANT命令里面指定。这样我就把把proguard.jar 复制到WebScarab解压目录的lib目录下面,再次执行
ant -Dproguard.location=.
OK,这次一切顺利,编译好的WebScarab在dist目录下面,直接执行
java -jar ./webscarab-selfcontained-[numbers].jar
就可以运行了。
修正的问题:
在src\org\owasp\webscarab\plugin\fuzz\Parameter.java, 第125行代码如下:
if (contentType.equals("application/x-www-form-urlencoded"))
这边是判断如果一个HTTP请求的HTTP content-type头是form请求,那么会试图解析HTTP body里面的参数,但是根据RFC2616 (http://www.ietf.org/rfc/rfc2616.txt):
Content-Type = "Content-Type" ":" media-type
media-type = type "/" subtype *( ";" parameter )
在后面还可以跟其他参数的,典型的例子是编码(如下图),按照代码里面的完全匹配的方式,这样会导致HTTP Body里面的参数无法被解释出来。
修正采用了一个很简单的办法,使用不完全匹配:
if (contentType.indexOf("application/x-www-form-urlencoded") >= 0)
虽然可能会有其他问题,但是至少我自己使用没有问题了微笑