Home > OS >  Bash script written in vim works differently than in the terminal! WHY?
Bash script written in vim works differently than in the terminal! WHY?

Time:10-17

The idea is the bash script that enumerates internal ports (SSRF) of a website using ports in the "common_ports.txt" file and outputs the port and "content-length" of each port accordingly.

That is curl request:

$ 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

To get the content length I have used grep:

$ curl -Is "http://10.10.182.210:8000/attack?port=5000" | grep  "Content-Length"
  Content-Length: 1035

Till now everything was ok. But when I wrote it in vim to automate the process I got weird output.

This is my full bash script:

#!/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"

An THIS IS THE OUTPUT:

$ ./script.sh
 Date: Sat, 16 Oct 2021 13:10:35 GMT9-8
 Date: Sat, 16 Oct 2021 13:10:36 GMT9-8
^C

It outputs the last line of the response variable. Could anyone explain why?? Thanks in advance!!!

CodePudding user response:

You need to wrap the $response inside double quotes.

len=$(echo "$response" | grep  "Content-Length:")
  • Related