Example 5

HTTP Requests

Example 5

Top  Previous  Next

Upload tập tin lên trang: https://secufiles.com

 

 

Ta làm theo từng bước như sau:

 

1/ Xem Live HTTP Headers các request cần làm

 

 

·Bấm nút Upload và chọn tập tin cần upload. Khoan bấm vào nút UPLOAD QUEUE.

 

·Nếu chưa bật Live HTTP Headers thì bật nó lên. Nếu bật rồi thì bấm Clear để xoá hết các request cũ không liên quan.

 

·Giờ ta mới bấm nút Upload Queue, và Live HTTP Headers sẽ hiển thị 1 đống thông tin. Ta tìm trong Live HTTP Headers đoạn request liên quan:

 

https://secufiles.com/core/page/ajax/file_upload_handler.ajax.php?r=secufiles.com &p=https &csaKey1=d4091d78a6cc01e1c1152164ff17729bc8ee679756fcae31cfb178eb37b8e1f5 &csaKey2=aceebd98efd974723c28fcbf532d11c8a77d4f7f6e9c97148dfb59d14d7d7f55

 

POST /page/ajax/file_upload_handler.ajax.php?r=secufiles.com& p=https &csaKey1=d4091d78a6cc01e1c1152164ff17729bc8ee679756fcae31cfb178eb37b8e1f5& csaKey2=aceebd98efd974723c28fcbf532d11c8a77d4f7f6e9c97148dfb59d14d7d7f55 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36

Host: secufiles.com

