• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Lotus и SQL

  • Автор темы allex
  • Дата начала
A

allex

Класс представляет собой связку Notes и SQL. Агент запускается при активировании ссылки [http://host/db.nsf/agent?OpenAgent&id=111111]. Далее происходит обработка запроса к SQL по полученному праметру id=111111, затем в базе Domino создается notes-документ с параметрами выбранными из запроса

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Java class по работе Notes&SQL </div></div><div class="sp-body"><div class="sp-content">
<!--shcode--><pre><code class='java'>import lotus.domino.*;
import java.util.Vector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.net.*;
import java.io.*;
import java.util.*;

public class JavaAgent extends AgentBase {

public static java.util.Hashtable parseQueryString(String queryString) {
StringTokenizer tokens = new StringTokenizer(queryString, "&");
Hashtable params = new Hashtable();
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken();
int equalIdx = token.indexOf('=');
if (equalIdx != -1 && !token.equalsIgnoreCase("OpenAgent")) {
String name = token.substring(0, equalIdx);
System.out.println("name " + name);
String value = token.substring(equalIdx + 1);
System.out.println("value " + value);
params.put(name, value);
}
}
return params;
}

public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document webdoc = agentContext.getDocumentContext();
PrintWriter pw = getAgentOutput();
// System.out.println("сессии инициировались");

String qs = webdoc.getItemValueString("Query_String");
java.util.Hashtable ht = parseQueryString(qs);
String id = (String) ht.get("id");
// pw.println("ID : " + id);

try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Драйвер загружен");

Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://conect);
System.out.println("Подключение установлено");

Statement stmt = null;
try {
stmt = conn.createStatement();
System.out.println("id " + id);
String Query = "SELECT * FROM pr_data WHERE auth = " + '"'+id+ '"';// + " ORDER BY id";
//String Query = "SELECT * FROM pr_data";
System.out.println("Запрос " + Query);

ResultSet rs = null;
try {
rs = stmt.executeQuery(Query);
System.out.println("Запрос выполняется");

Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();

while (rs.next()) {
int theid= rs.getInt("id");
String fname = rs.getString("fname");
String mname = rs.getString("mname");
String lname = rs.getString("lname");
String message = rs.getString("message");
String email = rs.getString("email");
String auth = rs.getString("auth");
String pindex = rs.getString("pindex");
String pregion = rs.getString("pregion");
String plocality = rs.getString("plocality");
String pstreet = rs.getString("pstreet");
String phome = rs.getString("phome");
String pcorps = rs.getString("pcorps");
String pflat = rs.getString("pflat");
System.out.println("Переменные присвоены");
System.out.println("auth_code = " + auth );
System.out.println("id = " + theid + " ---> ФИО = " + fname + " " + mname +" "+ lname);
System.out.println("id = " + theid + " ---> Почтовый адрес = " + pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);
System.out.println("id = " + theid + " ---> Электронныйый адрес = " + email);
System.out.println("id = " + theid + " ---> Текст обращения = " + message );
System.out.println("_________________________________");

doc.replaceItemValue("Form", "rlo");
doc.replaceItemValue("auth", id);
doc.replaceItemValue("FIO", fname + " " + mname +" "+ lname);
doc.replaceItemValue("Address", pindex +" "+ pregion +" "+ plocality +" ул."+ pstreet +" д."+ phome +" корп."+ pcorps +" кв."+ pflat);
doc.replaceItemValue("email", email);
doc.replaceItemValue("Annotation", message);
doc.computeWithForm(false, false);
doc.save();
}
}
catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally {
if (rs != null) {
try {
rs.close();
}
catch (SQLException ex) {}
rs = null;
}
}
}
finally {
if (stmt != null) {
try {
stmt.close();
}
catch (SQLException ex) {}
stmt = null;
} //if
} //finally
}
catch (SQLException ex) {
System.out.println("On connect SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}

}
catch (Exception ex) {
System.out.println("SQLException: " + ex.getMessage());
}
}
catch(Exception e) {
e.printStackTrace();
}
}

}[/CODE]
 
H

HelenHelen

Добрый день!

Во-первых, хочу поблагодарить автора за выложенный код - именно то, что мне сейчас нужно! Отлаживаю для своей задачи, и есть вопрос: как должен формироваться параметр url базы, к которой производится подключение? У Вас так написано:

