LİNUX

cURL Nedir? cURL Nasıl Kullanılır?

cURL Nedir?

cURL Nedir? Nasıl Kullanılır? sorularının cevabına baktığımızda, cURL dosya alıp göndermek için komut satırı üzerinde çalışan açık kaynak kodlu ve ücretsiz bir yazılım olarak 1998 yılında kullanıma sunulmuştur. En son kararlı sürüm, 9 Aralık 2020’de piyasaya sürülen 7.74.0’dır.

Kendi web adresindeki açıklamaya baktığımızda “cURL, verileri aktarmak için komut satırlarında veya komut dosyalarında kullanılır. Ayrıca arabalarda, televizyon setlerinde, yönlendiricilerde, yazıcılarda, ses cihazlarında, cep telefonlarında, tabletlerde, set üstü kutularda, medya oynatıcılarda kullanılır ve her gün milyarlarca insanı etkileyen binlerce yazılım uygulaması için internet aktarım omurgasıdır”. Yazımın devamında kullanım örnekleri ile daha net anlaşılacağını düşünüyorum.

Desteklediği protokoller:

DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET ve TFTP. curl, SSL sertifikaları, HTTP POST, HTTP PUT, FTP yükleme, HTTP form tabanlı yükleme, proxy’ler, HTTP / 2, HTTP / 3, çerezler, kullanıcı + şifre kimlik doğrulaması (Temel, Düz, Özet, CRAM-MD5, NTLM, Anlaşma ve Kerberos), dosya aktarımı devam ettirme, proxy tünelleme ve daha fazlası.

Daha detaylı bilgiyi cURL kendi web adresi olan https://curl.se/ adresini ziyaret ederek alabilirsiniz.

Aracın kaynak kodlarına ve kurulum dosyalarına buradan ulaşılabilir. >> cURL

cURL Nasıl Kullanılır?

cURL örneklerini gösterirken HackTheBox Academy platformunda aynı eğitimden ve burada yer alan web adresinden faydalanacağım. Yeni bitirmiş olduğum eğitimi pekiştirmek amacıyla bu yazıyı yazmak istedim. Umarım faydalı olur.

cURL – GET Request

Tarayıcılardan farklı olarak, cURL HTML’yi işleyemez ve JavaScript’i çalıştıramaz, yani yanıtın tamamı bize ham olarak sağlanır. Ayrıntı düzeyini artırmak için “-v” anahtarını kullanarak ham HTTP isteklerini görüntülemek mümkündür.

CURL – GET Request Verbose

Bu sefer gönderilen ve alınan HTTP başlıklarını görüyoruz. cURL, standart URL biçimini anlar, bu da URL’de kimlik bilgilerini belirtebileceğimiz anlamına gelir.

cURL – Basic AUTH Login

Kimlik bilgilerini ayrıştırdı ve kodlanmış verilerle Authorization (Yetkilendirme) başlığını ekledi. Sunucu daha sonra 302 Found ile yanıt verdi, bu kimlik doğrulamanın başarılı olduğu anlamına gelir. Alternatif olarak, “-u” bayrağı kimlik bilgilerini belirtmek için de kullanılabilir.

cURL – Basic AUTH Login

302 Found mesajı ile girişin başarılı olduğunu anlıyoruz. Tarayıcıların aksine, cURL bizi varsayılan olarak belirtilen konuma yönlendirmez. “-L” bayrağı cURL’ye yeniden yönlendirmeleri takip etmesini söyler.

cURL – Basic AUTH Login & Follow Redirections

cURL – Passing Data

POST bölümünden cURL kullanarak sayfaya giriş yapmayı deneyelim. CURL tarafından kullanılan varsayılan “Conent-Type” “application / x-www-form-urlencoded” dir ve verileri “-d” bayrağı kullanılarak iletilebilir.

cURL, “-d” bayrağı kullanıldığında otomatik olarak bir POST isteği gönderir. Bunun hatalarını ayıklamak için “-v” anahtarını kullanalım.

cURL – Debug