Accept: application/json, text/javascript, */*; q=0.01

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.8

X-Requested-With: XMLHttpRequest

Content-Type: multipart/form-data; boundary=-----------------------B5CKBLC86qm8HZQQ

Cookie: _gat=1; _ga=GA1.2.886213774.1505364415; _gid=GA1.2.1580932931.1505364415

DNT: 1

Referer: https://secufiles.com/index.html

Connection: keep-alive

Content-Length: 10064

 

-----------------------B5CKBLC86qm8HZQQ

Content-Disposition: form-data; name="_sessionid"

 

3sq4nkg0v51a1m1c38mc5ofhr6

-----------------------B5CKBLC86qm8HZQQ

Content-Disposition: form-data; name="cTracker"

 

8561997c602c609e07b608d1623ef17b

-----------------------B5CKBLC86qm8HZQQ

Content-Disposition: form-data; name="maxChunkSize"                           → Data-Form

 

100000000

-----------------------B5CKBLC86qm8HZQQ

Content-Disposition: form-data; name="folderId"

 

 

-----------------------B5CKBLC86qm8HZQQ

Content-Disposition: form-data; name="files[]"; filename="1.png"

Content-Type: image/png

 

�PNG

 

 

Hãy để ý URL cần request đến có chứa 2 giá trị csaKey1csaKey2. Chúng ở đâu ra ? Như thường lệ ta sẽ request đến địa chỉ header Referer để lấy source Html trả về và tìm thử. → Ta request địa chỉ https://secufiles.com/index.html và lưu source request được vào Clipboard:

$rq_referer = _HttpRequest(2, 'https://secufiles.com/index.html')

ClipPut($rq_referer)

Paste source đã lưu vào Notepad hoặc trang SciTE mới và search thử (Ctrl+F3) giá trị lạ đó (ở ví dụ này là fs_csrf) có nằm trong source không, nếu có thì dùng StringRegExp để tách lấy nó ra. Ta tìm thử thì quả nhiên là thấy:

 

<html>

.........

url: 'https://secufiles.com/core/page/ajax/file_upload_handler.ajax.php?r=secufiles.com &p=https &csaKey1=8208b9c954340ed13ec45f874df6b533129ae916aba5a57abcf1c7671f3bb10d &csaKey2=9e28f7393c7f7f32b7e5a0565a6272be07654c18c5e083b9ab97898d78374884',

.........

</html>

 

→ Ta StringRegExp với pattern là "url: '(https://secufiles.com/core/ page/ ajax/file_upload_handler.*?)'" (Xem thêm về StringRegExp tại đây)

 

 

2/ Phân tích Headers

 

·Các Header như Accept, Accept-Language, Accept-Encoding, Connection, Content-Length, User-Agent, DNT: 1 ta không cần để ý đến chúng vì UDF đã add sẵn hết rồi. Xem thêm chi tiết tại mục $sAdditional_Headers

 

·Vậy còn lại header X-Requested-With: XMLHttpRequest là cần nạp vào $sAdditional_Headers

 

 

3/ Phân tích Referer

 

Hình trên có Referer nhưng không điền vào tham số $sReferer cũng được, chừng nào request thất bại mới điền vào để thử.

 

 

4/ Phân tích Cookie

 

Những cookie tạp nham thường có dạng __abcxyz, ___abcxyz ta không cần để ý đến chúng.

 

 

5/ Phân tích Data cần gửi đi

 

Nhìn Data-Form ta sẽ thấy 2 Key có giá trị lạ là _sessionid và cTracker. Vẫn như thường lệ, ta sẽ tìm trong source request từ địa chỉ header Referer. Ở bước 1 khi tìm csaKey1, csaKey2 ta đã có nguồn Html rồi, giờ tìm tiếp _sessionid và cTracker thì thấy:

 

<html>

.........

 data.formData = {_sessionid: 'ghueimbpbmb7l2gjd6erb2f8d1', cTracker: 'e33bdeb75ff19ba65795ed801157a1da', maxChunkSize: maxChunkSize, folderId: fileFolder };

.........

</html>

 

→ Ta StringRegExp để lấy 2 giá trị này là xong.

 

Tiếp theo ta sẽ dùng hàm _HttpRequest_CreateDataForm để tạo nhanh Data-Form.

·Key1_sessionid, Value1 giá trị đã StringRegExp được
·Key2cTracker, Value2 giá trị đã StringRegExp được
·Key3maxChunkSize, Value3 100000000
·Key4folderId, Value4 rỗng
·Key5files[ ], Value5Thông tin của tập tin (gồm Tên, Content-Type, Nội dung). Vì Value7Thông tin tập tin nên:
ØKey5 ta phải thêm dấu $ vào trước: files[ ] $files[ ]
ØValue5 ta nạp đường dẫn của tập tin cần upload.
ØXem hướng dẫn của hàm _HttpRequest_CreateDataForm nếu chưa hiểu vì sao như vậy.

 

 

6/ Hoàn thiện code

 

#include <_HttpRequest.au3>

$rq_referer = _HttpRequest(2, 'https://secufiles.com/index.html')

$url = StringRegExp($rq_referer, "url: '(https://secufiles.com/core/page/ajax/file_upload_handler.*?)'", 1)[0]

$_sessionid = StringRegExp($rq_referer, "_sessionid: '(.*?)'", 1)[0]

$cTracker = StringRegExp($rq_referer, "cTracker: '(.*?)'", 1)[0]

;-------------------------------------------------------------------------

$sFilePath = FileOpenDialog("Choose a File to post", "", "File (*.*)", 4)

If @error Then Exit

 

Local $aForm = ['_sessionid=' & $_sessionid, 'cTracker=' & $cTracker, 'maxChunkSize=100000000', 'folderId=', '$files[]=' & $sFilePath] ; Mấy ví dụ trước làm Form kiểu mảng 2 Chiều chán rồi, lần này làm kiểu Mảng 1 Chiều đổi gió :v

 

$rq = _HttpRequest(2, $url, $aForm, '', '', 'X-Requested-With: XMLHttpRequest') ; Làm tắt nạp thẳng mảng Form vào luôn khỏi qua bước dùng _HttpRequest_CreateDataForm

MsgBox(4096, 'Kiểm tra giá trị trả về', $rq)