diff --git a/data/gui/msfgui.jar b/data/gui/msfgui.jar index 5dd6b6f5d7..6a91b0242d 100644 Binary files a/data/gui/msfgui.jar and b/data/gui/msfgui.jar differ diff --git a/external/source/gui/msfguijava/src/msfgui/MainFrame.form b/external/source/gui/msfguijava/src/msfgui/MainFrame.form index afe8439e95..343fce2755 100644 --- a/external/source/gui/msfguijava/src/msfgui/MainFrame.form +++ b/external/source/gui/msfguijava/src/msfgui/MainFrame.form @@ -15,7 +15,7 @@ - + @@ -389,6 +389,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -836,7 +863,7 @@ - + diff --git a/external/source/gui/msfguijava/src/msfgui/MainFrame.java b/external/source/gui/msfguijava/src/msfgui/MainFrame.java index 3f351daea9..4214471f52 100644 --- a/external/source/gui/msfguijava/src/msfgui/MainFrame.java +++ b/external/source/gui/msfguijava/src/msfgui/MainFrame.java @@ -544,6 +544,8 @@ nameloop: for (int i = 0; i < names.length; i++) { }); lootsPane = new javax.swing.JScrollPane(); lootsTable = new javax.swing.JTable(); + credsPane = new javax.swing.JScrollPane(); + credsTable = new javax.swing.JTable(); menuBar = new javax.swing.JMenuBar(); javax.swing.JMenu fileMenu = new javax.swing.JMenu(); connectRpcMenuItem = new javax.swing.JMenuItem(); @@ -745,6 +747,28 @@ nameloop: for (int i = 0; i < names.length; i++) { tabbedPane.addTab(resourceMap.getString("lootsPane.TabConstraints.tabTitle"), lootsPane); // NOI18N + credsPane.setName("credsPane"); // NOI18N + + credsTable.setName("credsTable"); // NOI18N + credsTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Host", "Time", "Port", "Proto", "Sname", "Type", "User", "Pass", "Active" + } + ) { + public Class getColumnClass(int columnIndex) { + return java.lang.String.class; + } + public boolean isCellEditable(int i,int j) { + return false; + } + }); + credsPane.setViewportView(credsTable); + + tabbedPane.addTab(resourceMap.getString("credsPane.TabConstraints.tabTitle"), credsPane); // NOI18N + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); mainPanel.setLayout(mainPanelLayout); mainPanelLayout.setHorizontalGroup( @@ -753,7 +777,7 @@ nameloop: for (int i = 0; i < names.length; i++) { ); mainPanelLayout.setVerticalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE) + .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 530, Short.MAX_VALUE) ); menuBar.setName("menuBar"); // NOI18N @@ -1136,7 +1160,7 @@ nameloop: for (int i = 0; i < names.length; i++) { .addGroup(statusPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(statusMessageLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 712, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 696, Short.MAX_VALUE) .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(statusAnimationLabel) @@ -1249,6 +1273,7 @@ nameloop: for (int i = 0; i < names.length; i++) { reAddQuery(servicesTable, 4, "services", new String[]{"host","created_at","updated_at","port","proto","state","name","info"}); reAddQuery(vulnsTable,5,"vulns",new String[]{"port","proto","time","host","name","refs"}); reAddQuery(notesTable,7,"notes",new String[]{"time", "host", "service", "type", "data"}); + reAddQuery(credsTable,9,"creds",new String[]{"host", "time", "port", "proto", "sname", "type", "user", "pass", "active"}); } private void refreshItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshItemActionPerformed @@ -1730,6 +1755,8 @@ nameloop: for (int i = 0; i < names.length; i++) { private javax.swing.JMenuItem connectItem; private javax.swing.JMenuItem connectRpcMenuItem; private javax.swing.JMenu consoleMenu; + private javax.swing.JScrollPane credsPane; + private javax.swing.JTable credsTable; private javax.swing.JMenuItem currWorkspaceItem; private javax.swing.JMenu databaseMenu; private javax.swing.JMenuItem dbCredcollectItem; diff --git a/external/source/gui/msfguijava/src/msfgui/resources/MainFrame.properties b/external/source/gui/msfguijava/src/msfgui/resources/MainFrame.properties index f19edcc333..1794eca523 100644 --- a/external/source/gui/msfguijava/src/msfgui/resources/MainFrame.properties +++ b/external/source/gui/msfguijava/src/msfgui/resources/MainFrame.properties @@ -92,3 +92,4 @@ currWorkspaceItem.text=Select Workspace addWorkspaceItem.text=Add Workspace delWorkspaceItem.text=Delete Workspace refreshConsolesItem.text=Refresh Existing +credsPane.TabConstraints.tabTitle=Creds diff --git a/lib/msf/core/rpc/db.rb b/lib/msf/core/rpc/db.rb index d6be1a2051..b940fa0a8e 100644 --- a/lib/msf/core/rpc/db.rb +++ b/lib/msf/core/rpc/db.rb @@ -948,7 +948,7 @@ public opts[:service] = @framework.db.find_or_create_service(opts) end - ret = @framework.db.report_loot(opts) + res = @framework.db.report_loot(opts) return { :result => 'success' } if(res) end @@ -974,6 +974,39 @@ public end ret end + + # requires host, port, user, pass, ptype, and active + def report_cred(token,xopts) + authenticate(token) + raise ::XMLRPC::FaultException.new(404, "database not loaded") if(not db) + opts = fixOpts(xopts) + res = framework.db.find_or_create_cred(opts) + return { :result => 'success' } if(res) + { :result => 'failed' } + end + #right now workspace is the only option supported + def creds(token,xopts) + authenticate(token) + raise ::XMLRPC::FaultException.new(404, "database not loaded") if(not db) + opts = fixOpts(xopts) + wspace = workspace(opts[:workspace]) + ret = {} + ret[:creds] = [] + @framework.db.creds(wspace).each do |c| + cred = {} + cred[:host] = cred.service.host.address || cred.service.host.address6 if(cred.service.host) + cred[:time] = cred.updated_at + cred[:port] = cred.service.port + cred[:proto] = cred.service.proto + cred[:sname] = cred.service.name + cred[:type] = cred.ptype + cred[:user] = cred.user + cred[:pass] = cred.pass + cred[:active] = cred.active + ret[:creds] << cred + end + ret + end def import_data(token,xopts) authenticate(token) raise ::XMLRPC::FaultException.new(404, "database not loaded") if(not db)