Fix mixed content

We all know browsers are notifiing clients of none secure connection, they also alert when there is mix content of secure and none secure objects on the same page. we will list here the simplest yet most efective way to fix that issue with and without modifying the pages.

Server side settings :

On the server side you should set to respond with the header that will tell the browser to send all requests over secure connection eg. TLS

Content-Security-Policy: upgrade-insecure-requests

Web page setting :

You can also set the same header to get called from within the HTML page itself by placing a META tag at the header of the pages

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

docker-compose simple bash container

Docker-compose is a wonderful tool, I use it all day. I fire up containers attach to them and do stuff. the short manual will show how to run a container and connect to it. I am not using Dockerfile in this example but that may be use as well if needed.

What we need is text editor to edit a simple fle called docker-compose.yaml this file will have all instructions ( minimal ones ) in order to run a basic cntainer orcastraded by docker-compose.

Here is the content of that docker-compose.yaml :

version: "3.7"
services:
  mydeb:
    container_name: mydeb
    image: "debian"
    restart: "no"
    entrypoint: /bin/bash
    tty: true

To start the instance simply fire up the composer

docker-compose up -d

The dommand will create the container, network and required stuff, and start the container. if the image is not preset or if needed , you can also tell compose to pull it from repository.

How to connect to running docker-compose container , by running the exec command, against the refering service we created on our docker-compose.yaml

docker-compose exec mydeb bash

List TLS version and ciphers

On this small script you can get list of all TLS versions and ciphers availble connecting a remore destination . the chalange on that script is that sometimes the number of supported ciphers is great and that consumes time. the main tool used here is openssl along with parallel . I also added timeout and custom port that can be set during the run

The script is build around two loops, one that loop the TLS version , and one that loop the TLS ciphers on each verison. the main command is generating a file that later will be called using parallel command . feel free to copy and modify

#!/bin/bash

TARGET=$1
TARGET_PORT=${2:-443}
TIMEOUT=${3:-2}
LOG="/tmp/TLS-$$.log"
RUN_F="/tmp/TLS-$$.sh"
TLS_V="tls1 tls1_1 tls1_2 tls1_3"

for V in $TLS_V
do
	TLS_CIPHEPS=`openssl ciphers -$V | tr ':' ' '`
	CIPHER_COMAND="cipher"
	[ $V = "tls1_3" ] && CIPHER_COMAND="ciphersuites"
	for CIPHER in $TLS_CIPHEPS
	do
		echo "echo | timeout $TIMEOUT openssl s_client -$V -$CIPHER_COMAND $CIPHER -connect $TARGET:$TARGET_PORT &>/dev/null && echo \"$V $CIPHER\" >>$LOG" >>$RUN_F
	done
done

parallel --gnu -k -j 100 <$RUN_F
cat $LOG | sort
rm -f $RUN_F $LOG

if statement one-liner bash

How to write a one liner if statement in Bash. Although I think code should be clear and easy to follow by anyone who reads it. however, I also love the simplicity and my code as short as possible, if statement that usually tends to be long, can also be one line in Bash

1. Simple do one command if true
 [ $arg -gt 10 ] && echo "$arg bigger is than 10" 

2. Run multiple commands

[  $arg -lt 10 ] && { date; echo "$arg smaller than 10"; }    

3. If true run one command else run another

[  $arg -gt 10 ] && echo Big || echo Small

netcat is awesome

“Good things last long”, my mama use to say.
and just like that netcat is no exception
Using netcat for security testing is fun simple, and you do not need to
install applications you know nothing about .
here are some fun examples from tests I use :
Simple HTTP GET

echo -e "GET / HTTP/1.0\r\nHost:www.example.com\r\n\r\n" | nc 127.0.0.1 80

Simple HTTP flood

while true
do
    echo -e "GET / HTTP/1.0\r\nHost:www.example.com\r\n\r\n" | nc 127.0.0.1 80 &
done

Simple UDP flood

cat /dev/urandom | nc -u 127.0.0.1 53

Simple SYN flood

while true
do
    nc -z 127.0.0.1 80
done

bash singleton process

Here is a simple, yet effective way, to make sure a script runs only once.
when the script start it run a simple line that detect if the number of running script
does not exceeds more then 1.

#!/bin/bash
[[ `pgrep ${0##*/} | wc -l` > 2 ]] && exit 1

This trick may come handy for example when you run a backup in a cron
and you do not want 2 processes running at the same time .

Lock a file on Linux

Here is how to lock a file from write/delete in a dirty way .
this trick will work this file system ext2-4 XFS, ReiserFS, JFS and OCFS2.
and the trick is to use the command chattr for changing file extended attribute .
A file with the ‘i’ attribute cannot be modified: it cannot be deleted or renamed,
no link can be created to this file and no data can be written to the file.
Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

# echo "Test chattr" >/tmp/test.txt
# touch /tmp/test.txt
# lsattr /tmp/test.txt
--------------e---- /tmp/test.txt
# chattr +i /tmp/test.txt
# lsattr /tmp/test.txt
----i---------e---- /tmp/test.txt
# touch /tmp/test.txt
touch: cannot touch '/tmp/test.txt': Permission denied

Loop trick in bash

For loop in BASH can be written in many ways , it could use a numeric counter
or it could use an array . here are some example that may help :


1. Count up loop in BASH, from 0 to 100

for i in `seq 0 100` ; do echo  $i ;done

2. Countdown loop in BASH , from 100 to 0

for i in `seq 100 -1 0` ; do echo  $i ;done

3. Array variable as increment loop in BASH

ar="one two three four five six eight nine ten"
for i in $ar ;do echo $i ;done

4. Array as increment loop in BASH

for i in one two three four five ;do echo $i ;done

5. For loop without seq

for i in {1..100} ; do echo $i ;done

Overflow /tmp partition

Sometimes your /tmp directory may be mounted to a partition name overflow
and the size for this partition may be 1M ,while its a 100% full capacity.
This may happen if the root partition got full ,
and the system was in need for some space to operate.
to overcome this issue , you may just unmount the partition using

# unmount overflow

If you get an error saying the device is busy , you may also try unmounting the partition with the
Lazy unmount flag . Detach the file system from the file system hierarchy now,
and cleanup all references to the file system as soon as it is not busy anymore.

# unmount -l /tmp

Splitting Certificate chain

Here is how one can split a certificate chain into individual files .
sure this can be done manualy in any text editor , but there comes a time when … well
such simple task may consume a lot of time . here are 2 examples how you can do it :
Method 1 :

cat $file|awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "mycert" n ".pem"}'

Method 2 :

csplit -k -f mycert $file '/END CERTIFICATE/+1' {*}