conn = DriverManager.getConnection("jdbc:mysql://conect);

По джавовской документации нужно формировать этот параметр в виде:

public static Connection getConnection(String url), где url - a database url of the form jdbc:subprotocol:subname

Сабпротокол - mysql, как я понимаю. Как правильно сформировать сабнейм? Нужно там каким-то образом указать имя ODBC-коннектора и имя базы, к которой нужно прицепиться. Логин - пароль зафиксированы в коннекторе.

Заранее спасибо!
 
K

Kee_Keekkenen

ну, можно и так например, получать коннекшн
Код:
String SQL_CONNECTION_PATTERN = "jdbc:mysql://%s:%s/%s";

SimpleDataSource ds = new SimpleDataSource(String.format(SQL_CONNECTION_PATTERN, sqlServerHost, sqlServerPort, sqlDbName), sqlServerUser, sqlServerPwd);

Connection connection = ds.getConnection();
 
B

beloff

Может кому пригодится интеграция с vTiger CRM (java агент c использованием apache commons)
Java:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;

import org.apache.commons.dbcp.BasicDataSource;
import lotus.domino.*;

public class JavaAgent extends AgentBase {
    int a;
    String b;
    java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());
    public void NotesMain() {
            
        try {
            Session session = getSession();
            Database db = session.getCurrentDatabase();
            BasicDataSource datasource = new BasicDataSource();
            datasource.setUrl("jdbc:mysql://172.20.237.48:3306/vtigercrm");
            datasource.setUsername("root");
            datasource.setPassword("Qw123456");
            Connection connection = datasource.getConnection();
            View view = db.getView("CompanyName");
            ViewEntryCollection vec = view.getAllEntries();
            
            for (int i=1; i <= vec.getCount();i++){
                try{
                Document doc = vec.getNthEntry(i).getDocument();
                PreparedStatement pstmtsel = connection.prepareStatement("SELECT accountid FROM vtiger_accountscf WHERE accountid=(SELECT MAX(accountid) FROM vtiger_accountscf)");
                ResultSet resultSet = pstmtsel.executeQuery();
                if(resultSet.next()){
                    a = resultSet.getInt(1);
                    a=a+i; //next int
                    b = ""+a;
                    }
                pstmtsel.close();
                // INSERT
                PreparedStatement pstmt = connection.prepareStatement("INSERT INTO vtiger_account  (accountid,account_no,accountname,parentid,phone,fax,employees,emailoptout,notify_owner,isconvertedfromlead) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                pstmt.setString(2, "ACC3");
                pstmt.setString(3, doc.getItemValueString("CompanyBadName"));
                pstmt.setString(4, "0");
                pstmt.setString(5, doc.getItemValueString("Com_ComPhone"));
                pstmt.setString(6, doc.getItemValueString("Com_ComFax"));
                pstmt.setString(7, "0");
                pstmt.setString(8, "0");
                pstmt.setString(9, "0");
                pstmt.setString(10, "0");
                try {
                    pstmt.execute();
                    connection.commit();
                }
                catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                
                pstmt = connection.prepareStatement("INSERT INTO vtiger_accountbillads(accountaddressid,bill_city,bill_code,bill_country,bill_state,bill_street) VALUES (?, ?, ?, ?, ?, ?)");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                pstmt.setString(2, doc.getItemValueString("Com_ComCity"));
                pstmt.setString(3, doc.getItemValueString("Com_ComZip"));
                pstmt.setString(4, doc.getItemValueString("Com_ComCountryName"));
                pstmt.setString(5, "");
                pstmt.setString(6, doc.getItemValueString("Com_ComAddress"));
                try {
                    pstmt.execute();
                    connection.commit();
                }
                catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                pstmt = connection.prepareStatement("INSERT INTO vtiger_crmentity(crmid,smcreatorid,smownerid,modifiedby,setype,description,createdtime,modifiedtime,version,presence,deleted,label) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                pstmt.setString(2, "1");
                pstmt.setString(3, "1");
                pstmt.setString(4, "1");
                pstmt.setString(5, "Accounts");
                pstmt.setString(6, "");
                pstmt.setDate(7, date);
                pstmt.setDate(8, date); //NOW
                pstmt.setString(9, "0");
                pstmt.setString(10, "1");
                pstmt.setString(11, "0");
                pstmt.setString(12, doc.getItemValueString("CompanyBadName"));
                try {
                    pstmt.execute();
                    connection.commit();
                }
                catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                pstmt = connection.prepareStatement("INSERT INTO vtiger_accountscf(accountid) VALUES (?)");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                try {
                    pstmt.execute();
                    connection.commit();
                }
                catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                pstmt = connection.prepareStatement("INSERT INTO vtiger_accountshipads(accountaddressid,ship_city,ship_code,ship_country,ship_state,ship_pobox,ship_street) VALUES (?, ?, ?, ?, ?, ?, ?)");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                pstmt.setString(2, doc.getItemValueString("Com_ComCity"));
                pstmt.setString(3, doc.getItemValueString("Com_ComZip"));
                pstmt.setString(4, doc.getItemValueString("Com_ComCountryName"));
                pstmt.setString(5, "");
                pstmt.setString(6, "");
                pstmt.setString(7, doc.getItemValueString("Com_ComAddress"));
                try {
                    pstmt.execute();
                    connection.commit();
                }
                catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                pstmt = connection.prepareStatement("UPDATE vtiger_crmentity_seq set id = ?");
                connection.setAutoCommit(false);
                pstmt.setString(1, b);
                try {
                    pstmt.executeUpdate();
                    connection.commit();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                pstmt.close();
                //connection.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                    System.out
                            .println("#################  Error java agent Upload to_vTiger_CRM. ####################");
                }
            }
            
            connection.close();
            } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
187
От apache тут только Connection Pool. Если уж использовать какие-то библиотеки от apache для доступа к реляционным базам, то рекомендую посмотреть , ну или
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!