1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

[DELPHI] Отправка файла на .php

Тема в разделе "Исходные коды", создана пользователем EEjester, 7 авг 2014.

  1. TopicStarter Overlay
    EEjester

    EEjester hack_the_god

    Регистрация:
    25 окт 2012
    Сообщения:
    1.326
    Симпатии:
    941
    Код:
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils, Classes, WinInet;       
     
    type
      TPostField = record
        Field: string;
        Value: AnsiString;
        FilePath: string;
        FileName: string;
        Mime: string;
      end;
      TPostFields = array of TPostField;
     
    function HttpRequest(UserAgent, Method, Domain, Path: String; Fields: TPostFields; var Error: Boolean): String;
    const
      boundary = '365OV20O2O90WC5FW52WUKJ06YJ7J5AP';
      NL = #13#10;
      function FileToStr(FileName:string): AnsiString;
      var
        MS: TMemoryStream;
      begin
        MS := TMemoryStream.Create;
        MS.LoadFromFile(FileName);
        SetString(Result,PChar(MS.memory),MS.Size);
        MS.Free;
      end;
      function AddField(Field: TPostField):string;
      var
        FileContents: AnsiString;
      begin
        Result := '--%s'+NL+'Content-Disposition: form-data; name="%s"; data="%s"';
        if (Field.FilePath<>'') then
          begin
            if (FileExists(Field.FilePath)) then
              begin
                FileContents := FileToStr(Field.FilePath);
                Field.Value := FileContents;
                if (Field.FileName='') then
                  Field.FileName := ExtractFileName(Field.FilePath);
                Result := Result + '; filename="%s"';
                if (Field.Mime='') then
                  Field.Mime := 'application/octet-stream';
              end
              else
              begin
                Result := '';
                exit;
              end;
          end
          else
          begin
            if (Field.FileName<>'') then
              begin
                Result := Result + '; filename="%s"';
                if (Field.Mime='') then
                  Field.Mime := 'text/plain';
              end;
          end;
        Result := Format(Result+NL, [boundary, Field.Field, Field.Field, Field.FileName]);
        if (Field.Mime<>'') then
          Result := Result + Format('Content-Type: %s'+NL, [Field.Mime]);
        Result := Result + NL;
        Result := Result + Format('%s'+NL, [Field.Value]);
      end;                                 
      function ReadHTTPData(hRequest: Pointer): String;
      var
        ReadedSize, L, I: cardinal;
        Buffer: AnsiString;
      begin
        I := 1;
        while true do
          begin
            WinInet.InternetQueryDataAvailable(hRequest, L, 0, 0);
            if L = 0 then
              break;                       
            SetLength(Buffer, I + L);
            if (not InternetReadFile(hRequest, @Buffer, L, ReadedSize)) then
              break;
            inc(I, ReadedSize);
          end;
        Buffer := #0;
        Result := WideString(Buffer)
      end;
    var
      sHeaders, sContent: string;
      hSession, hConnect, hRequest: Pointer;
      S: PAnsiChar;
      I: Integer;
      Field: TPostField;
    begin
      Result := '';
      sContent := '';
      for I:=0 to Length(Fields)-1 do
        begin
          Field := Fields;
          sContent := sContent + AddField(Field);
        end;
      sContent := sContent + Format('--%s--'+NL, [boundary]);
      sHeaders := '';
      sHeaders := sHeaders + Format('Content-Type: multipart/form-data; boundary=%s'+NL,[boundary]);
      sHeaders := sHeaders + Format('Accept-Encoding: gzip,deflate,sdch'+NL,[]);
      sHeaders := sHeaders + Format('Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'+NL,[]); 
      sHeaders := sHeaders + Format('Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,bg;q=0.2'+NL,[]);
      sHeaders := sHeaders + Format('Connection:keep-alive'+NL,[]);
      sHeaders := sHeaders + Format('Content-Length:'+IntToStr(Length(sContent))+NL,[]);
      hSession := InternetOpen(PAnsiChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      hConnect := InternetConnect(hSession, PChar(Domain),INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
      S := '*/*\0';
      hRequest := HttpOpenRequest(hConnect, PAnsiChar(Method), PChar(Path), nil, nil, Pointer(S), 0, 1);
      if HttpSendRequest(hRequest, PAnsiChar(sHeaders), Length(sHeaders), PAnsiChar(sContent), Length(sContent)) then
        begin
          Result := ReadHTTPData(hRequest);
        end
        else
        begin
          writeln('Error...');
          Error := true;
        end;
    end;
     
    var
      Content: string;
      Error: Boolean;   
      Fields: TPostFields;
     
    begin
      SetLength(Fields,3);
     
      Fields[0].Field := 'form_field';
      Fields[0].Value := 'field_value';
     
      Fields[1].Field := 'form_field2';
      Fields[1].Value := 'field_value222222222';
      Fields[1].FileName := 'file2.txt';
     
      Fields[2].Field := 'picture';
      Fields[2].FilePath := 'C:\file1.rar';
      Fields[2].FileName := 'file1.rar';
     
      Content := HttpRequest('MyFileUploader', 'POST', 'site.ru', '/', Fields, Error);
      if (not Error) then
        writeln(Content)
      else
        writeln('Error...');
     
      readln;
    end.

    Код:
    <?
    $UploadDir = '/';
    if (empty($_FILES)) print '$_FILES is empty.';
    foreach($_FILES as $arFile) {
    print 'Loading file "'.$arFile['name'].'"... ';
    if (move_uploaded_file($arFile['tmp_name'], $_SERVER['DOCUMENT_ROOT'].$UploadDir.'/'.$arFile['name'])) {
    print 'OK!';
    } else {
    print 'Error!';
    }
    print "\r\n";
    }
     
    print "\r\n";
    print 'Press any key to exit';
    ?>
     
    • Like Like x 6
    Метки:
  2. m0nk

    m0nk

    Регистрация:
    5 сен 2013
    Сообщения:
    295
    Симпатии:
    118
    Delphi 7 или XE ?
     
  3. TopicStarter Overlay
    EEjester

    EEjester hack_the_god

    Регистрация:
    25 окт 2012
    Сообщения:
    1.326
    Симпатии:
    941
     
    • Like Like x 1
  4. ResH

    ResH Команда форума

    Регистрация:
    26 июл 2012
    Сообщения:
    1.680
    Симпатии:
    2.274
    Можно отправить шелл ?))
     
    • Like Like x 1
  5. TopicStarter Overlay
    EEjester

    EEjester hack_the_god

    Регистрация:
    25 окт 2012
    Сообщения:
    1.326
    Симпатии:
    941
    ыыы) можно))
     
  6. K_NoW

    K_NoW HackMe Please

    Регистрация:
    16 мар 2014
    Сообщения:
    464
    Симпатии:
    222
    Код от слеша пошустрее будет, и по проще.
     
  7. BoberMod

    BoberMod Временно недоступен

    Регистрация:
    11 окт 2013
    Сообщения:
    571
    Симпатии:
    539
    в студию
     
  8. K_NoW

    K_NoW HackMe Please

    Регистрация:
    16 мар 2014
    Сообщения:
    464
    Симпатии:
    222
    Код:
    function SendFile(host, script, filename:string):string;
    var
      sock : dword;
      ca : sockaddr_in;
      HTTPHeader : string;
      boundary : string;
      fs:dword;
      hFile : DWORD;
      buf : array [0..4095] of char;
      p : PHostEnt;
      rb : cardinal;
      len : integer;
      SubHeader1 : string;
      SubHeader2 : string;
    begin
      result := '';
    
      hFile := CreateFile(PChar(filename), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    
      if hFile <> INVALID_HANDLE_VALUE then
      begin
        fs := GetFileSize(hFile, nil);
    
        sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    
        if sock <> INVALID_SOCKET then
        begin
          ca.sin_family := AF_INET;
          ca.sin_port := htons(80);
    
          p := GetHostByName(PChar(host));
          if p = nil then
          begin
    
            ca.sin_addr.s_addr := inet_addr(pchar(host));
          end
          else
          begin
    
            ca.sin_addr := PInAddr(p.h_addr_list^)^;
          end;
    
    
          if connect(sock, ca, sizeof(ca)) <> -1 then
          begin
    
            boundary := inttohex(random(65535), 4)+inttohex(random(65535), 4)+inttohex(random(65535), 4);
    
            SubHeader1 :=  '--'+boundary+#13#10+
                          'Content-Disposition: form-data; name="myfile"; filename="'+filename+'"'#13#10+
                          'Content-Type: application/octet-stream'#13#10#13#10;
            SubHeader2 := #13#10+'--'+boundary+'--'#13#10;
            HTTPHeader := 'POST '+script+' HTTP/1.1'#13#10+
                          'Host: '+host+#13#10+
                          'Connection: close'#13#10+
                          'Content-Type: multipart/form-data; boundary='+boundary+#13#10+
                          'Content-Length: '+inttostr(fs + length(SubHeader1) + length(SubHeader2))+#13#10#13#10+SubHeader1;
    
    
            send(sock, HTTPHeader[1], length(HTTPHeader), 0);
            while true do
            begin
              rb := 0;
    
              ReadFile(hFile, buf, 4096, rb, nil);
              if rb = 0 then break;
              send(sock, buf, rb, 0);
            end;
    
            send(sock, SubHeader2[1], length(SubHeader2), 0);
            while true do
            begin
              len := recv(sock, buf, 4096, 0);
              if len > 0 then
              begin
                result := result + copy(buf, 0, len);
              end
              else
              begin
                break;
              end;
            end;
          end;
          closesocket(sock);
        end;
        CloseHandle(hFile);
      end;
    end;
     
    • Like Like x 1

Поделиться этой страницей

Загрузка...