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

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

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

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

Отправить Прикрепленные Файлы Постом

dimat

Well-known member
31.07.2008
508
0
BIT
0
Всем привет!

Есть вот такая хтмл страничка, которая позволяет отправить логин, пароль и некоторый список файлов постом на сервер.
<html>
<head>
<title>Загрузка отчетов</title>
<style>
table {text-align:center;border:0px solid black;width:600px}
td {text-align:center;border:0px solid black;width:600px}
.tdLeft {text-align:left}
.tdRight {text-align:right}
</style>
<script type="text/javascript">
var maxFileId = 1;
var listFiles = "";
function createFormFile() {
var fileForms = document.getElementById("fileForms");

var divFile=document.createElement("DIV");
divFile.id = "divFile"+maxFileId;
divFile.innerHTML = "<input type=\"file\" name=\"report"+maxFileId+"\" id=\"idReport"+maxFileId+"\">";
divFile.innerHTML += "<a href=\"#\" style='cursor:pointer;visibility:hidden' id=\"delFile"+maxFileId+"\" onclick=\"deleteFormFile("+maxFileId+")\">Отменить</a>";

fileForms.appendChild(divFile);
maxFileId++;
}

function deleteFormFile(id) {
if(id == maxFileId-1)
return;
var fileForms = document.getElementById("fileForms");
var fileToDel = document.getElementById("divFile"+id);
fileForms.removeChild(fileToDel);
}

function createFiles() {
var form = document.getElementById("postForm");
if(document.URL[document.URL.length-1] != '/')
form.action = document.URL + '/' + 'upload';
else
form.action = document.URL + 'upload';
createFormFile();
checkLast();
}
function checkLast(){
var lastFile = document.getElementById("idReport"+(maxFileId-1));
var delFile = document.getElementById("delFile"+(maxFileId-1));
if(lastFile.value) {
delFile.style.visibility = "visible";
createFormFile();
}
setTimeout("checkLast();",200);
}
function getFiles(){
var i;
listFiles = "";
for(i=0;i<document.forms[0].elements.length;i++) {
if(document.forms[0].elements.type == "file")
listFiles += document.forms[0].elements.name + " ";
}
document.getElementById("fileList").value = listFiles.substr(0,listFiles.length-1);
}
</script>
</head>
<body onload="createFiles()">
<div align="center">
<form action="upload" enctype="multipart/form-data" method="post" onsubmit="getFiles();" id="postForm">
<table>
<tr><td colspan="2"><h2>Загрузка отчетов</h2>ver 1.1.2.7</td></tr>
<tr><td class="tdRight">Логин:</td><td class="tdLeft"><input type="text" name="login"></td></tr>
<tr><td class="tdRight">Пароль:</td><td class="tdLeft"><input type="password" name="password"></td></tr>
<tr><td colspan="2">
<b>Укажите файлы загружаемых отчетов</b><br>
<p id="fileForms">
</p>
</td></tr>
<tr><td colspan="2" class="tdRight">
<input type="hidden" name="fileList" value="" id="fileList">
<input type="submit" value="Отправить" >
</td></tr>
</table>
</form>
</div>
</body>
</html>




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

Подскажите как это сделать?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215

если браузер - ишак - будете извращаться :(
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
Уточнение: нужно сделать на форме лотус и все это должно работать в клиенте(не web)
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
хм... агент на текущем документе, на сервере.
еще вариант отправлять письмо-запрос с параметрами, сервер принимает запрос -> обрабатывает.
а может xpage? по сути такая же страница, но при этом и на клиенте...

ps я бы делал запросом, до xpage еще руки не дошли.
Отправлял бы письмо на определенный адрес, mail-in database. В ней агент на обработку.
После обработки сносил бы документ где содержится attach, логин, пароль.
Если ошибка - документ жив, можно поправить и переобработать.
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
Ну тут разные варианты могут быть, с этим нет проблем, проблема в том, что я не знаю как сформировать такой же пост запрос и отправить его

Кстати, xpage не вариант, у всех 7 клиент стоит
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
тогда

Добавлено: при отправке на домину - сначала get формы нуна, чтобы уникальное число получить (бишь имярек аплоада)
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
Вобщем сделали так: пхп скрипт который гетом принимает параметры (логин, пароль, список путей к файлам) и отправляет уже пост с логином паролем и файлами, на стороне лотуса гет выполняет ява агент, предварительно определив пару логин/пароль и список путей к файлам.

наверное можно было бы сделать все на ява, но я так и не смог разобраться как отправить помимо текста еще и файлы.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Вобщем сделали так: пхп скрипт который гетом принимает параметры (логин, пароль, список путей к файлам) и отправляет уже пост с логином паролем и файлами, на стороне лотуса гет выполняет ява агент, предварительно определив пару логин/пароль и список путей к файлам.

наверное можно было бы сделать все на ява, но я так и не смог разобраться как отправить помимо текста еще и файлы.
вы про апач либу читали - там прям код написан, кот. нуна в джава вставить
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
о, только сейчас увидел пост, спасибо, почитаю
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
так чтобы как-то описание процесса было :(

Добавлено: апачевская часть - это серверная, сори

Добавлено:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
спасибо, взаимно :(
вот еще
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
кста - вот полный пример (ссылка в блоге выше не работает)


Добавлено: текст выложу, ато сцылки могут подохнуть :(<!--shcode--><pre><code class='java'>import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;

...

// The input:
File f = ...;
String title = ...;
String desc = ...;

// The execution:
DefaultHttpClient httpclient = new DefaultHttpClient();

HttpPost method = new HttpPost("http://host:port/path");
MultipartEntity entity = new MultipartEntity();
entity.addPart("title", new StringBody(title, Charset.forName("UTF-8")));
entity.addPart("desc", new StringBody(desc, Charset.forName("UTF-8")));
FileBody fileBody = new FileBody(f);
entity.addPart("file", fileBody);
method.setEntity(entity);

HttpResponse response = httpclient.execute(method);
System.out.println(response.getStatusLine());[/CODE]

Добавлено: останется вопрос с авторизацией ;) (сессионной), но это тема отдельная (здесь как-то пробегала КМК)
 
Мы в соцсетях:

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