Land #5734, notes -o

bug/bundler_fix
William Vu 2015-07-22 13:52:40 -05:00
commit fe67be0ece
No known key found for this signature in database
GPG Key ID: 68BD00CE25866743
2 changed files with 45 additions and 1 deletions

View File

@ -1176,6 +1176,7 @@ class Db
print_line " -h,--help Show this help information"
print_line " -R,--rhosts Set RHOSTS from the results of the search"
print_line " -S,--search Regular expression to match for search"
print_line " -o,--output Save the notes to a csv file"
print_line " --sort <field1,field2> Fields to sort by (case sensitive)"
print_line
print_line "Examples:"
@ -1196,6 +1197,7 @@ class Db
host_ranges = []
rhosts = []
search_term = nil
out_file = nil
while (arg = args.shift)
case arg
@ -1222,6 +1224,8 @@ class Db
search_term = /#{args.shift}/nmi
when '--sort'
sort_term = args.shift
when '-o', '--output'
out_file = args.shift
when '-h','--help'
cmd_notes_help
return
@ -1231,7 +1235,6 @@ class Db
return
end
end
end
if mode == :add
@ -1308,12 +1311,21 @@ class Db
end
# Now display them
csv_table = Rex::Ui::Text::Table.new(
'Header' => 'Notes',
'Indent' => 1,
'Columns' => ['Time', 'Host', 'Service', 'Port', 'Protocol', 'Type', 'Data']
)
note_list.each do |note|
next if(types and types.index(note.ntype).nil?)
csv_note = []
msg = "Time: #{note.created_at} Note:"
csv_note << note.created_at if out_file
if (note.host)
host = note.host
msg << " host=#{note.host.address}"
csv_note << note.host.address if out_file
if set_rhosts
addr = (host.scope ? host.address + '%' + host.scope : host.address )
rhosts << addr
@ -1321,17 +1333,37 @@ class Db
end
if (note.service)
msg << " service=#{note.service.name}" if note.service.name
csv_note << note.service.name || '' if out_file
msg << " port=#{note.service.port}" if note.service.port
csv_note << note.service.port || '' if out_file
msg << " protocol=#{note.service.proto}" if note.service.proto
csv_note << note.service.proto || '' if out_file
else
if out_file
csv_note << '' # For the Service field
csv_note << '' # For the Port field
csv_note << '' # For the Protocol field
end
end
msg << " type=#{note.ntype} data=#{note.data.inspect}"
if out_file
csv_note << note.ntype
csv_note << note.data.inspect
end
print_status(msg)
if out_file
csv_table << csv_note
end
if mode == :delete
note.destroy
delete_count += 1
end
end
if out_file
save_csv_notes(out_file, csv_table)
end
# Finally, handle the case where the user wants the resulting list
# of hosts to go into RHOSTS.
set_rhosts_from_addrs(rhosts.uniq) if set_rhosts
@ -1340,6 +1372,17 @@ class Db
}
end
def save_csv_notes(fpath, csv_table)
begin
File.open(fpath, 'wb') do |f|
f.write(csv_table.to_csv)
end
print_status("Notes saved as #{fpath}")
rescue Errno::EACCES => e
print_error("Unable to save notes. #{e.message}")
end
end
def make_sortable(input)
case input
when String

View File

@ -435,6 +435,7 @@ describe Msf::Ui::Console::CommandDispatcher::Db do
" -h,--help Show this help information",
" -R,--rhosts Set RHOSTS from the results of the search",
" -S,--search Regular expression to match for search",
" -o,--output Save the notes to a csv file",
" --sort <field1,field2> Fields to sort by (case sensitive)",
"Examples:",
" notes --add -t apps -n 'winzip' 10.1.1.34 10.1.20.41",