Sandbox99 Chronicles

Mastering Curl in Kali Linux: Your Go-To Tool for Network Interaction and Ethical Hacking Part 2

curl part 2

Written by Jose Mendez

Hi, I’m Jose Mendez, the creator of sandbox99.cc. with a passion for technology and a hands-on approach to learning, I’ve spent more than fifteen years navigating the ever-evolving world of IT.

Published Jul 3, 2025 | Last updated on Jul 3, 2025 at 3:26PM

Reading Time: 6 minutes

I. Advanced Curl Techniques for Ethical Hacking

This is our previous blogs related to curl. Beyond basic reconnaissance, curl truly shines when you need to craft custom HTTP requests, simulate complex user interactions, or bypass certain security measures. This is where its power for web application penetration testing becomes evident.

A. Sending Custom HTTP Requests:

The -X or --request option allows you to specify the HTTP method (GET, POST, PUT, DELETE, PATCH, etc.) you want to use.

  1. POST Requests: Sending Data to the Server POST requests are fundamental for submitting forms, uploading data, and interacting with APIs.
    • Sending Form Data (URL-encoded): This mimics traditional HTML form submissions (Content-Type: application/x-www-form-urlencoded). Use -d or --data for the request body.
curl -X POST -d "username=admin&password=password123" https://target.com/login 

This sends username=admin and password=password123 in the request body.

  • Sending JSON Data: Many modern APIs use JSON for data exchange. You’ll need to set the Content-Type header explicitly using -H or --header.
curl -X POST -H "Content-Type: application/json" -d '{"item_name":"new_widget", "quantity":10}' https://api.target.com/products

The single quotes around the JSON string are important to prevent the shell from interpreting special characters.

PUT, DELETE, etc.: Interacting with RESTful APIs

  • PUT (Update/Create Resource):
curl -X PUT -H "Content-Type: application/json" -d '{"status":"active"}' https://api.target.com/users/123

  • DELETE (Remove Resource):
curl -X DELETE https://api.target.com/users/456

  • These methods are crucial for testing the security of RESTful APIs, checking for improper access controls or insecure direct object references (IDOR).

B. Authentication:

curl provides options to handle various authentication schemes.

01. Basic Authentication: This sends credentials in a base64-encoded string in the Authorization header.

curl -u username:password https://target.com/protected_resource 

curl handles the base64 encoding for you.

02. Digest Authentication: A more secure challenge-response mechanism than Basic authentication.

curl --digest -u username:password https://target.com/protected_resource

03. Bearer Tokens/Custom Headers for APIs: Many APIs use token-based authentication (e.g., OAuth 2.0, JWT). You typically include a Bearer token in the Authorization header.

curl -H "Authorization: Bearer YOUR_API_TOKEN_HERE" https://api.target.com/resource 

This is extremely common in modern web application penetration testing.

C. Handling Cookies: Simulating Sessions

Cookies are fundamental for managing user sessions, preferences, and state on the web. curl allows you to manage them effectively.

01. Saving Cookies (-c): After a login request, the server often sends session cookies. You can save these to a file.

curl -c cookies.txt -d "username=test&password=testpass" https://target.com/login 

This command logs in and saves any received cookies into cookies.txt.

02. Sending Cookies (-b): To simulate a logged-in session, you can send the previously saved cookies with subsequent requests.

curl -b cookies.txt https://target.com/dashboard 

This will send the cookies from cookies.txt with the request to the dashboard, allowing you to access protected content as if you were logged in.

D. Working with Proxies: Intercepting Traffic

Integrating curl with an intercepting proxy (like Burp Suite, OWASP ZAP, or mitmproxy) is essential for in-depth analysis and modification of requests/responses.

01. Using an HTTP Proxy:

curl -x http://proxy_ip:port https://target.com 

For example, to route curl traffic through Burp Suite running on localhost port 8080:

curl -x http://127.0.0.1:8080 http://target.com 

For HTTPS traffic, you’ll often need to use -k (insecure) or configure curl to trust the proxy’s certificate, as Burp generates its own.