[s3rdar@s3rdar-arch ~]$ curl -d 'username=guest&password=guest' -L http://159.65.84.169:30429/login.php/ -v
*   Trying 159.65.84.169:30429...
* Connected to 159.65.84.169 (159.65.84.169) port 30429 (#0)
> POST /login.php/ HTTP/1.1
> Host: 159.65.84.169:30429
> User-Agent: curl/7.74.0
> Accept: */*
> Content-Length: 29
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 29 out of 29 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Date: Sat, 16 Jan 2021 20:45:52 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Set-Cookie: auth=Z3Vlc3RfNjFmNGY4ZDAzY2JkNGE2YTM3NGU%3D
< Location: admin/dashboard.php
< Content-Length: 938
< Content-Type: text/html; charset=UTF-8
< 
* Ignoring the response-body
* Connection #0 to host 159.65.84.169 left intact
* Issue another request to this URL: 'http://159.65.84.169:30429/login.php/admin/dashboard.php'
* Switch from POST to GET
* Found bundle for host 159.65.84.169: 0x5631d29bc940 [serially]
* Can not multiplex, even if we wanted to!
* Re-using existing connection! (#0) with host 159.65.84.169
* Connected to 159.65.84.169 (159.65.84.169) port 30429 (#0)
> GET /login.php/admin/dashboard.php HTTP/1.1
> Host: 159.65.84.169:30429
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Sat, 16 Jan 2021 20:45:52 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Vary: Accept-Encoding
< Content-Length: 938
< Content-Type: text/html; charset=UTF-8
< 

Yukarıdaki komut tüm iletişim sürecini göstermektedir. İlk olarak, POST isteği, sunucu tarafından doğrulanan kimlik bilgileriyle birlikte gönderilir. Sunucu bir 302 Found yanıtı döndürür ve bizi kontrol paneline yönlendirir. cURL daha sonra kontrol paneline bir GET isteği göndermeye çalışır, ancak tekrar giriş sayfasına yönlendirilir. Bu neden oldu? Yakından bakıldığında, cURL’nin oturum açtıktan sonra aldığı çerezleri tekrar göndermediği görülebilir. Bu, kontrol paneli tarafından kimlik doğrulama başarısızlığına ve sonuçta yeniden yönlendirmeye yol açar. “–Cookie” veya “–cookie-jar” seçeneği, cURL’de çerez kullanımını belirtmek için kullanılabilir. Bu, /dev/null veya diskteki çerezlerin kaydedileceği bir dosyayı işaret edebilir.

cURL – Cookie

Burada çerezler benim yaptığım istekte kaydedilmedi fakat bu şekilde çerezler kaydedilip bir sonraki oturum için saklanabilmektedir.

cURL – Cookie File

Bağımsız değişken olarak bir dosya adı belirtilmesi, çerezleri daha sonra sayfaya doğrudan erişmek için kullanılabilecek bir dosyaya kaydeder. Burada cookies.txt isimli dosyaya kayıt ederek saklayıp daha sonra kullanabileceğiz.

cURL – Cookie File

Bu istekte cookie bayrağını kullanmadan istek göndermiş olsaydık başarısız olacaktı fakat cookie bayrağı ile yaptığımız istek başarılı oldu.

cURL – Content-Type

JSON verilerini cURL kullanarak göndermek de mümkündür. Bu, “-H” bayrağıyla “application / json” başlığını belirterek yapılabilir.

“-H” seçeneği, herhangi bir başlık türünü belirtmek için kullanılabilir. Yukarıdaki ‘302 Found’ yanıtı, oturum açmanın JSON verileriyle de başarılı olduğunu gösteriyor.

cURL – OPTIONS Request

Yukarıdaki komut, sunucuya bir OPTIONS isteği gönderdi. Burada Allow başlığında izin verilen yöntemleri görmekteyiz. Buradan oldukça tehlikeli sonuçlar çıkabilmektedir. -X seçeneği hangi isteği göndereceğimizi seçmemize olanak sağlamaktadır. PUT yöntemini kullanarak bir dosya yüklemeyi deneyelim.

cURL – File Upload

file.txt adında bir dosya içerisine mesajımızı yazarak oluşturduk. “@” Sembolü, cURL tarafından dosyayı okumak ve içeriğini veri olarak göndermek için kullanılır. Daha sonra PUT yöntemi ile dosyayı karşıya yükledik. 201 Created yanıtı dosyanın oluşturulduğunu bize göstermektedir.

Dosyayı yüklediğim konuma bir istekte bulunduğumda başarılı bir şekilde yüklendiğini ve okunabildiğini görüyorum.

cURL – DELETE Method

Karşıya yüklemiş olduğumuz dosyayı DELETE methodunu kullanarak sildik. Ardından başarılı olup olmadığımızı anlamak için dosya konumuna bir istekte bulunduk ve 404 Not Found mesajını aldık. Başarılı bir şekilde dosyayı sildik.

Kaynaklar:

Başka yazılarda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

four × four =

Başa dön tuşu