watobo 0.9.9.pre3 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +24 -0
- data/CHANGELOG +17 -7
- data/README +4 -60
- data/bin/nfq_server.rb +191 -0
- data/config/interceptor.yml +2 -6
- data/lib/watobo/adapters/data_store.rb +1 -1
- data/lib/watobo/adapters/file/file_store.rb +50 -33
- data/lib/watobo/ca.rb +22 -0
- data/lib/watobo/config.rb +6 -0
- data/lib/watobo/core/ca.rb +411 -0
- data/lib/watobo/core/cert_store.rb +56 -0
- data/lib/watobo/core/forwarding_proxy.rb +38 -0
- data/lib/watobo/core/http_socket.rb +18 -0
- data/lib/watobo/core/intercept_carver.rb +179 -0
- data/lib/watobo/core/intercept_filter.rb +257 -0
- data/lib/watobo/core/interceptor.rb +342 -79
- data/lib/watobo/core/netfilter_queue.rb +191 -0
- data/lib/watobo/core/project.rb +84 -138
- data/lib/watobo/core/proxy.rb +61 -0
- data/lib/watobo/core/request.rb +40 -0
- data/lib/watobo/core/response.rb +30 -0
- data/lib/watobo/core/scanner.rb +64 -58
- data/lib/watobo/core/session.rb +70 -77
- data/lib/watobo/core.rb +1 -1
- data/lib/watobo/framework/create_project.rb +25 -10
- data/lib/watobo/framework/init.rb +13 -0
- data/lib/watobo/gui/browser_preview.rb +5 -4
- data/lib/watobo/gui/checks_policy_frame.rb +1 -0
- data/lib/watobo/gui/client_cert_dialog.rb +11 -6
- data/lib/watobo/gui/conversation_table.rb +7 -4
- data/lib/watobo/gui/fuzzer_gui.rb +9 -11
- data/lib/watobo/gui/intercept_filter_dialog.rb +210 -0
- data/lib/watobo/gui/interceptor_gui.rb +59 -21
- data/lib/watobo/gui/interceptor_settings_dialog.rb +39 -5
- data/lib/watobo/gui/list_box.rb +2 -1
- data/lib/watobo/gui/log_viewer.rb +79 -5
- data/lib/watobo/gui/main_window.rb +159 -113
- data/lib/watobo/gui/manual_request_editor.rb +11 -5
- data/lib/watobo/gui/mixins/subscriber.rb +47 -0
- data/lib/watobo/gui/project_wizzard.rb +3 -3
- data/lib/watobo/gui/proxy_dialog.rb +17 -18
- data/lib/watobo/gui/request_editor.rb +1 -1
- data/lib/watobo/gui/rewrite_filters_dialog.rb +416 -0
- data/lib/watobo/gui/rewrite_rules_dialog.rb +394 -0
- data/lib/watobo/gui/scanner_settings_dialog.rb +9 -6
- data/lib/watobo/gui/session_management_dialog.rb +33 -23
- data/lib/watobo/gui/sites_tree.rb +5 -6
- data/lib/watobo/gui/status_bar.rb +101 -49
- data/lib/watobo/gui/table_editor.rb +1 -1
- data/lib/watobo/gui/templates/plugin2.rb +23 -27
- data/lib/watobo/gui/utils/save_default_settings.rb +9 -9
- data/lib/watobo/gui/utils/save_proxy_settings.rb +25 -9
- data/lib/watobo/gui/utils/save_scanner_settings.rb +10 -7
- data/lib/watobo/gui/utils/session_history.rb +1 -1
- data/lib/watobo/gui/www_auth_dialog.rb +25 -21
- data/lib/watobo/gui.rb +3 -1
- data/lib/watobo/mixins/httpparser.rb +47 -40
- data/lib/watobo/mixins/request_parser.rb +126 -41
- data/lib/watobo/mixins/shapers.rb +124 -15
- data/lib/watobo/utils/hexprint.rb +31 -0
- data/lib/watobo/utils/load_chat.rb +2 -0
- data/lib/watobo/utils/response_builder.rb +111 -0
- data/lib/watobo.rb +4 -1
- data/modules/active/discovery/http_methods.rb +6 -4
- data/modules/active/fileinclusion/lfi_simple.rb +3 -3
- data/modules/active/sqlinjection/sqli_timing.rb +6 -6
- data/modules/passive/redirectionz.rb +5 -6
- data/plugins/catalog/catalog.rb +240 -56
- data/plugins/catalog/db_tests +1 -6483
- data/plugins/catalog/db_variables +2 -29
- data/plugins/crawler/gui/auth_frame.rb +15 -3
- data/plugins/crawler/gui/crawler_gui.rb +24 -0
- data/plugins/crawler/gui/hooks_frame.rb +7 -2
- data/plugins/crawler/gui/settings_tabbook.rb +4 -0
- data/plugins/crawler/gui.rb +3 -3
- data/plugins/crawler/lib/engine.rb +1 -1
- data/plugins/filefinder/filefinder.rb +21 -17
- data/plugins/sqlmap/bin/test.rb +100 -0
- data/plugins/sqlmap/gui/main.rb +227 -0
- data/plugins/sqlmap/gui/options_frame.rb +119 -0
- data/plugins/sqlmap/gui.rb +27 -0
- data/plugins/sqlmap/icons/sqlmap.ico +0 -0
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +116 -0
- data/plugins/sqlmap/sqlmap.rb +26 -0
- data/plugins/sslchecker/gui/gui.rb +45 -30
- metadata +32 -9
- data/certificates/cert.pem +0 -19
- data/certificates/privkey.pem +0 -15
- data/certificates/watobo_dh.key +0 -5
- data/lib/watobo/core/simple_ca.rb +0 -393
data/.yardopts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# .
|
|
2
|
+
# .yardopts
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2012 by siberas, http://www.siberas.de
|
|
5
|
+
#
|
|
6
|
+
# This file is part of WATOBO (Web Application Tool Box)
|
|
7
|
+
# http://watobo.sourceforge.com
|
|
8
|
+
#
|
|
9
|
+
# WATOBO is free software; you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation version 2 of the License.
|
|
12
|
+
#
|
|
13
|
+
# WATOBO is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with WATOBO; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# .
|
|
22
|
+
--no-private
|
|
23
|
+
*.xxx
|
|
24
|
+
- CHANGELOG
|
data/CHANGELOG
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
= Version 0.9.9
|
|
2
2
|
== NEW
|
|
3
|
-
* Time-based SQL injection module
|
|
4
|
-
*
|
|
5
|
-
* ConversationTable: values in coloumn Parameters are url-decoded
|
|
6
|
-
*
|
|
7
|
-
* Manual Request Editor: Url is displayed in the window title
|
|
8
|
-
* Menubar items are disabled if no project is defined
|
|
3
|
+
* [Module] Time-based SQL injection module
|
|
4
|
+
* [Module] Rated XSS which gives a more accurate exploitability result
|
|
5
|
+
* [GUI] ConversationTable: values in coloumn Parameters are url-decoded
|
|
6
|
+
* [Plugin] WebCrawler - based on Mechanize
|
|
7
|
+
* [GUI] Manual Request Editor: Url is displayed in the window title
|
|
8
|
+
* [GUI] Menubar items are disabled if no project is defined
|
|
9
|
+
* [CORE] Create SSL certificates for each target on-the-fly, now you only have to trust the internal CA once
|
|
10
|
+
* [Interceptor] Rewrite/Inject Feature to Interceptor
|
|
11
|
+
* [CORE] added .yml file extension for chats, findings, logs, ...
|
|
12
|
+
* [Plugin] SQLmap - easy to use sqlmap interface
|
|
13
|
+
* [Interceptor] Transparent Proxy Feature - only available on Linux (depends on netfilter_queue)
|
|
14
|
+
* [CatalogScanner] added predefined database paths
|
|
15
|
+
* [CORE] general unzipping and unchunking of server responses
|
|
9
16
|
|
|
10
17
|
== Fixes
|
|
11
18
|
* CA Directory is now created in WATOBO working directory '.watobo'
|
|
12
19
|
* Fixed Crash on opening client-certificate dialog
|
|
20
|
+
* Improved Socket communication
|
|
13
21
|
* ConversationTable: GET and POST parameters are shown in the parameters coloumn
|
|
14
22
|
* TreeView-Pane: Show full conversation list when Findings tab is selected
|
|
15
23
|
* Fixed a bug in parsing post parameters
|
|
16
|
-
*
|
|
24
|
+
* QuickScan: double scanning each module
|
|
25
|
+
* the disclaimer.chk file now is written to .watobo
|
|
26
|
+
* some minor bugs
|
|
17
27
|
|
|
18
28
|
|
|
19
29
|
= Version 0.9.8
|
data/README
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
WATOBO is a security tool for web applications. WATOBO is intended to enable security professionals to perform efficient (semi-automated) web application security audits.
|
|
4
4
|
|
|
5
5
|
Most important features:
|
|
6
|
-
* WATOBO has Session Management capabilities! You can define login scripts as well as logout signatures. So you don’t have to login manually each time you get logged out.
|
|
6
|
+
* WATOBO has Session Management capabilities! You can define login scripts as well as logout signatures. So you don’t have to login manually each time you get logged out.
|
|
7
|
+
* WATOB can act as an transparent proxy
|
|
8
|
+
* WATOBO has anti-CSRF features
|
|
7
9
|
* WATOBO can perform vulnerability checks out of the box.
|
|
8
10
|
* WATOBO supports Inline De-/Encoding, so you don’t have to copy strings to a transcoder and back again. Just do it inside the request/response window with a simple mouse click.
|
|
9
11
|
* WATOBO has smart filter functions, so you can find and navigate to the most interesting parts of the application easily.
|
|
@@ -11,66 +13,8 @@ Most important features:
|
|
|
11
13
|
* WATOBO is free software ( licensed under the GNU General Public License Version 2)
|
|
12
14
|
* It’s by siberas ;)
|
|
13
15
|
|
|
14
|
-
== Installation
|
|
15
|
-
Please install Ruby 1.9.2+ first before you continue.
|
|
16
|
-
|
|
17
|
-
Note: Ruby 1.8 is no longer supported!
|
|
18
|
-
|
|
19
|
-
Note: WATOBO will not run under Ruby 1.8 anymore!
|
|
20
|
-
|
|
21
|
-
Note: Please upgrade Ruby to 1.9.2+, because WATOBO will not run under Ruby 1.8!
|
|
22
|
-
|
|
23
|
-
Note: Ruby 1.8 is crap, so get rid of it!
|
|
24
|
-
|
|
25
|
-
... just want to be sure ;)
|
|
26
|
-
|
|
27
|
-
=== Windows 7/Vista/XP
|
|
28
|
-
gem install watobo
|
|
29
|
-
|
|
30
|
-
=== BackTrack 5
|
|
31
|
-
gem install --user-install selenium-webdriver
|
|
32
|
-
gem install --user-install watobo
|
|
33
|
-
|
|
34
|
-
Add the following line to your ~/.bashrc file:
|
|
35
|
-
export PATH=$PATH:/root/.gem/ruby/1.9.2/bin/
|
|
36
|
-
|
|
37
|
-
=== Generic Linux (with APT)
|
|
38
|
-
* Install Ruby via RVM
|
|
39
|
-
* Setting up a build environment for linux
|
|
40
|
-
Based on Lyle Johnsons tutorial https://github.com/lylejohnson/fxruby/wiki/Setting-Up-a-Linux-Build-Environment
|
|
41
|
-
apt-get -y install ruby-full
|
|
42
|
-
apt-get -y install install zlib1g-dev libbz2-dev libpng12-dev libjpeg62-dev libtiff4-dev
|
|
43
|
-
apt-get -y install zlib1g-dev libbz2-dev libpng12-dev libjpeg62-dev libtiff4-dev
|
|
44
|
-
apt-get -y install libx11-dev libglu1-xorg-dev libxcursor-dev libxext-dev libxrandr-dev libxft2-dev
|
|
45
|
-
apt-get -y install g++
|
|
46
|
-
|
|
47
|
-
* Install the Fox-Toolkit libs
|
|
48
|
-
Use version 1.6.44 only. The 1.7 branch is incompatible with fxruby!
|
|
49
|
-
You can download it from the fox-tookit homepage http://www.fox-toolkit.org/
|
|
50
|
-
wget http://ftp.fox-toolkit.org/pub/fox-1.6.44.tar.gz
|
|
51
|
-
tar xzvf fox-1.6.44.tar.gz
|
|
52
|
-
cd fox-1.6.44
|
|
53
|
-
./configure
|
|
54
|
-
make
|
|
55
|
-
make install
|
|
56
|
-
cd ..
|
|
57
|
-
|
|
58
|
-
* Install the Gems
|
|
59
|
-
First install the selenium-webdriver gem which is necessary on xnix platforms for the browser preview feature of watobo.
|
|
60
|
-
gem install selenium-webdriver
|
|
61
|
-
Finally install the watobo gem.
|
|
62
|
-
gem install watobo
|
|
63
|
-
|
|
64
|
-
== Usage
|
|
65
|
-
In your command prompt start WATOBO with the command:
|
|
66
|
-
watobo_gui.rb
|
|
67
|
-
|
|
68
|
-
After starting WATOBO the interception proxy is listening on localhost:8081.
|
|
69
|
-
|
|
70
|
-
Configure your browser to use WATOBO as its proxy and visit the site you want to audit.
|
|
71
|
-
|
|
72
16
|
== Documentation
|
|
73
|
-
Check the online
|
|
17
|
+
Check out the online documentation and video tutorials at http://watobo.sourceforge.net
|
|
74
18
|
|
|
75
19
|
== Tips & Tricks
|
|
76
20
|
* On Linux you should use RVM to install Ruby (http://beginrescueend.com/rvm/install/)
|
data/bin/nfq_server.rb
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
# .
|
|
3
|
+
# nfq_server.rb
|
|
4
|
+
#
|
|
5
|
+
# Copyright 2012 by siberas, http://www.siberas.de
|
|
6
|
+
#
|
|
7
|
+
# This file is part of WATOBO (Web Application Tool Box)
|
|
8
|
+
# http://watobo.sourceforge.com
|
|
9
|
+
#
|
|
10
|
+
# WATOBO is free software; you can redistribute it and/or modify
|
|
11
|
+
# it under the terms of the GNU General Public License as published by
|
|
12
|
+
# the Free Software Foundation version 2 of the License.
|
|
13
|
+
#
|
|
14
|
+
# WATOBO is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
# GNU General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# You should have received a copy of the GNU General Public License
|
|
20
|
+
# along with WATOBO; if not, write to the Free Software
|
|
21
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
22
|
+
# .
|
|
23
|
+
require 'drb'
|
|
24
|
+
require 'yaml'
|
|
25
|
+
require 'openssl'
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
require "nfqueue"
|
|
29
|
+
@nfq_present = true
|
|
30
|
+
rescue LoadError
|
|
31
|
+
puts "NFQUEUE not available on this system"
|
|
32
|
+
exit
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module Watobo
|
|
36
|
+
module NFQ
|
|
37
|
+
class Connections
|
|
38
|
+
attr :nfqueue
|
|
39
|
+
def add_ssl_request(c_host, c_port, s_host, s_port)
|
|
40
|
+
ck = "#{c_host}:#{c_port}"
|
|
41
|
+
sk = "#{s_host}:#{s_port}"
|
|
42
|
+
|
|
43
|
+
begin
|
|
44
|
+
|
|
45
|
+
unless @cert_list.has_key? sk
|
|
46
|
+
if cert = acquire_cert(s_host,s_port)
|
|
47
|
+
@connections[ck] = sk
|
|
48
|
+
@cert_list[sk] = cert
|
|
49
|
+
else
|
|
50
|
+
return false
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
@connections[ck] = sk
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
return true
|
|
57
|
+
rescue => bang
|
|
58
|
+
puts bang
|
|
59
|
+
puts bang.backtrace
|
|
60
|
+
end
|
|
61
|
+
return false
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def to_yaml
|
|
66
|
+
@connections.to_yaml
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def info(data)
|
|
70
|
+
begin
|
|
71
|
+
ck = "#{data['host']}:#{data['port']}"
|
|
72
|
+
target_site = ''
|
|
73
|
+
cert_cn = ''
|
|
74
|
+
@netqueue_lock.synchronize do
|
|
75
|
+
if @connections.has_key? ck
|
|
76
|
+
target_site = @connections[ck]
|
|
77
|
+
if @cert_list.has_key? target_site
|
|
78
|
+
cert = @cert_list[target_site]
|
|
79
|
+
cert_cn = cert.subject.to_s.gsub(/.*=/,"")
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
r = { 'target' => target_site, 'cn' => cert_cn}
|
|
84
|
+
return r
|
|
85
|
+
rescue => bang
|
|
86
|
+
puts bang
|
|
87
|
+
puts bang.backtrace
|
|
88
|
+
end
|
|
89
|
+
return {}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def initialize
|
|
93
|
+
@connections = Hash.new
|
|
94
|
+
@cert_list = Hash.new
|
|
95
|
+
@netqueue_lock = Mutex.new
|
|
96
|
+
@dh_key = OpenSSL::PKey::DH.new(512)
|
|
97
|
+
@nfqueue = start
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def acquire_cert(host, port)
|
|
101
|
+
|
|
102
|
+
begin
|
|
103
|
+
tcp_socket = TCPSocket.new( host, port )
|
|
104
|
+
tcp_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
|
|
105
|
+
tcp_socket.sync = true
|
|
106
|
+
ctx = OpenSSL::SSL::SSLContext.new()
|
|
107
|
+
|
|
108
|
+
ctx.tmp_dh_callback = proc { |*args|
|
|
109
|
+
@dh_key
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
socket = OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx)
|
|
113
|
+
|
|
114
|
+
socket.connect
|
|
115
|
+
#socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
|
|
116
|
+
sk = "#{host}:#{port}"
|
|
117
|
+
cert = socket.peer_cert
|
|
118
|
+
@netqueue_lock.synchronize do
|
|
119
|
+
@cert_list[sk] = cert
|
|
120
|
+
end
|
|
121
|
+
# puts cert.subject.methods.sort
|
|
122
|
+
return cert
|
|
123
|
+
|
|
124
|
+
rescue => bang
|
|
125
|
+
puts bang
|
|
126
|
+
puts bang.backtrace if $DEBUG
|
|
127
|
+
end
|
|
128
|
+
return nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def start
|
|
132
|
+
|
|
133
|
+
puts "starting netfilter_queue ..."
|
|
134
|
+
t = Thread.new{
|
|
135
|
+
begin
|
|
136
|
+
Netfilter::Queue.create(0) do |p|
|
|
137
|
+
# puts ">> Netfilter Packet #" + p.id.to_s
|
|
138
|
+
# $stdout.flush
|
|
139
|
+
# puts p.data.class
|
|
140
|
+
raw_src = p.data[12..15]
|
|
141
|
+
raw_dst = p.data[16..19]
|
|
142
|
+
src_port = p.data[20..21].unpack("H4")[0].hex
|
|
143
|
+
dst_port = p.data[22..24].unpack("H4")[0].hex
|
|
144
|
+
# if p.data.length > 47
|
|
145
|
+
# flags = p.data[47].unpack("H*")[0].hex
|
|
146
|
+
# puts flags.to_s
|
|
147
|
+
# if flags == 2
|
|
148
|
+
# puts "ADD SSL REQUEST"
|
|
149
|
+
puts "NFQ >> #{get_ip_string(raw_src)}:#{src_port} -> #{get_ip_string(raw_dst)}:#{dst_port}"
|
|
150
|
+
add_ssl_request(get_ip_string(raw_src), src_port, get_ip_string(raw_dst), dst_port)
|
|
151
|
+
|
|
152
|
+
Netfilter::Packet::ACCEPT
|
|
153
|
+
end
|
|
154
|
+
rescue => bang
|
|
155
|
+
puts bang
|
|
156
|
+
puts bang.backtrace
|
|
157
|
+
# retry
|
|
158
|
+
rescue Netfilter::QueueError
|
|
159
|
+
puts "NetfilterERROR"
|
|
160
|
+
exit
|
|
161
|
+
end
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
t
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
private
|
|
168
|
+
|
|
169
|
+
def get_ip_string(raw_addr)
|
|
170
|
+
begin
|
|
171
|
+
ip = ""
|
|
172
|
+
raw_addr.length.times do |i|
|
|
173
|
+
ip << "." unless ip.empty?
|
|
174
|
+
ip << raw_addr[i].ord.to_s
|
|
175
|
+
end
|
|
176
|
+
rescue => bang
|
|
177
|
+
puts bang
|
|
178
|
+
puts bang.backtrace
|
|
179
|
+
end
|
|
180
|
+
ip
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
DRb.start_service "druby://127.0.0.1:666", Watobo::NFQ::Connections.new
|
|
189
|
+
#puts DRb.uri
|
|
190
|
+
DRb.thread.join
|
|
191
|
+
|
data/config/interceptor.yml
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
:cert_file: cert.pem
|
|
2
|
-
:key_file: privkey.pem
|
|
3
|
-
:dh_key_file: watobo_dh.key
|
|
4
1
|
:pass_through:
|
|
5
2
|
:content_types:
|
|
6
3
|
- application\/audio
|
|
@@ -10,7 +7,6 @@
|
|
|
10
7
|
- application\/.*flash
|
|
11
8
|
- image\/
|
|
12
9
|
:content_length: 100000
|
|
13
|
-
:certificate_path: certificates
|
|
14
10
|
:port: 8081
|
|
15
|
-
:
|
|
16
|
-
|
|
11
|
+
:proxy_mode: 1
|
|
12
|
+
:bind_addr: "127.0.0.1"
|
|
@@ -22,15 +22,18 @@
|
|
|
22
22
|
module Watobo
|
|
23
23
|
class FileSessionStore < SessionStore
|
|
24
24
|
def num_chats
|
|
25
|
-
get_file_list(@conversation_path, "*-chat").length
|
|
25
|
+
get_file_list(@conversation_path, "*-chat*").length
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def num_findings
|
|
29
|
-
get_file_list(@findings_path, "*-finding").length
|
|
29
|
+
get_file_list(@findings_path, "*-finding*").length
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def add_finding(finding)
|
|
33
|
-
|
|
33
|
+
return false unless finding.respond_to? :request
|
|
34
|
+
return false unless finding.respond_to? :response
|
|
35
|
+
|
|
36
|
+
finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
|
|
34
37
|
if not File.exists?(finding_file) then
|
|
35
38
|
|
|
36
39
|
finding_data = {
|
|
@@ -40,23 +43,24 @@ module Watobo
|
|
|
40
43
|
}
|
|
41
44
|
finding_data[:details].update(finding.details)
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
end
|
|
46
|
+
fh = File.new(finding_file, "w+b")
|
|
47
|
+
fh.print YAML.dump(finding_data)
|
|
48
|
+
fh.close
|
|
49
|
+
return true
|
|
48
50
|
end
|
|
49
|
-
|
|
51
|
+
return false
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
def delete_finding(finding)
|
|
53
55
|
finding_file = File.join("#{@findings_path}", "#{finding.id}-finding")
|
|
54
56
|
File.delete finding_file if File.exist? finding_file
|
|
57
|
+
finding_file << ".yml"
|
|
58
|
+
File.delete finding_file if File.exist? finding_file
|
|
55
59
|
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def update_finding(finding)
|
|
59
|
-
finding_file = File.join("#{@findings_path}", "#{finding.id}-finding")
|
|
63
|
+
finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
|
|
60
64
|
finding_data = {
|
|
61
65
|
:request => finding.request.map{|x| x.inspect},
|
|
62
66
|
:response => finding.response.map{|x| x.inspect},
|
|
@@ -77,20 +81,22 @@ module Watobo
|
|
|
77
81
|
# needs a scan_name (STRING) as its destination which will be created
|
|
78
82
|
# if the scan name does not exist.
|
|
79
83
|
def add_scan_log(chat, scan_name = nil)
|
|
84
|
+
return false unless chat.respond_to? :request
|
|
85
|
+
return false unless chat.respond_to? :response
|
|
80
86
|
begin
|
|
81
87
|
return false if scan_name.nil?
|
|
82
|
-
|
|
88
|
+
# puts ">> scan_name"
|
|
83
89
|
path = File.join(@scanlog_path, scan_name)
|
|
84
90
|
|
|
85
91
|
Dir.mkdir path unless File.exist? path
|
|
86
92
|
|
|
87
|
-
log_file = File.join( path, "log_" + Time.now.to_f.to_s)
|
|
93
|
+
log_file = File.join( path, "log_" + Time.now.to_f.to_s + ".yml")
|
|
88
94
|
|
|
89
95
|
chat_data = {
|
|
90
96
|
:request => chat.request.map{|x| x.inspect},
|
|
91
97
|
:response => chat.response.map{|x| x.inspect},
|
|
92
98
|
}
|
|
93
|
-
|
|
99
|
+
# puts log_file
|
|
94
100
|
chat_data.update(chat.settings)
|
|
95
101
|
File.open(log_file, "w") { |fh|
|
|
96
102
|
YAML.dump(chat_data, fh)
|
|
@@ -104,7 +110,8 @@ module Watobo
|
|
|
104
110
|
end
|
|
105
111
|
|
|
106
112
|
def add_chat(chat)
|
|
107
|
-
|
|
113
|
+
return false unless chat_valid? chat
|
|
114
|
+
chat_file = File.join("#{@conversation_path}", "#{chat.id}-chat.yml")
|
|
108
115
|
chat_data = {
|
|
109
116
|
:request => chat.request.map{|x| x.inspect},
|
|
110
117
|
:response => chat.response.map{|x| x.inspect},
|
|
@@ -116,11 +123,13 @@ module Watobo
|
|
|
116
123
|
YAML.dump(chat_data, fh)
|
|
117
124
|
}
|
|
118
125
|
chat.file = chat_file
|
|
126
|
+
return true
|
|
119
127
|
end
|
|
128
|
+
return false
|
|
120
129
|
end
|
|
121
130
|
|
|
122
131
|
def each_chat(&block)
|
|
123
|
-
get_file_list(@conversation_path, "*-chat").each do |fname|
|
|
132
|
+
get_file_list(@conversation_path, "*-chat*").each do |fname|
|
|
124
133
|
chat = Watobo::Utils.loadChatYAML(fname)
|
|
125
134
|
next unless chat
|
|
126
135
|
yield chat if block_given?
|
|
@@ -128,7 +137,7 @@ module Watobo
|
|
|
128
137
|
end
|
|
129
138
|
|
|
130
139
|
def each_finding(&block)
|
|
131
|
-
get_file_list(@findings_path, "*-finding").each do |fname|
|
|
140
|
+
get_file_list(@findings_path, "*-finding*").each do |fname|
|
|
132
141
|
f = Watobo::Utils.loadFindingYAML(fname)
|
|
133
142
|
next unless f
|
|
134
143
|
yield f if block_given?
|
|
@@ -146,7 +155,7 @@ module Watobo
|
|
|
146
155
|
Dir.mkdir(@project_path)
|
|
147
156
|
end
|
|
148
157
|
|
|
149
|
-
@project_config_path = File.join(@project_path, "config")
|
|
158
|
+
@project_config_path = File.join(@project_path, ".config")
|
|
150
159
|
Dir.mkdir @project_config_path unless File.exist? @project_config_path
|
|
151
160
|
|
|
152
161
|
@session_path = File.join(@project_path, session_name)
|
|
@@ -156,7 +165,7 @@ module Watobo
|
|
|
156
165
|
Dir.mkdir(@session_path)
|
|
157
166
|
end
|
|
158
167
|
|
|
159
|
-
@session_config_path = File.join(@session_path, "config")
|
|
168
|
+
@session_config_path = File.join(@session_path, ".config")
|
|
160
169
|
Dir.mkdir @session_config_path unless File.exist? @session_config_path
|
|
161
170
|
|
|
162
171
|
sext = Watobo::Conf::General.session_settings_file_ext
|
|
@@ -190,51 +199,51 @@ module Watobo
|
|
|
190
199
|
end
|
|
191
200
|
|
|
192
201
|
def save_session_settings(group, session_settings)
|
|
193
|
-
|
|
202
|
+
# puts ">> save_session_settings <<"
|
|
194
203
|
file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
|
|
195
204
|
file << ".yml"
|
|
196
205
|
|
|
197
206
|
session_file = File.join(@session_config_path, file)
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
207
|
+
# puts "Dest.File: #{session_file}"
|
|
208
|
+
# puts session_settings.to_yaml
|
|
209
|
+
# puts "---"
|
|
201
210
|
Watobo::Utils.save_settings(session_file, session_settings)
|
|
202
211
|
end
|
|
203
212
|
|
|
204
213
|
def load_session_settings(group)
|
|
205
|
-
|
|
214
|
+
# puts ">> load_session_settings : #{group}"
|
|
206
215
|
file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
|
|
207
216
|
file << ".yml"
|
|
208
217
|
|
|
209
218
|
session_file = File.join(@session_config_path, file)
|
|
210
|
-
|
|
211
|
-
|
|
219
|
+
# puts "File: #{session_file}"
|
|
220
|
+
# puts "---"
|
|
212
221
|
|
|
213
222
|
s = Watobo::Utils.load_settings(session_file)
|
|
214
223
|
s
|
|
215
224
|
end
|
|
216
225
|
|
|
217
226
|
def save_project_settings(group, project_settings)
|
|
218
|
-
|
|
227
|
+
# puts ">> save_project_settings : #{group}"
|
|
219
228
|
file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
|
|
220
229
|
file << ".yml"
|
|
221
230
|
|
|
222
231
|
project_file = File.join(@project_config_path, file)
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
232
|
+
# puts "Dest.File: #{project_file}"
|
|
233
|
+
# puts project_settings.to_yaml
|
|
234
|
+
# puts "---"
|
|
226
235
|
Watobo::Utils.save_settings(project_file, project_settings)
|
|
227
236
|
|
|
228
237
|
end
|
|
229
238
|
|
|
230
239
|
def load_project_settings(group)
|
|
231
|
-
|
|
240
|
+
# puts ">> load_project_settings : #{group}"
|
|
232
241
|
file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
|
|
233
242
|
file << ".yml"
|
|
234
243
|
|
|
235
244
|
project_file = File.join(@project_config_path, file)
|
|
236
|
-
|
|
237
|
-
|
|
245
|
+
# puts "File: #{project_file}"
|
|
246
|
+
# puts "---"
|
|
238
247
|
|
|
239
248
|
s = Watobo::Utils.load_settings(project_file)
|
|
240
249
|
s
|
|
@@ -243,8 +252,16 @@ module Watobo
|
|
|
243
252
|
|
|
244
253
|
private
|
|
245
254
|
|
|
255
|
+
def chat_valid?(chat)
|
|
256
|
+
return false unless chat.respond_to? :request
|
|
257
|
+
return false unless chat.respond_to? :response
|
|
258
|
+
true
|
|
259
|
+
end
|
|
260
|
+
|
|
246
261
|
def get_file_list(path, pattern)
|
|
247
|
-
Dir["#{path}/#{pattern}"].sort_by{ |x| File.basename(x).sub(/[^0-9]*/,'').to_i }
|
|
262
|
+
fl = Dir["#{path}/#{pattern}"].sort_by{ |x| File.basename(x).sub(/[^0-9]*/,'').to_i }
|
|
263
|
+
#puts fl.length
|
|
264
|
+
fl
|
|
248
265
|
end
|
|
249
266
|
|
|
250
267
|
end
|
data/lib/watobo/ca.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# .
|
|
2
|
+
# ca.rb
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2012 by siberas, http://www.siberas.de
|
|
5
|
+
#
|
|
6
|
+
# This file is part of WATOBO (Web Application Tool Box)
|
|
7
|
+
# http://watobo.sourceforge.com
|
|
8
|
+
#
|
|
9
|
+
# WATOBO is free software; you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation version 2 of the License.
|
|
12
|
+
#
|
|
13
|
+
# WATOBO is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with WATOBO; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# .
|
|
22
|
+
require 'watobo/core/ca.rb'
|
data/lib/watobo/config.rb
CHANGED
|
@@ -91,6 +91,8 @@ module Watobo
|
|
|
91
91
|
def self.save_project(data_store, *filter, &b)
|
|
92
92
|
raise ArgumentError, "Need a valid Watobo::DataStore" unless data_store.respond_to? :save_project_settings
|
|
93
93
|
s = filter_settings filter
|
|
94
|
+
# puts @settings.to_yaml
|
|
95
|
+
# puts s.to_yaml
|
|
94
96
|
data_store.save_project_settings(group_name, s)
|
|
95
97
|
end
|
|
96
98
|
|
|
@@ -175,6 +177,10 @@ module Watobo
|
|
|
175
177
|
def self.dump
|
|
176
178
|
@settings
|
|
177
179
|
end
|
|
180
|
+
|
|
181
|
+
def self.to_h
|
|
182
|
+
@settings
|
|
183
|
+
end
|
|
178
184
|
|
|
179
185
|
#@@settings = settings
|
|
180
186
|
def self.method_missing(name, *args, &block)
|