curl -x http://127.0.0.1:8080 -k https://target.com 

This setup allows you to inspect, modify, and replay curl requests within your proxy tool.

E. SSL/TLS Manipulation: Handling Certificates

01. Ignoring Invalid Certificates (-k or --insecure): When dealing with self-signed certificates, expired certificates, or proxy-generated certificates, curl will by default reject the connection due to certificate validation errors. The -k option bypasses this.

curl -k https://self-signed-site.com

IMPORTANT SECURITY WARNING: Never use -k in production environments or when dealing with sensitive data unless you fully understand and accept the risks. It disables critical security checks, making you vulnerable to Man-in-the-Middle attacks. In penetration testing, it’s a pragmatic necessity for specific scenarios.

02. Specifying Client Certificates (--cert, --key): Some systems require client-side certificates for authentication.

curl --cert client.pem --key client.key https://secure-api.com/resource 

This is less common for general web Browse but vital for specific enterprise or API interactions.

F. Rate Limiting and Timeouts:

When testing, it’s crucial to be a responsible hacker. curl offers options to control request behavior.

01. Controlling Download Speed (--limit-rate):

curl --limit-rate 100K -O https://largefile.zip 

This limits the download speed to 100 kilobytes per second, preventing you from overwhelming the server or your network.

02. Setting Maximum Operation Time (--max-time):

curl --max-time 5 https://slow-server.com 

This will abort the operation if it takes longer than 5 seconds. Useful for avoiding long hangs on unresponsive servers during scans.

G. Uploading Files (FTP/SFTP/HTTP POST):

curl can also handle file uploads to various protocols.

01. Uploading via FTP/SFTP:

curl -T local_file.txt ftp://ftp.example.com/upload/
curl -T local_file.txt sftp://user@sftp.example.com/upload/

(You might need -u for authentication with FTP/SFTP).

02. HTTP POST File Uploads: This simulates file uploads through web forms using multipart/form-data. Use the -F or --form option.

curl -F "image=@/path/to/my/photo.jpg" -F "description=My vacation photo" https://target.com/upload

The @ symbol before the file path tells curl to read the content of the file and send it as part of the form data. This is essential for testing file upload vulnerabilities.

II. Practical Ethical Hacking Scenarios with Curl

Now that we’ve covered the techniques, let’s conceptualize how curl fits into real-world ethical hacking scenarios. While curl is a low-level tool, it’s often the foundation for understanding and interacting with vulnerabilities that more specialized tools might then automate.

A. Web Vulnerability Testing (Conceptual):

01. Testing for Broken Authentication:

  • Brute-forcing Login (Basic): While hydra or medusa are built for this, curl can send individual login attempts. You could write a simple bash loop that iterates through a wordlist and sends POST requests, checking the response for success/failure indicators.
