CURL untuk mengakses halaman yang membutuhkan login dari halaman lain

125

Saya memiliki 2 halaman: xyz.com/adan xyz.com/b. Saya hanya dapat mengakses xyz.com/bjika dan hanya jika saya login xyz.com/aterlebih dahulu. Jika mengakses xyz.com/btanpa melalui yang lain, saya cukup mendapat akses ditolak (tidak ada redirect untuk login) lewat browser. Setelah saya masuk di xyz.com/a, saya dapat mengakses yang lain.

Masalah saya melakukan ini menggunakan perintah curl. Saya berhasil masuk xyz.com/amenggunakan curl, tetapi kemudian mencoba xyx.com/bdan saya mendapatkan akses ditolak.

Saya menggunakan yang berikut ini:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

Saya sudah mencoba menggunakan baris kedua dengan & tanpa bagian pengguna / kata sandi dan masih tidak berfungsi. Kedua halaman menggunakan CA yang sama, jadi itu tidak menjadi masalah. Ada saran? Terima kasih

ms1013
sumber

Jawaban:

147

Situs web kemungkinan besar menggunakan cookie untuk menyimpan informasi sesi Anda. Saat kamu lari

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curldijalankan dua kali, dalam dua sesi terpisah. Jadi, ketika perintah kedua dijalankan, cookie yang disetel oleh perintah pertama tidak tersedia; ini seperti jika Anda masuk ke halaman adalam satu sesi browser, dan mencoba mengakses halaman bdi sesi yang berbeda.

Yang perlu Anda lakukan adalah menyimpan cookie yang dibuat oleh perintah pertama:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

dan kemudian membacanya kembali saat menjalankan yang kedua:

curl --cookie ./somefile https://xyz.com/b

Atau Anda dapat mencoba mengunduh kedua file dalam perintah yang sama, yang menurut saya akan menggunakan cookie yang sama.

Siput mekanis
sumber
Ini aneh karena ketika saya mencobanya, ini tidak berfungsi karena cookie yang disimpan di somefileberisi parameter jalur ( /adalam hal ini) dan tidak diteruskan ke panggilan kedua. Jika saya mengedit cookie di file dan hanya memberi garis miring, itu berfungsi (cookie diteruskan ke panggilan kedua). Apakah Anda tahu apakah mungkin untuk mencegah penyimpanan jalur di file cookie?
рüффп
124

Anda juga mungkin ingin masuk melalui browser dan mendapatkan perintah dengan semua header termasuk cookie:

Buka tab Jaringan Alat Pengembang, masuk, navigasi ke halaman yang diperlukan, gunakan "Salin sebagai cURL".

tangkapan layar

pengguna
sumber
12
Ini jawaban yang dalam! Itu tidak menjawab pertanyaan secara langsung, karena itu menunjukkan bagaimana menjawabnya.
bgStack15
5
itulah salah satu jawaban yang paling berguna. Ini benar-benar memungkinkan Anda untuk mengamati dan memahami bahkan otentikasi multi-langkah.
Pierre D
Saya tidak tahu tentang fitur ini yang terkubur dalam alat-alat luar biasa itu. Sangat berguna!
Timothy C. Quinn
52

Setelah beberapa googling saya menemukan ini:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Tidak tahu apakah itu berhasil, tetapi itu mungkin membawa Anda ke arah yang benar.

Joe Mills
sumber
9
Ini akan berfungsi jika Anda memiliki situs web yang mengharapkan formulir untuk dikirimkan. Anda perlu melihat sumber dan menemukan gambar <form> dan melihat apa nama bidang dan URL apa yang perlu dikirim. Anda dapat menggunakan debugger browser web Anda untuk mencari permintaan posting sehingga Anda dapat melihat apa yang sedang dikirim. Itu sedikit lebih mudah.
stonefury
0

Jawaban saya adalah mod dari beberapa jawaban sebelumnya dari @JoeMills dan @user.

  1. Dapatkan cURLperintah untuk masuk ke server:

    • Muat halaman login untuk situs web dan buka panel Jaringan Alat Pengembang
      • Di firefox, klik kanan halaman, pilih 'Inspect Element (Q)' dan klik tab Network
    • Masuk ke formulir login, masukkan nama pengguna, kata sandi dan login
    • Setelah Anda masuk, kembali ke panel Jaringan dan gulir ke atas untuk menemukan entri POST. Klik kanan dan pilih Salin -> Salin sebagai CURL
    • Tempel ini ke editor teks dan coba ini di command prompt untuk melihat apakah berhasil
      • Ada kemungkinan bahwa beberapa situs memiliki pengerasan yang akan memblokir jenis spoofing masuk ini yang memerlukan lebih banyak langkah di bawah ini untuk melewati.
  2. Ubah perintah cURL agar dapat menyimpan cookie sesi setelah login

    • Hapus entri tersebut -H 'Cookie: <somestuff>'
    • Tambahkan setelah curldi awal-c login_cookie.txt
    • Coba jalankan perintah curl yang diperbarui ini dan Anda akan mendapatkan file baru 'login_cookie.txt'di folder yang sama
  3. Panggil halaman web baru menggunakan cookie baru ini yang mengharuskan Anda untuk masuk

    • curl -b login_cookie.txt <url_that_requires_log_in>

Saya telah mencoba ini di Ubuntu 20.04 dan berfungsi seperti pesona.

Timothy C. Quinn
sumber