#bash #curl #scripting #quotes #double-quotes
Вопрос:
Идея заключается в скрипте bash, который перечисляет внутренние порты (SSRF) веб-сайта, используя порты в «common_ports.txt» файл и выводит порт и «длину содержимого» каждого порта соответственно.
Это запрос на завиток:
$ curl -Is "http://10.10.182.210:8000/attack?port=5000"
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1035
Server: Werkzeug/0.14.1 Python/3.6.9
Date: Sat, 16 Oct 2021 13:02:27 GMT
Чтобы получить длину содержимого, я использовал grep:
$ curl -Is "http://10.10.182.210:8000/attack?port=5000" | grep "Content-Length"
Content-Length: 1035
До сих пор все было в порядке. Но когда я написал это в vim, чтобы автоматизировать процесс, я получил странный вывод.
Это мой полный сценарий bash:
#!/bin/bash
file="./common_ports.txt"
while IFS= read -r line
do
response=$(curl -Is "http://10.10.182.210:8000/attack?port=$line")
len=$(echo $response | grep "Content-Length:")
echo "$len"
done < "$file"
И ЭТО РЕЗУЛЬТАТ:
$ ./script.sh
Date: Sat, 16 Oct 2021 13:10:35 GMT9-8
Date: Sat, 16 Oct 2021 13:10:36 GMT9-8
^C
Он выводит последнюю строку response
переменной. Кто-нибудь может объяснить, почему??
Заранее спасибо!!!
Комментарии:
1. Это не имеет никакого отношения к Vim.
Ответ №1:
Вам нужно завернуть $response
внутренние двойные кавычки.
len=$(echo "$response" | grep "Content-Length:")