# Conceptual: Not a robust brute-forcer, but demonstrates the idea 
while IFS= read -r password; do
    response=$(curl -s -d "username=admin&password=$password" https://target.com/login) 
    if echo "$response" | grep -q "Login successful"; then 
      echo "Password found: $password" 
      break 
    fi 
done < passwords.txt
  • Session Management Flaws: After a successful login, you can use curl -b cookies.txt to test if you can access restricted pages without proper re-authentication, or if session IDs are predictable.

02. Exploiting Simple XXE or SQLi (if applicable with simple GET/POST): For very basic, reflected cross-site scripting (XSS) or simple SQL injection, curl can be used to inject payloads and observe responses.

  • XSS Example (Reflected):
curl "https://target.com/search?q=<script>alert('XSS')</script>" 

Then, inspect the HTML source in the response to see if the script tag was reflected unsanitized.

  • SQLi Example (Error-based in GET parameter):
curl "https://target.com/products?id=1%20UNION%20SELECT%20null,database(),null--" 

Look for database error messages or the database name in the response.

03. Enumerating Directories and Files: While tools like dirb, gobuster, or ffuf are purpose-built for directory enumeration, curl can be used to test individual paths identified through other means.

curl -I https://target.com/admin/ 
curl -I https://target.com/backup.zip

Checking the HTTP status codes (200 OK, 301/302 Redirect, 403 Forbidden, 404 Not Found) quickly tells you about the existence and accessibility of resources.

B. Network Service Interaction:

01. Interacting with Exposed APIs: This is where curl truly shines. You can meticulously craft requests to test every endpoint, every parameter, and every HTTP method on a target API, checking for:

  • Broken Access Control (IDOR, BFL)
  • Improper Data Handling
  • Injection Vulnerabilities
  • Misconfigurations
# Example: Check if a user can delete another user's profile 
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" https://api.target.com/users/other_user_id

02. Simple FTP/SCP Transfers: As shown in Section IV.G, curl can be used for basic file transfers over FTP or SCP, useful if you’ve found credentials or a vulnerable service.

C. Simulating User Behavior:

curl can be invaluable for scripting repetitive tasks or simulating user flows for testing purposes.

  • Performance Testing (Basic): Repeatedly hitting an endpoint to see its response time.
  • Chaining Requests: Simulating a user’s journey through a website (e.g., login -> browse products -> add to cart -> checkout), especially useful for testing complex session management.

III. Best Practices and Caveats

While curl is incredibly powerful, it comes with responsibilities and considerations, especially in the context of ethical hacking.

A. Ethical Considerations: Always Ask for Permission!

This is the golden rule of ethical hacking. Never use curl (or any other hacking tool) against systems you do not own or for which you do not have explicit, written permission from the owner. Unauthorized access is illegal and can lead to severe consequences.

B. Legality: Know Your Jurisdiction

Understand the laws governing cybersecurity and penetration testing in your region. What is permissible in one country may be illegal in another. Ignorance of the law is not an excuse.

C. Rate Limiting: Be a Good Neighbor

When performing automated or repeated requests with curl, be mindful of the target server’s resources. Excessive requests can lead to:

  • Denial of Service (DoS): Accidentally or intentionally overwhelming the server.
  • IP Blocking: Your IP address being blocked by the server’s security mechanisms.
  • Suspicion: Triggering alerts for malicious activity. Use options like --limit-rate and sleep commands in scripts to avoid hammering the server.

D. Security Risks: The Dangers of --insecure (-k)

As mentioned, the -k or --insecure option disables SSL/TLS certificate verification. While convenient for testing self-signed certificates or proxying HTTPS traffic, it opens you up to Man-in-the-Middle (MITM) attacks in real-world scenarios. Never use it when dealing with sensitive information or in environments where certificate validation is critical.

E. Complementary Tools: curl in Context

curl is a fantastic low-level tool, but it’s rarely used in isolation for complex tasks. It integrates beautifully with:

  • Burp Suite/OWASP ZAP: For intercepting, modifying, and replaying requests.
  • Nmap: For initial port scanning and service detection.
  • jq: For parsing JSON responses when interacting with APIs.
  • sed/awk/grep: For text manipulation and extraction from curl output.
  • Bash/Python: For scripting and automating complex workflows. Think of curl as the engine; these other tools are the gearbox, steering, and navigation system that make the vehicle complete.

IV. Conclusion

curl might seem like just another command-line utility, but for anyone working with networks, especially in the realm of ethical hacking and cybersecurity, its versatility is unmatched. We’ve explored how it can be used for fundamental data retrieval, detailed reconnaissance, crafting intricate HTTP requests for web application testing, handling authentication and cookies, and integrating with proxies.

By mastering curl, you gain a profound understanding of network communication at the HTTP level, which is a critical skill for diagnosing issues, discovering vulnerabilities, and building robust scripts. It empowers you to interact directly with web services, APIs, and file transfer protocols with precision and control.

Now, it’s your turn! The best way to learn curl is by experimenting. Try fetching content from different websites, inspecting their headers, sending custom POST requests to test forms (on legitimate targets you have permission for, of course!), and chaining commands together.

Calendar

July 2025
S M T W T F S
 12345
6789101112
13141516171819
20212223242526
2728293031  

Related Post