Use tabs in HEREDOC blocks
This commit is contained in:
@@ -177,8 +177,8 @@ If you need to write more complex actions, you can leverage multiline commands:
|
|||||||
|
|
||||||
$ cat multiline.pow
|
$ cat multiline.pow
|
||||||
kapow route add /log_and_stuff - <<-'EOF'
|
kapow route add /log_and_stuff - <<-'EOF'
|
||||||
echo this is a quite long sentence and other stuff | tee log.txt | kapow set /response/body
|
echo this is a quite long sentence and other stuff | tee log.txt | kapow set /response/body
|
||||||
cat log.txt | kapow set /response/body
|
cat log.txt | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
@@ -204,9 +204,9 @@ In this example we'll be adding the security header ``nosniff`` to the response.
|
|||||||
|
|
||||||
$ cat sniff.pow
|
$ cat sniff.pow
|
||||||
kapow route add /sec-hello-world - <<-'EOF'
|
kapow route add /sec-hello-world - <<-'EOF'
|
||||||
kapow set /response/headers/X-Content-Type-Options nosniff
|
kapow set /response/headers/X-Content-Type-Options nosniff
|
||||||
|
|
||||||
echo more secure hello world | kapow set /response/body
|
echo more secure hello world | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$ kapow server nosniff.pow
|
$ kapow server nosniff.pow
|
||||||
@@ -261,8 +261,8 @@ date, then our ``.pow`` file will fix it and return the correct value to the use
|
|||||||
|
|
||||||
$ cat fix_date.pow
|
$ cat fix_date.pow
|
||||||
kapow route add -X POST /fix-date - <<-'EOF'
|
kapow route add -X POST /fix-date - <<-'EOF'
|
||||||
kapow set /response/headers/Content-Type application/json
|
kapow set /response/headers/Content-Type application/json
|
||||||
kapow get /request/body | jq --arg newdate "$(date +'%Y-%m-%d_%H-%M-%S')"" '.incorrectDate=$newdate' | kapow set /response/body
|
kapow get /request/body | jq --arg newdate "$(date +'%Y-%m-%d_%H-%M-%S')"" '.incorrectDate=$newdate' | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Call the service with ``curl``:
|
Call the service with ``curl``:
|
||||||
@@ -285,12 +285,12 @@ order to generate a two-attribute JSON response.
|
|||||||
|
|
||||||
$ cat echo-attribute.pow
|
$ cat echo-attribute.pow
|
||||||
kapow route add -X POST /echo-attribute - <<-'EOF'
|
kapow route add -X POST /echo-attribute - <<-'EOF'
|
||||||
JSON_WHO=$(kapow get /request/body | jq -r .name)
|
JSON_WHO=$(kapow get /request/body | jq -r .name)
|
||||||
|
|
||||||
kapow set /response/headers/Content-Type application/json
|
kapow set /response/headers/Content-Type application/json
|
||||||
kapow set /response/status 200
|
kapow set /response/status 200
|
||||||
|
|
||||||
jq --arg greet Hello --arg value "${JSON_WHO:-World}" --null-input '{ greet: $greet, to: $value }' | kapow set /response/body
|
jq --arg greet Hello --arg value "${JSON_WHO:-World}" --null-input '{ greet: $greet, to: $value }' | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Call the service with ``curl``:
|
Call the service with ``curl``:
|
||||||
@@ -319,7 +319,7 @@ Uploading a file using *Kapow!* is very simple:
|
|||||||
|
|
||||||
$ cat upload.pow
|
$ cat upload.pow
|
||||||
kapow route add -X POST /upload-file - <<-'EOF'
|
kapow route add -X POST /upload-file - <<-'EOF'
|
||||||
kapow get /request/files/data/content | kapow set /response/body
|
kapow get /request/files/data/content | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@@ -341,15 +341,15 @@ In this example we respond back with the line count of the file received in the
|
|||||||
$ cat count-file-lines.pow
|
$ cat count-file-lines.pow
|
||||||
kapow route add -X POST /count-file-lines - <<-'EOF'
|
kapow route add -X POST /count-file-lines - <<-'EOF'
|
||||||
|
|
||||||
# Get sent file
|
# Get sent file
|
||||||
FNAME=$(kapow get /request/files/myfile/filename)
|
FNAME=$(kapow get /request/files/myfile/filename)
|
||||||
|
|
||||||
# Counting file lines
|
# Counting file lines
|
||||||
LCOUNT=$(kapow get /request/files/myfile/content | wc -l)
|
LCOUNT=$(kapow get /request/files/myfile/content | wc -l)
|
||||||
|
|
||||||
kapow set /response/status 200
|
kapow set /response/status 200
|
||||||
|
|
||||||
echo -- "$FNAME has $LCOUNT lines" | kapow set /response/body
|
echo -- "$FNAME has $LCOUNT lines" | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@@ -378,7 +378,7 @@ In this example, an attacker can inject arbitrary parameters to ``ls``.
|
|||||||
|
|
||||||
$ cat command-injection.pow
|
$ cat command-injection.pow
|
||||||
kapow route add '/vulnerable/{value}' - <<-'EOF'
|
kapow route add '/vulnerable/{value}' - <<-'EOF'
|
||||||
ls $(kapow get /request/matches/value) | kapow set /response/body
|
ls $(kapow get /request/matches/value) | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Exploiting using curl:
|
Exploiting using curl:
|
||||||
@@ -398,7 +398,7 @@ request:
|
|||||||
|
|
||||||
$ cat command-injection.pow
|
$ cat command-injection.pow
|
||||||
kapow route add '/not-vulnerable/{value}' - <<-'EOF'
|
kapow route add '/not-vulnerable/{value}' - <<-'EOF'
|
||||||
ls -- "$(kapow get /request/matches/value)" | kapow set /response/body
|
ls -- "$(kapow get /request/matches/value)" | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
@@ -421,8 +421,8 @@ You can specify custom status code for HTTP response:
|
|||||||
|
|
||||||
$ cat error.pow
|
$ cat error.pow
|
||||||
kapow route add /error - <<-'EOF'
|
kapow route add /error - <<-'EOF'
|
||||||
kapow set /response/status 401
|
kapow set /response/status 401
|
||||||
echo -n '401 error' | kapow set /response/body
|
echo -n '401 error' | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Testing with curl:
|
Testing with curl:
|
||||||
@@ -457,8 +457,8 @@ In this example we'll redirect our users to Google:
|
|||||||
|
|
||||||
$ cat redirect.pow
|
$ cat redirect.pow
|
||||||
kapow route add /redirect - <<-'EOF'
|
kapow route add /redirect - <<-'EOF'
|
||||||
kapow set /response/headers/Location https://google.com
|
kapow set /response/headers/Location https://google.com
|
||||||
kapow set /response/status 301
|
kapow set /response/status 301
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@@ -493,9 +493,9 @@ params:
|
|||||||
|
|
||||||
$ cat parallel.pow
|
$ cat parallel.pow
|
||||||
kapow route add '/parallel/{ip1}/{ip2}' - <<-'EOF'
|
kapow route add '/parallel/{ip1}/{ip2}' - <<-'EOF'
|
||||||
ping -c 1 -- "$(kapow get /request/matches/ip1)" | kapow set /response/body &
|
ping -c 1 -- "$(kapow get /request/matches/ip1)" | kapow set /response/body &
|
||||||
ping -c 1 -- "$(kapow get /request/matches/ip2)" | kapow set /response/body &
|
ping -c 1 -- "$(kapow get /request/matches/ip2)" | kapow set /response/body &
|
||||||
wait
|
wait
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Calling with ``curl``:
|
Calling with ``curl``:
|
||||||
@@ -518,13 +518,13 @@ In the next example we'll set a cookie:
|
|||||||
|
|
||||||
$ cat cookie.pow
|
$ cat cookie.pow
|
||||||
kapow route add /setcookie - <<-'EOF'
|
kapow route add /setcookie - <<-'EOF'
|
||||||
CURRENT_STATUS=$(kapow get /request/cookies/kapow-status)
|
CURRENT_STATUS=$(kapow get /request/cookies/kapow-status)
|
||||||
|
|
||||||
if [ -z "$CURRENT_STATUS" ]; then
|
if [ -z "$CURRENT_STATUS" ]; then
|
||||||
kapow set /response/cookies/Kapow-Status 'Kapow Cookie Set'
|
kapow set /response/cookies/Kapow-Status 'Kapow Cookie Set'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -n OK | kapow set /response/body
|
echo -n OK | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Calling with ``curl``:
|
Calling with ``curl``:
|
||||||
|
|||||||
@@ -131,11 +131,11 @@ I Need My Report
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cat <<'EOF'
|
$ cat <<-'EOF'
|
||||||
you can put
|
you can put
|
||||||
more than one line
|
more than one line
|
||||||
here
|
here
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
The shell will put the data between the first ``EOF`` and the second
|
The shell will put the data between the first ``EOF`` and the second
|
||||||
``EOF`` as the ``stdin`` of the ``cat`` process.
|
``EOF`` as the ``stdin`` of the ``cat`` process.
|
||||||
@@ -151,16 +151,16 @@ I Need My Report
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacityreport - <<-'EOF'
|
kapow route add /capacityreport - <<-'EOF'
|
||||||
hostname | kapow set /response/body
|
hostname | kapow set /response/body
|
||||||
echo ================================================================================ | kapow set /response/body
|
echo ================================================================================ | kapow set /response/body
|
||||||
date | kapow set /response/body
|
date | kapow set /response/body
|
||||||
echo ================================================================================ | kapow set /response/body
|
echo ================================================================================ | kapow set /response/body
|
||||||
free -m | kapow set /response/body
|
free -m | kapow set /response/body
|
||||||
echo ================================================================================ | kapow set /response/body
|
echo ================================================================================ | kapow set /response/body
|
||||||
uptime | kapow set /response/body
|
uptime | kapow set /response/body
|
||||||
echo ================================================================================ | kapow set /response/body
|
echo ================================================================================ | kapow set /response/body
|
||||||
df -h | kapow set /response/body
|
df -h | kapow set /response/body
|
||||||
echo ================================================================================ | kapow set /response/body
|
echo ================================================================================ | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
**Senior**
|
**Senior**
|
||||||
@@ -196,18 +196,18 @@ I Need My Report
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacityreport - <<-'EOF'
|
kapow route add /capacityreport - <<-'EOF'
|
||||||
{
|
{
|
||||||
hostname
|
hostname
|
||||||
echo ================================================================================
|
echo ================================================================================
|
||||||
date
|
date
|
||||||
echo ================================================================================
|
echo ================================================================================
|
||||||
free -m
|
free -m
|
||||||
echo ================================================================================
|
echo ================================================================================
|
||||||
uptime
|
uptime
|
||||||
echo ================================================================================
|
echo ================================================================================
|
||||||
df -h
|
df -h
|
||||||
echo ================================================================================
|
echo ================================================================================
|
||||||
} | kapow set /response/body
|
} | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
**Senior**
|
**Senior**
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ Sharing the Stats
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacitystats - <<-'EOF'
|
kapow route add /capacitystats - <<-'EOF'
|
||||||
echo "{\"memory\": \"`free -m`\"}" | kapow set /response/body
|
echo "{\"memory\": \"`free -m`\"}" | kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
**Senior**
|
**Senior**
|
||||||
@@ -146,14 +146,14 @@ Sharing the Stats
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacitystats - <<-'EOF'
|
kapow route add /capacitystats - <<-'EOF'
|
||||||
jq -n \
|
jq -n \
|
||||||
--arg hostname "$(hostname)" \
|
--arg hostname "$(hostname)" \
|
||||||
--arg date "$(date)" \
|
--arg date "$(date)" \
|
||||||
--arg memory "$(free -m)" \
|
--arg memory "$(free -m)" \
|
||||||
--arg load "$(uptime)" \
|
--arg load "$(uptime)" \
|
||||||
--arg disk "$(df -h)" \
|
--arg disk "$(df -h)" \
|
||||||
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
||||||
| kapow set /response/body
|
| kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
What do you think?
|
What do you think?
|
||||||
@@ -180,15 +180,15 @@ Sharing the Stats
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacitystats - <<-'EOF'
|
kapow route add /capacitystats - <<-'EOF'
|
||||||
jq -n \
|
jq -n \
|
||||||
--arg hostname "$(hostname)" \
|
--arg hostname "$(hostname)" \
|
||||||
--arg date "$(date)" \
|
--arg date "$(date)" \
|
||||||
--arg memory "$(free -m)" \
|
--arg memory "$(free -m)" \
|
||||||
--arg load "$(uptime)" \
|
--arg load "$(uptime)" \
|
||||||
--arg disk "$(df -h)" \
|
--arg disk "$(df -h)" \
|
||||||
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
||||||
| kapow set /response/body
|
| kapow set /response/body
|
||||||
echo application/json | kapow set /response/headers/Content-Type
|
echo application/json | kapow set /response/headers/Content-Type
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
**Senior**
|
**Senior**
|
||||||
@@ -212,15 +212,15 @@ Sharing the Stats
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
kapow route add /capacitystats - <<-'EOF'
|
kapow route add /capacitystats - <<-'EOF'
|
||||||
kapow set /response/headers/Content-Type application/json
|
kapow set /response/headers/Content-Type application/json
|
||||||
jq -n \
|
jq -n \
|
||||||
--arg hostname "$(hostname)" \
|
--arg hostname "$(hostname)" \
|
||||||
--arg date "$(date)" \
|
--arg date "$(date)" \
|
||||||
--arg memory "$(free -m)" \
|
--arg memory "$(free -m)" \
|
||||||
--arg load "$(uptime)" \
|
--arg load "$(uptime)" \
|
||||||
--arg disk "$(df -h)" \
|
--arg disk "$(df -h)" \
|
||||||
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
'{"hostname": $hostname, "date": $date, "memory": $memory, "load": $load, "disk": $disk}' \
|
||||||
| kapow set /response/body
|
| kapow set /response/body
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
**Senior**
|
**Senior**
|
||||||
|
|||||||
Reference in New Issue
Block a user