Properly filter error messages which have changed,
escape options passed through command line, run database reload in separate thread, and make connecting to the database even more automagical. git-svn-id: file:///home/svn/framework3/trunk@13168 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
parent
338a13baac
commit
fdf6660a55
Binary file not shown.
|
@ -22,9 +22,23 @@ public class DbConnectDialog extends OptionsDialog {
|
|||
//Opens dialog to get options
|
||||
public static boolean connect(Frame parent, RpcConnection rpcConn){
|
||||
DbConnectDialog cd = new DbConnectDialog(parent, rpcConn, true);
|
||||
try{
|
||||
if(cd.tryConnect())
|
||||
return true;
|
||||
} catch (MsfException mex) { // on error connecting, show dialog
|
||||
}
|
||||
cd.setVisible(true);
|
||||
return cd.success;
|
||||
}
|
||||
//Tries to connect without opening a dialog
|
||||
public static boolean tryConnect(Frame parent, RpcConnection rpcConn){
|
||||
DbConnectDialog cd = new DbConnectDialog(parent, rpcConn, true);
|
||||
try{
|
||||
return cd.tryConnect();
|
||||
} catch (MsfException mex) { // on error connecting, show dialog
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/** Creates new form DbConnectDialog */
|
||||
public DbConnectDialog(Frame parent, RpcConnection rpcConn, boolean modal) {
|
||||
super(parent, "Database Connection Options", modal);
|
||||
|
@ -240,23 +254,27 @@ public class DbConnectDialog extends OptionsDialog {
|
|||
}
|
||||
|
||||
private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectButtonActionPerformed
|
||||
try {
|
||||
success = tryConnect();
|
||||
if (!success)
|
||||
MsfguiApp.showMessage(myParent, "Failure connecting to database!");
|
||||
} catch (MsfException mex) {
|
||||
MsfguiApp.showMessage(myParent, mex);
|
||||
}
|
||||
setVisible(false);
|
||||
}
|
||||
/** Tries to connect to the database with given credentials */
|
||||
private boolean tryConnect() throws MsfException{
|
||||
HashMap opts = new HashMap();
|
||||
addNonempty("host",hostField, opts);
|
||||
addNonempty("host", hostField, opts);
|
||||
addNonempty("port", portField, opts);
|
||||
addNonempty("username", usernameField, opts);
|
||||
addNonempty("password", passwordField, opts);
|
||||
addNonempty("database", dbNameField, opts);
|
||||
opts.put("driver", typeSpinner.getValue().toString());
|
||||
props.put("dbdriver", typeSpinner.getValue().toString());
|
||||
try{
|
||||
Map res = (Map)rpcConn.execute("db.connect",opts);
|
||||
success = "success".equals(res.get("result"));
|
||||
if(!success)
|
||||
MsfguiApp.showMessage(myParent, res);
|
||||
}catch(MsfException mex){
|
||||
MsfguiApp.showMessage(myParent, mex);
|
||||
}
|
||||
setVisible(false);
|
||||
Map res = (Map) rpcConn.execute("db.connect",opts);
|
||||
return "success".equals(res.get("result"));
|
||||
}//GEN-LAST:event_connectButtonActionPerformed
|
||||
|
||||
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
|
||||
|
|
|
@ -153,7 +153,7 @@ public class InteractWindow extends MsfFrame implements ClipboardOwner {
|
|||
}
|
||||
publish(received);
|
||||
} catch (MsfException ex) {
|
||||
if(!ex.getMessage().equals("unknown session"))
|
||||
if(!ex.getMessage().contains("unknown session"))
|
||||
MsfguiApp.showMessage(null, ex);
|
||||
if(!ex.getMessage().contains("timed out")) // on timeout, just retry
|
||||
timerCommand.setCharAt(0, STOP_POLLING);
|
||||
|
|
|
@ -192,6 +192,8 @@ public class MainFrame extends FrameView {
|
|||
Thread.sleep(delay);
|
||||
//update sessions
|
||||
Map slist = (Map) rpcConn.execute("session.list");
|
||||
if(statusMessageLabel.getText().contains("timed out"))
|
||||
publish(""); // If last attempt was a timeout, reset since we're rollin again
|
||||
ArrayList sessionList = new ArrayList();
|
||||
for (Object sid : slist.keySet()) {
|
||||
Map session = (Map) slist.get(sid);
|
||||
|
@ -230,9 +232,11 @@ public class MainFrame extends FrameView {
|
|||
publish((Object)jobStrings);
|
||||
} catch (MsfException msfEx) {
|
||||
msfEx.printStackTrace();
|
||||
publish("Error getting session list"+msfEx);
|
||||
publish("Error getting session list "+msfEx);
|
||||
if(!msfEx.getMessage().contains("timed out")) // on timeout, just retry
|
||||
return new ArrayList();
|
||||
else
|
||||
publish("Timeout getting session list. Retrying...");
|
||||
} catch (InterruptedException iex){
|
||||
}
|
||||
}
|
||||
|
@ -412,21 +416,23 @@ nameloop: for (int i = 0; i < names.length; i++) {
|
|||
meterpreterPopupMenu.add(postModMenu,4);
|
||||
expandList((List) ((Map)rpcConn.execute("module.post")).get("modules"), postModMenu, moduleFactory, "post");
|
||||
setProgress(0.85f);
|
||||
setMessage("Querying database...");
|
||||
// Enable menus
|
||||
postMenu.setEnabled(true);
|
||||
|
||||
databaseMenu.setEnabled(true);
|
||||
pluginsMenu.setEnabled(true);
|
||||
consoleMenu.setEnabled(true);
|
||||
reloadDb();
|
||||
setProgress(0.95f);
|
||||
setMessage("Finding open consoles");
|
||||
refreshConsoles();
|
||||
consoleMenu.setEnabled(true);
|
||||
|
||||
setMessage("Querying database...");
|
||||
//First try to connect to the database
|
||||
DbConnectDialog.tryConnect(getFrame(), rpcConn);
|
||||
reloadDb();
|
||||
if(MainFrame.this.closeConsoleMenu.getItemCount() == 0 && !tabbedPane.isEnabledAt(3)){
|
||||
registerConsole( (Map)rpcConn.execute("console.create"), false, "");
|
||||
reloadDb();
|
||||
}
|
||||
setProgress(0.95f);
|
||||
databaseMenu.setEnabled(true);
|
||||
pluginsMenu.setEnabled(true);
|
||||
setProgress(1.0f);
|
||||
} catch (MsfException ex) {
|
||||
statusAnimationLabel.setText("Error getting module lists. " + ex);
|
||||
|
@ -1262,7 +1268,12 @@ nameloop: for (int i = 0; i < names.length; i++) {
|
|||
|
||||
private void connectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectItemActionPerformed
|
||||
if(DbConnectDialog.connect(getFrame(), rpcConn))
|
||||
reloadDb();
|
||||
new SwingWorker(){
|
||||
protected Object doInBackground() throws Exception {
|
||||
reloadDb();
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
}//GEN-LAST:event_connectItemActionPerformed
|
||||
|
||||
/** Refreshes the database tables. */
|
||||
|
@ -1608,7 +1619,7 @@ nameloop: for (int i = 0; i < names.length; i++) {
|
|||
}
|
||||
});
|
||||
jobsList.addMouseListener( new PopupMouseListener() {
|
||||
public void mouseClicked(MouseEvent e){
|
||||
public void mouseReleased(MouseEvent e){
|
||||
int indx = jobsList.locationToIndex(e.getPoint());
|
||||
if (indx == -1)
|
||||
return;
|
||||
|
|
|
@ -262,7 +262,7 @@ public class MeterpFileBrowser extends MsfFrame {
|
|||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
if(ex.getMessage().equals("unknown session"))
|
||||
if(ex.getMessage().contains("unknown session"))
|
||||
readTimer.stop();
|
||||
MsfguiApp.showMessage(null, ex);
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@ public abstract class ModuleInfoWindow extends MsfFrame {
|
|||
for (Object entObj : hash.entrySet()) {
|
||||
Map.Entry ent = (Map.Entry) entObj;
|
||||
if (!(ent.getKey().toString().equals("TARGET")) && !(ent.getKey().toString().equals("PAYLOAD")))
|
||||
autoCommands.add("set " + ent.getKey() + " " + ent.getValue());
|
||||
autoCommands.add("set " + ent.getKey() + " " + MsfguiApp.escapeBackslashes(ent.getValue().toString()));
|
||||
}
|
||||
autoCommands.add("exploit");
|
||||
InteractWindow iw = new InteractWindow(rpcConn, res, autoCommands);
|
||||
|
|
|
@ -105,7 +105,7 @@ public class ProcessList extends MsfFrame {
|
|||
} catch(NullPointerException nex){ //junk data from previous command? Ignore.
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
if (ex.getMessage().equals("unknown session"))
|
||||
if (ex.getMessage().contains("unknown session"))
|
||||
readTimer.stop();
|
||||
MsfguiApp.showMessage(null, ex.getMessage());
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ public class ProcessList extends MsfFrame {
|
|||
rpcConn.execute("session.meterpreter_run_single", session.get("id"),cmd);
|
||||
} catch (Exception ex) {
|
||||
MsfguiApp.showMessage(this, ex);
|
||||
if (ex.getMessage().equals("unknown session"))
|
||||
if (ex.getMessage().contains("unknown session"))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue